Ollydbg инструкции перед программой - PullRequest
0 голосов
/ 17 июня 2011

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

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

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

Спасибо!

1 Ответ

1 голос
/ 17 июня 2011

В зависимости от того, как вы присоединитесь к программе с помощью 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.

...