| Сейчас на форуме: 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.   | Сообщение посчитали полезным: Dynamic | 
| 
 | 
Создано: 28 июня 2012 06:09 · Поправил: Dynamic  · Личное сообщение · #3 ZaZa пишет: А какой в этом смысл? Смысл в том, что бы реализовать механизм. Не более. ![]() ZaZa пишет: то есть примерно так: Вы привели пример с абсолютной ссылкой, которую я найду с помощью данных в секции .reloc и поправлю. ZaZa пишет: А что делать с упакованными файлами? Мне нужно реализовать утилиту, которая будет работать с моим образцом. Так что универсальность мне не нужна.  
![]()  | 
| 
 | 
Создано: 28 июня 2012 11:58  · Личное сообщение · #4  | 
| 
 | 
Создано: 28 июня 2012 13:21  · Личное сообщение · #5 Dynamic пишет: Вы привели пример с абсолютной ссылкой, которую я найду с помощью данных в секции .reloc и поправлю. смелые планы, эта секция далеко не всегда будет в наличии   | Сообщение посчитали полезным: Dynamic | 
| 
 | 
Создано: 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   | Сообщение посчитали полезным: Dynamic | 
| 
 | 
Создано: 04 июля 2012 01:16  · Личное сообщение · #12  | 
| 
 | 
Создано: 04 июля 2012 01:56  · Личное сообщение · #13  | 
| eXeL@B —› Вопросы новичков —› Смещение кода функций | 
| Эта тема закрыта. Ответы больше не принимаются. | 













 Для печати