Ollydbg инструкции перед программой
Я новичок в реверс-инжиниринге, и я смотрю на простую программу:
char* a = "hello world";
printf(a);
Однако, когда я открываю это в ollydbg, я не получаю права на сборку, как это было бы в gdb, вначале есть еще много инструкций. Мне было интересно, почему это происходит.
Спасибо!
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.