Инструкции Ollydbg перед программой

Я новичок в реверс-инжиниринге, и я рассматривал простую программу:

char* a = "hello world";
printf(a);

Однако, когда я открываю это в ollydbg, я не попадаю прямо в сборку, как в gdb, сначала есть много других инструкций. Мне было интересно, почему это происходит.

Спасибо!


person user490895    schedule 16.06.2011    source источник
comment
Значит, вы говорите, что вы попали в какой-то ассемблерный код, а не в то, что ожидали?   -  person Will A    schedule 17.06.2011


Ответы (1)


В зависимости от того, как вы подключитесь к программе с помощью olly, вы попадете в одно из двух мест (если не возникло ошибок):

  • Точка входа модуля (также известная как системный клей и оболочка CRT для main/WinMain/DllMain): это происходит, когда вы запускаете программу с помощью olly.
  • NtUserBreakPoint: это когда вы присоединяетесь к существующему процессу.

Чтобы перейти туда, куда вы хотите, вы можете использовать ctrl + e, чтобы открыть окно модулей, оттуда выберите нужный модуль. Затем используйте crtl + n, чтобы вызвать окно символов для вашего текущего модуля (примечание: для того, чтобы неэкспортированные символы были доступны, должен быть доступен pdb или вам нужно выполнить сканирование объектов ваших объектов для этой сборки).

если вас перевели в ModuleEntryPoint, вы также можете просто просмотреть цепочку вызовов (обычно вам нужен второй вызов/jmp), это приведет вас к точке входа crt, оттуда просто найдите вызов с 3/5/4 аргументами, это будет main/WinMain/DllMain:

отсюда:

Blackene.<ModuleEntryPoint> 004029C3                                   E8 FC030000                                             CALL Blackene.__security_init_cookie
004029C8                                                             ^ E9 D7FCFFFF                                             JMP Blackene.__tmainCRTStartup

мы идем сюда:

Blackene.__tmainCRTStartup 004026A4                                    6A 58                                                   PUSH 58
004026A6                                                               68 48474000                                             PUSH Blackene.00404748
004026AB                                                               E8 1C060000                                             CALL Blackene.__SEH_prolog4
004026B0                                                               33DB                                                    XOR EBX,EBX

затем прокрутите вниз здесь:

004027D3                                                               6A 0A                                                   PUSH 0A
004027D5                                                               58                                                      POP EAX
004027D6                                                               50                                                      PUSH EAX
004027D7                                                               56                                                      PUSH ESI
004027D8                                                               6A 00                                                   PUSH 0
004027DA                                                               68 00004000                                             PUSH Blackene.00400000
004027DF                                                               E8 2CF2FFFF                                             CALL Blackene.WinMain

Я предполагаю, что используется ollydbg 1.10.

person Necrolis    schedule 17.06.2011