Привет, Отцы! Извиняюсь за наивный вопрос. Но любитель я знаете-ли задавать вопрос в лоб. Существует ли определенный алгоритм при препарации программы с целью изучить ее от и до. Я вот что имею ввиду: Например: 1)Сначала находим функцию WinMain. 2)Затем находим процедуру обработки событий 3)Находим все функции 4)Определяем их(функций) функции(сдорово я это зациклил 5)рисуем общюю блок схему работы программы Ну вобщем вы поняли. У Касперски много обЪяснений деталей но нет общей стратегии и логики что нужно делать для того чтобы понять что делает программа. Вобщем нужен понятный и простой алгоритм по которому любой чайник начнет реверс.
Я тоже в таком нуждаюсь Если серьёзно, то универсального подхода просто нет. Для начала лучше реверсить что-нибудь не сложное и не объёмное, чтоб можно было разобрать каждую микроинструкцию. С опытом развивается "интуиция", которая позволяет сразу выявить наиболее интересные моменты в коде и построить в уме блок-схему. Туториалы по реверсингу тоже не мешает почитать, не только Касперски.
NeutronMass Алгоритма по сути быть не может,т.к. каждый хитрый разработчик программы пытается как нить запутать и защитить свой код=>к каждой программе свой подход.Вот так поломаешь программ сам с сотню,"интуиция" появится и сам ответишь на свой вопрос
1)Сначала находим функцию WinMain. Как правило, в этом первая проблема - с какого куска из многих начинать анализ. Разбирать программу с самого начала может себе позволить только мечтательный философ. Или ты имеешь в виду CheckLicense_WinMain ? но нет общей стратегии и логики что нужно делать для того чтобы понять что делает программа Некоторые общие подходы, без сомнения, существуют. Например, если программа спрашивает что-то и проверяет, трассируют введенные данные до места их использования, жалуется на ExpiryDate - включают монитор обращений к GetLocalTime и т.п.
NeutronMass а Касперски прав и очень!!! Крутой дядька, и знает что говорить, нет никакой конкретной и общей там стратегии, есть чутье и интуиция, собственно именно она меня всегда и выводила, иначе и быть не может. Ну, а знания как раз таки естественно должны присутсвовать, какие механизмы и как работают. А вот из этих вот кирпичиков целое то и собирается, а дальше рулит интуиция. Только простые замки ломаются обыкновенной монтировкой, на хитрые нужен мантирофка с винтом
Большенстов програм сделаны, запакованы и зашифрованы стандартными средствами Поэтому самое важное имхо узнать какие стандартыные алгоритмы использовались(можно рапаковать ер. не вникая в алгоритм) и опредилить исходный язык и его фирму Потом все намного проще. Эти методом я раскуречил 3 windows microsoft С програмы и уже привык к microsoftу.А вот Borland это не для меня там все очень по-другому и я никогда не стану за это браться. Лучше специализироваться на чемто одном. В моих случаях WinMain стандартна и занимает всего 150-300 строк. Бог помощь если програмитсты не поленились создать свои алгоритмы
Касательно "общей стратегии и логики", есть, как минимум, два момента (IMHO, конечно): 1. Реверсить программу "от и до" в 99,9999% случаев не имеет смысла. 2. Временные затраты на реверсинг программы "от и до" (имеется ввиду что-то отличное от "Hello, World!") будут сравнимы или значительно превзойдут временные затраты на изучение программирования с нуля и написания программы аналогичной реверсируемой. Как правило, требуется утянуть/реверснуть какой-то конкретный функционал, что на несколько порядков проще.
Вроде, примерно так: 1. Сначала думаем, что конкретно мы от проги хотим (убрать наг-скрин, выдрать хитрый алгоритм, и т.п.) 2. Потом думаем, как она может это делать. 3. Потом ищем признаки того, что придумали (вызовы апи, строки и т.п.) либо если ничего не придумали ищем место, откуда прога начинает сообщать о проделанной работе. 4. А дальше в зависимости от найденного повторяем шаги 2 и 3 пока че-нить не найдем или спать не захотим. В процессе этого лупа читаем доп.литературу и консультируемся у знающих людей. 5. В итоге составляем примерное представление о работе искомой функциональности, и опять думаем. Что дальше с этим делать.
NeutronMass Дружище,здесь каэшна много интересных стратегий,но всё это субъективно,а объективно, для начала надо открыть статьи на краклабе и начать изучать их.К примеру,есть у тебя thebat и надо поломать,залазишь туды и смотришь как ломается.А потом и сам по тихоньку начнешь.А потом через сотню другую,будешь знать с какой стороны подойти к исследуемому объекту.Пожалуй,эт самый действенный алгоритм реверсирования))).Так сказать,объективное имхо=)
Спасибо, в общем понял. У самого были подобные сомнения, хотелось услышать чужие мнения. И огромное tnx Four-F его туториал по драйверам это супер. Пытаюсь перелопатить кое-что из ваших идей на С. Делаю небольшой синтезатор с использованием вашего драйвера работы с внутренним динамиком. Однако переложить клавиатурный шпион на С пока не получается. Да еще у меня сложилось мнение, что предмет реверса нужно знать очень серьезно и тогда вожзможно составить общюю стратегию. Опять таки в зависимости от поставленных целей, как замечено было выше. Спасибо еще раз.
Поскольку сделать реверс инжиниринг большой программы займет много вре мени, (чисто матаматически потребуется масса времени, которого нет в наличии) то речь идет о том чтобы определить интересующие части программы. И тут мы снова сталкиваемся с необходимостью алгоритма действий. К сожалению я не в состоянии обобщить весь материал, так как для этого нужно взломать много программ с разными защитами и разными целями. Есть такая притча: Как-то Бог спросил Соломона. Привожу примерные слова Бога: Дескать, ты мне нравишься, чувак, чем тебе и твоему народу подсобить? Могу-сказал Бог, подсобить создать новую операционную систему, тебе и твоему народу. Соломон тоже был парень не промах, не даром Бог его любил. Он ответил Богу: -В принципе, не хочу утруждать тебя, старче, у тебя дела есть и поважнее, но дабы не обидеть тебя все же воспользуюсь халявой. И просьба моя будет очень простой. Укажи-говорит Соломон только первый шаг. То есть в каком направлении мне и моему народу так сказать развиватся. Бог улыбнулся и указал путь истинный Соломону. Видимо потребуется толстая книжка,чтобы объяснить все детали, кроме того все постоянно меняется изменяются и методики...
Если цель определена, то нужно искать точки взаимодействия программы с внешней средой. Расставить в нужных точках ловушки и изучить повадку с помощью отладчика. Брать следует теплым и с дизассемблером(декомпилятором).
По-моему не обязательно. Мне хватило знания api, системы скриптов IDA и начального знания ассемблера, чтобы по пути выучить ассемблер, недостающие знания по api и понять методы реверс-инженеринга (даже этого сайта я к тому времени на знал). Главное найти правильную первую программу - не больше 0.5 Mb