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