В общем, месяц-полтора назад было время и я начал писать эмулятор/отладчик/дизассемблер/декомпилятор PE файлов под Win32. Потом отвлекся на пару-другую недель на другие проекты. Причем когда я писать начал, я что-то не смог найти упоминания о подобных программах, а тут к Вам сюда захожу, оказывается пара похожих прог уже есть. Хм, есть у кого идеи в плане перспективности моего двухнедельного творения?: * сама загружает EXE-PE файл в память. * поддерживает свою собственную виртуальную память в которой и находиться созданный target-процесс. * сама начинает интерпретировать asm-инструкции, попутно дизассемблируя код (десятки видов команд понимает, полностью адресацию). * сама вызывает WinAPI-функции так, что в любой момент можно просмотреть/подменить любые данные. * позволяет трейсить код полностью пошагово. * позволяет в конце работы генерировать Сишный исходник (ну пока эта часть не особо работает, только генерирует функции, переходы между ними, условия, без содержимого). Другими словами этот инструмент дает полный контроль над заданной программой, в любой момент можно подменять любые данные. Начал ее писать тренируясь на одной большой проге, но потом перешел к HelloWorld на VC++6.0, она ее полностью интерпретировать может))но поддерживает гораздо больше WinAPI и инструкций процессора. Как кто думает это достойная тема? Или уже такое есть и ненадо?
Идея переспективная. Только вот есть масса проблем, о которых многие говорят и пишут. Большинство из них в общем случае неразрешимы. (По крайней мере за две недели )) )
mrhx Я пишу подобную программу (назвал ее IDD - Interactive Delphi Decompiler). Программа предназначена для подробного анализа исполняемых файлов, написанных на Дельфи (версии 3 - 7). Сейчас практически закончена часть, которая сканирует файл с целью извлечения максимального количества полезной информации. Следующая часть будет уже связана с декомпиляцией. Соб-но, алгоритмы анализа кода я в основном разработал, но они еще не протестированы в достаточно полном объеме. К сожалению, тянуть одному такой проект (в свободное от работы время) тяжело. Поэтому в ближайшее время я все-таки наверное представлю для обозрения нулевую версию с существенными ограничениями. Может кто-то захочется присоединиться или помочь советами, в общем там видно будет. (Программа написана на Билдере версии 5). Занимаюсь реверсингом приличное время, не две недели , решил, что пора свое ноу-хау оформить в виде IDD.
crypto Есть похожие наработки. Если что, поучаствую. У тебя есть описание форматов типов данных в образе программы? Конкретно - структур, массивов, множеств. Основная часть есть в typinfo.pas, но не вся...
Ну блин, так и я не две недели Это я эту прогу преимущественно за две-три недели написал. Две недели чисто ее писал, а третью в свободное от работы время опять же. Насчет идеи прогу ASProtect-ом обработать, что-то у меня дома был версии 1.2, но он ни фига не работает -- виснит под XP. Щас другой скачаю...
Я выложил ознакомительную версию своей проги. Качать с моего сайта: http://mrhx.narod.ru/ Программа называется mew 0.1a Насчет ASProtect: обрабатывал версией 1.35 (вроде последняя с их сайта). Но к сожалению из-за недоработок в моей тулзе, она не смогла загрузить запакованный helloworld (там ASProtect создал какие-то секции нулевой длинны, а у меня проверок нету на это
Да, к сожалению кто-то уже занял это замечательное название из 3х букв ...а ведь я его так долго придумывал
Кстати может кто знает, я вчера всетакие запустил свою тулзу на упакованном helloworld, она выполнила несколько инструкций, а потом ASProtect начал там обращаться к памяти 0x4???????, пытался оттуда прочитать кажеться. Я еще не разбирался, но пока что моя прога незнает о таких адресах памяти. Никто не знает что там быть должно ? На это сообщение не обращайте внимания - у меня бага была в коде Моя прога уже проходит этап распаковки ASProtect (или частичной распаковки). Правда потом все равно возникает ошибка Но скоро и ее поправлю...
rmn У меня создана, скажем так, база знаний по Дельфи. И есть идеи, как ее еще расширить (в случае необходимости).
Вот я продвинулся немного и возник вопрос существенный про загрузку Win PE программ, ответа на который у меня нет: Что Win помещает в стек сразу перед запуском файла? Дело в том, что ASProtect обращается к предыдущему двойному слову в стеке по сравнению с тем, что было когда программа запустилась. Оттуда у меня береться адрес 7C816D4F.. хм.. довольно большой адрес, непонятно что это? Далее and eax(7C816D4F), FFFF0000 получаем 7C810000. Затем начиная с этого адреса ищеться слово 5A4D - что это?? 8) Причем шаг поиска 10000h Вообще первый раз слышу чтобы чтолибо помещалось в стек до программы, думал только для DLL такое есть. Есть предположение что это уже вообще не стек, а следующая область памяти, но это странно, нельзя же на это завязываться, что она будет именно за стеком... Ктонибудь может помочь? ...5A4Dh это 'MZ' - там что заголовок программы храниться?? 8))
Писал загрузчик и не знаешь таких констант :\ Выравнивание. Секцию можно размешать только по выравненным адресам.
rmn Спасибо, теперь понятно. Заработала эта часть. ASProtect нашел начало модуля kernel32, потом долго что-то делал с этими адресами, видимо искал некую функцию, потом нашел и попытался перейти на адрес в этом модуле. Дальше пока у меня поддержки таких вещей нет. n0name Я не сразу сообразил -- секунд через 20 после того как сообщение отправил ) Насчет выравнивания, да, оказалось Windows закружает по кратным 0x10000 адресам.
Ну это не windows загружает, а просто если ты NtMapViewOfSection вызовешь с BaseAddress не кратным 10000h он будет ругатся =)
ASProtect почти сдался мне ) Три дня искал ошибку из-за которой обращение к несуществующей памяти происходило. Оказалось инструкцию LOOP слегка неверно выполняю (мда уж )) ASProtect после конкретных тормазов, видимо связанных с какойто распаковкой/расшифровкой своих данных, начал импортировать себе через GetProcAddress кучу API, в том числе даже из wsock32 (вот нафига??). На этом пока все остановилось.