Сейчас на форуме: asfa, bartolomeo (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Смещение кода функций |
Посл.ответ | Сообщение |
|
Создано: 28 июня 2012 03:54 · Поправил: Dynamic · Личное сообщение · #1 Доброго времени суток! Есть приложение без исходников. Между кодом функций видим: Code:
Хотелось бы написать утилиту, в учебных целях, которая уберет/сократит промежутки между функциями. Исходя из этого, мне необходимо будет пофиксить абсолютные и относительные ссылки. С фиксом абсолютных проблем не должно возникнуть. Собираюсь использовать данные, которые лежат в .reloc секции. А как же мне быть с фиксом относительных ссылок? Каким образом мне находить места, которые возможно нуждаются в правке? ![]() |
|
Создано: 28 июня 2012 05:47 · Поправил: ZaZa · Личное сообщение · #2 А какой в этом смысл? Уменьшить размер? ![]() А что делать с теми функциями (процедурами), которые вызываются динамически, то есть примерно так: Code:
А если значение, по которому будем вызывать высчитывается? А что делать с упакованными файлами? Я считаю: проблем много, выгоды никакой... ![]() Update: Придется писать анализатор. Ведь если ты уберешь лишние байты в начале файла, то тебе придется менять все ссылки, которые находятся ниже по коду... ----- One death is a tragedy, one million is a statistic. ![]() |
|
Создано: 28 июня 2012 06:09 · Поправил: Dynamic · Личное сообщение · #3 ZaZa пишет: А какой в этом смысл? Смысл в том, что бы реализовать механизм. Не более. ![]() ZaZa пишет: то есть примерно так: Вы привели пример с абсолютной ссылкой, которую я найду с помощью данных в секции .reloc и поправлю. ZaZa пишет: А что делать с упакованными файлами? Мне нужно реализовать утилиту, которая будет работать с моим образцом. Так что универсальность мне не нужна. ![]() ![]() |
|
Создано: 28 июня 2012 11:58 · Личное сообщение · #4 |
|
Создано: 28 июня 2012 13:21 · Личное сообщение · #5 Dynamic пишет: Вы привели пример с абсолютной ссылкой, которую я найду с помощью данных в секции .reloc и поправлю. смелые планы, эта секция далеко не всегда будет в наличии ![]() |
|
Создано: 28 июня 2012 13:51 · Поправил: Dynamic · Личное сообщение · #6 ZaZa пишет: Update: Придется писать анализатор. Ведь если ты уберешь лишние байты в начале файла, то тебе придется менять все ссылки, которые находятся ниже по коду... Верно. Так и планировал. Сейчас проблема в поиске мест с относительными ссылками. 2nd пишет: смелые планы, эта секция далеко не всегда будет в наличии А мне универсальности и не надо. Главное что в моем EXE она есть. ![]() Возможно есть способы собрать адреса мест в секции кода, которые содержат относительные ссылки? Возможно с помощью плагинов/скриптов к OllyDbg? ------------------------------------------ Добавлено: Если вариантов нету, то буду писать парсер листинга OllyDbg ![]() Какие команды кроме CALL и всех видов прыжков мне надо учесть? ![]() |
|
Создано: 29 июня 2012 23:11 · Личное сообщение · #7 |
|
Создано: 29 июня 2012 23:31 · Поправил: Dynamic · Личное сообщение · #8 |
|
Создано: 30 июня 2012 00:46 · Поправил: 2nd · Личное сообщение · #9 Dynamic пишет: Ну дык в основе просчетов будет лежать адрес, который зависит от ImageBase. Опять поможет .reloc от ImageBase он зависит, но reloc тут может и не помочь, грубо говоря Code:
чем поможет reloc ? тут хоть значение eax очевидно и легко можно определить статически, а оно может расчитываться гораздо более иначе. ![]() |
|
Создано: 30 июня 2012 02:08 · Поправил: Dynamic · Личное сообщение · #10 В примере от ZaZa .reloc поможет 100 %, ибо адрес абсолютный. Я понимаю, что можно придумать ситуации, при которых решить задачу будет весьма сложно. Мое приложение скомпилировано с помощью VS2008 и таких сложностей в нем нету. Можете привести пример кода, при компилировании которого будут строится jmp, которые "прыгают" по функциям и при расчете учитывают промежутки между ними? ![]() |
|
Создано: 30 июня 2012 04:39 · Личное сообщение · #11 Archer пишет: В частном-пиши полный анализатор типа иды и всячески помогай ему при помощи map, pdb, интерактивно и тд. Анализатор написать несложно, всего лишь нужно потратить время, кучу нейромедиаторов (серого вещества, проще говоря), побороть лень и преодолеть не один психологический барьер. Dynamic Схема примерно такая: Дизасм раскладывает загруженный код на функции, функции на блоки, блоки на структуры с инструкциями. Каждый блок представляет собой вершину графа с исходящими к другим вершинам ветвями и входящими - ветвления, граф - функция, весь код - система графов. Раскладывая код, обнаруживаются места, требующие анализа, который можно проводить ходом назад по полученным структурам с инструкциями и по блокам с выявлением регистров и переменных, которые учавствуют в вычислении адреса прыжка... Ветвление абсолютной и относительной адресации переправить легче, чем косвенную. Если код не содержит косвенной адресации, то задача вполне быстро решаема. ----- IZ.RU ![]() |
|
Создано: 04 июля 2012 01:16 · Личное сообщение · #12 |
|
Создано: 04 июля 2012 01:56 · Личное сообщение · #13 |
![]() |
eXeL@B —› Вопросы новичков —› Смещение кода функций |
Эта тема закрыта. Ответы больше не принимаются. |