Фундаментальные основы хакерства




Идентификация функций - часть 8


.text:0040100D ; 0x401017 и посмотрим

.text:0040100D      ; .text:00401017    push   ebp

.text:0040100D ; .text:00401018   mov    ebp, esp

.text:0040100D ; .text:0040101A   pop    ebp

.text:0040100D ; .text:0040101B   retn

.text:0040100D ;                      ^^^^

.text:0040100D ; Как вы думаете, куда этот ret возвращает управление? Естественно,

.text:0040100D ; по адресу, лежащему на верхушке стека. А что у нас лежит на стеке?

.text:0040100D ; PUSH EBP из строки 401017 обратно выталкивается инструкцией POP

.text:0040100D ; из строки 40101B, так… возвращаемся назад, к месту безусловного

.text:0040100D ; перехода и начинаем медленно прокручивать экран дизассемблера вверх

.text:0040100D ; отслеживая все обращения к стеку. Ага, попалась птичка! Инструкция

.text:0040100D ; PUSH ESI из строки 401000C закидывает на вершину стека содержимое

.text:0040100D ; регистра ESI, а он сам, в свою очередь, строкой выше принимает

.text:0040100D ; "на грудь" значение 0x401012 – это и есть адрес начала функции,

.text:0040100D ; вызываемой командой "JMP" (вернее, не адрес, а смещение, но это не

.text:0040100D ; принципиально важно).

.text:0040100D ;

.text:00401012      pop    edi

.text:00401013      pop    esi

.text:00401014      pop    ebx

.text:00401015      pop    ebp

.text:00401016      retn

Листинг 12

Автоматическая идентификация функций посредством IDA Pro. Дизассемблер IDA Pro способен анализировать операнды инструкций CALL, что позволяет ему автоматически разбивать программу на функции. Причем, IDA вполне успешно справляется с большинством косвенных вызовов! С комплексными вызовами и "ручными" вызовами функций командой JMP

она, правда, совладеть пока не в состоянии, но это не повод для огорчения – ведь подобные конструкции крайне редки и составляют менее процента от "нормальных" вызов функций, тех, которые IDA без труда распознает!

::Пролог. Большинство не оптимизирующих компиляторов помешают в начало функции следующий код, называемый прологом.




Содержание  Назад  Вперед