Посл.ответ |
Сообщение |
Ранг: 60.6 (постоянный), 20thx Активность: 0.07↘0 Статус: Участник
|
Создано: 12 августа 2009 09:00 · Поправил: s0l · Личное сообщение · #1
Здравствуйте, подскажите пожалуйста, есть ли способ найти в PE файле все вызову функций импорта (что-то типа Search for all intermodular calls в OllyDbg), т.е. найти примерно такое:
Сразу бы хотелось оговориться, что бинарный поиск FF25 и FF15 не подходит, надеюсь сами понимаете почему
| Сообщение посчитали полезным: |
|
 Ранг: 533.6 (!), 232thx Активность: 0.45↘0 Статус: Uploader retired
|
Создано: 12 августа 2009 09:35 · Поправил: BoRoV · Личное сообщение · #2
учи структуру пе-файла, можно это прочесть с легкостью с таблицы импорта можешь пока прочесть этов гугле есть еще, я находил даже на русском еще
----- Лучше быть одиноким, но свободным © $me | Сообщение посчитали полезным: |
Ранг: 60.6 (постоянный), 20thx Активность: 0.07↘0 Статус: Участник
|
Создано: 12 августа 2009 09:43 · Личное сообщение · #3
BoRoV пишет: прочесть с легкостью с таблицы импорта Если это на столько легко, приведи пожалуйста пример. Я так понял, что с таблицы импорта ты не получишь адрес прыжка на функцию из иат
| Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 12 августа 2009 09:44 · Личное сообщение · #4
BoRoV пишет: учи структуру пе-файла, можно это прочесть с легкостью с таблицы импорта Я вот так понял, что ему именно вызовы из кода нужны. Олька, скорее всего, делает это путем парсинга кода на предмет конструкций jmp dword ptr ds:[адрес из импорта] и call то-же не ст0ит забывать.
----- invoke OpenFire | Сообщение посчитали полезным: |
Ранг: 60.6 (постоянный), 20thx Активность: 0.07↘0 Статус: Участник
|
Создано: 12 августа 2009 09:46 · Личное сообщение · #5
Ice-T+1 ты все правильно понял. Так это возможно как-нибудь реализовать?
| Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 12 августа 2009 09:47 · Личное сообщение · #6
s0l пишет: Сразу бы хотелось оговориться, что бинарный поиск FF25 и FF15 не подходит, надеюсь сами понимаете почему Я не понимаю - почему?
----- invoke OpenFire | Сообщение посчитали полезным: |
 Ранг: 533.6 (!), 232thx Активность: 0.45↘0 Статус: Uploader retired
|
Создано: 12 августа 2009 09:51 · Поправил: BoRoV · Личное сообщение · #7
пиши скрипт, а внем пиши, кажется так:
----- Лучше быть одиноким, но свободным © $me | Сообщение посчитали полезным: |
Ранг: 60.6 (постоянный), 20thx Активность: 0.07↘0 Статус: Участник
|
Создано: 12 августа 2009 09:52 · Личное сообщение · #8
Потому, что в коде может встретиться такая же структура, но никаким образом не относящаяся к импорту. А я планирую провести кое-какие операции с найденными адресами, вот собственно в этом и причина.
| Сообщение посчитали полезным: |
Ранг: 60.6 (постоянный), 20thx Активность: 0.07↘0 Статус: Участник
|
Создано: 12 августа 2009 09:54 · Личное сообщение · #9
BoRoVНе нужно столь высокомерно относиться к человеку с низким рангом. Ты так хочешь показать мне то, что прочитал статью про ПЕ-файлы и знаешь базовые команды олли-скрипта? Спасибо, я это понял. Просьба в дальнейшем говорить по существу
| Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 12 августа 2009 09:56 · Личное сообщение · #10
s0l пишет: Потому, что в коде может встретиться такая же структура, но никаким образом не относящаяся к импорту. дык чекай адрес назначения
----- invoke OpenFire | Сообщение посчитали полезным: |
Ранг: 114.8 (ветеран), 41thx Активность: 0.1↘0 Статус: Участник
|
Создано: 12 августа 2009 10:03 · Личное сообщение · #11
Не стоит забывать про конструкции типа . . . mov esi, [LoadIconW] . . . . . . // инструкции, не затрагивающие esi . . . call esi . . . . . . // инструкции, не затрагивающие esi . . . call esi . . . активно генерируемые vc++
| Сообщение посчитали полезным: |
Ранг: 60.6 (постоянный), 20thx Активность: 0.07↘0 Статус: Участник
|
Создано: 12 августа 2009 10:05 · Поправил: s0l · Личное сообщение · #12
Ice-TЧто-то мне даже не приходил в голову такой вариант, спасибо за подсказку. Буду пробовать... p.s.: если есть другой выход, пожалуйста сообщите =) _ruzmaz_Для начала бы реализовать самое простенькое, а потом можно и дальше идти =)
| Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 12 августа 2009 10:09 · Поправил: Ice-T · Личное сообщение · #13
Дизасмит и анализировать. Иначе - хз как. upd: Хотя есть еще вариант взять процесс под отладку.
----- invoke OpenFire | Сообщение посчитали полезным: |
Ранг: 20.8 (новичок), 7thx Активность: 0.01↗0.02 Статус: Участник
|
Создано: 12 августа 2009 10:58 · Личное сообщение · #14
все популярные линкеры создают непрерывный массив адресов импорта, сосредоточенный в одной секции. Главное найти начало и ее конец, а это очень просто
| Сообщение посчитали полезным: |
Ранг: 60.6 (постоянный), 20thx Активность: 0.07↘0 Статус: Участник
|
Создано: 12 августа 2009 11:19 · Личное сообщение · #15
Ice-T пишет: взять процесс под отладку В моем случае это не приемлимо. int_256мне не нужны адреса импорта
| Сообщение посчитали полезным: |
Ранг: 114.8 (ветеран), 41thx Активность: 0.1↘0 Статус: Участник
|
Создано: 12 августа 2009 11:22 · Личное сообщение · #16
Можно использовать то что ольга отдизассемблит и проанализирует - например в файл сохранить и там искать нужные вызовы (или плагин написать)
| Сообщение посчитали полезным: |
 Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25 Статус: Модератор retired
|
Создано: 12 августа 2009 12:46 · Личное сообщение · #17
В ольке импорт не при чём. Она ищет любые переходы из образа ехе. Границы образа она знает, переходы ищет по дизасму. Косячит, если неправильно определила код и данные. Если нужен только импорт-нужно фильтровать либо по таблице импорта, что криво, либо сравнивать с адресами всех импортов в процессе, что в статике не сделаешь.
| Сообщение посчитали полезным: |
 Ранг: 568.2 (!), 465thx Активность: 0.55↗0.57 Статус: Участник оптимист
|
Создано: 12 августа 2009 13:33 · Поправил: ClockMan · Личное сообщение · #18
Ну так в ольке есть же функция Find references, в окне дампа ставишь Long>аdress ищешь табличку,она будет иметь такой вид 00413084 >7C801E1A kernel32.TerminateProcess 00413088 >7C801EF2 kernel32.GetStartupInfoA 0041308C >7C809832 kernel32.InterlockedCompareExchange 00413090 >7C802446 kernel32.Sleep 00413094 >7C80981E kernel32.InterlockedExchange 00413098 >7C80AC6E kernel32.FreeLibrary 0041309C >7C80AEDB kernel32.LoadLibraryW 004130A0 >7C80B465 kernel32.GetModuleFileNameW 004130A4 >7C90FE01 ntdll.RtlGetLastWin32Error 004130A8 >7C8449FD kernel32.SetUnhandledExceptionFilter
км> Find referencesи оля ищет адреса вызова этой апи
----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 12 августа 2009 13:45 · Личное сообщение · #19
ClockMan, на сколько я понимаю - ему нужна своя программная реализация подобного.
----- invoke OpenFire | Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 12 августа 2009 14:51 · Личное сообщение · #20
Я вот так и не понял, чего требуется: 1) На известную в файле АПИ-шку найти перечень мест где она дергается ? или: 2) Выдать перечень всех мест, где дергается какая-либо АПИ-шка ?
----- My love is very cool girl. | Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 12 августа 2009 15:02 · Личное сообщение · #21
Если второе, то : 1. Составить массив Описателей (НАЧАЛО, КОНЕЦ) всех ИАТов 2. Начиная с начального адреса поиска ищешь очередную FF25, FF15 + mov esi,offs / call esi и потом адресок смотришь в описателях, если попало, значит - АПИ-шко
----- My love is very cool girl. | Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 12 августа 2009 15:05 · Личное сообщение · #22
Ну на самом деле алгоритм не много посложнее будет.. Но предоставим это автору)
----- invoke OpenFire | Сообщение посчитали полезным: |
 Ранг: 605.2 (!), 341thx Активность: 0.47↘0.25 Статус: Модератор Research & Development
|
Создано: 12 августа 2009 15:31 · Личное сообщение · #23
* парсишь таблицу импорта файла и составляешь список адресов всех используемых в проге апи ф-ций, а также составляешь диапазон адресов библиотек (это важно, т.к. адрес в коде может указывать на FuncAddr+x) * определяешь секции с кодом * берёшь двиг дизасма типа hde и идёшь по коду, обращая внимание на инструкции типа mov reg32,addr, после чего ищешь call/push/jmp reg32 push addr jmp [addr] call [addr] cверяешь addr со списком адресов ф-ций далее понятно, я думаю
----- EnJoy! | Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 12 августа 2009 16:04 · Личное сообщение · #24
>>(это важно, т.к. адрес в коде может указывать на FuncAddr+x) важный нюанс! +1
----- My love is very cool girl. | Сообщение посчитали полезным: |