最近在弄一款游戏的保护检测中发现一个奇怪的现象,来向各位大牛请教下。
为什么函数会从中间执行。。。,看代码
00D755D4 /$ 8BFF MOV EDI,EDI
00D755D6 |. 55 PUSH EBP
00D755D7 |. 8BEC MOV EBP,ESP
00D755D9 |. E8 07670000 CALL game.00D7BCE5 ; 枚举进程
00D755DE |. 85C0 TEST EAX,EAX
00D755E0 |. 74 07 JE SHORT game.00D755E9
00D755E2 |. 50 PUSH EAX
00D755E3 |. E8 BF680000 CALL game.00D7BEA7
00D755E8 |. 59 POP ECX
00D755E9 |> FF75 08 PUSH DWORD PTR SS:[EBP+8] ; /ExitCode
00D755EC |. FF15 58E2F900 CALL DWORD PTR DS:[<&KERNEL32.ExitThread>; \ExitThread
00D755F2 CC INT3 //线程退出后紧跟个 中断 不想让找到内存调用啊
00D755F3 |$ 6A 0C PUSH 0C //小弟认为这里是函数头,当断下的时候ALT+K可以看到,但是在这里下断点是断不下来的
00D755F5 |. 68 C06C1201 PUSH game.01126CC0
00D755FA |. E8 91830000 CALL game.00D7D990
00D755FF |. E8 5A670000 CALL game.00D7BD5E
00D75604 |. 8365 FC 00 AND DWORD PTR SS:[EBP-4],0
00D75608 |. FF70 58 PUSH DWORD PTR DS:[EAX+58]
00D7560B |. FF50 54 CALL DWORD PTR DS:[EAX+54] //这里向上是无法断下的
00D7560E 50 PUSH EAX //只有在这里下断点才能断下
00D7560F E8 C0FFFFFF CALL game.00D755D4 ; 这里是程序退出等操作
00D75614 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
00D75617 8B08 MOV ECX,DWORD PTR DS:[EAX]
00D75619 8B09 MOV ECX,DWORD PTR DS:[ECX]
00D7561B 894D E4 MOV DWORD PTR SS:[EBP-1C],ECX
00D7561E 50 PUSH EAX
00D7561F 51 PUSH ECX
00D75620 E8 011E0100 CALL game.00D87426
00D75625 59 POP ECX
00D75626 59 POP ECX
00D75627 \. C3 RETN
程序怎么会在程序中间执行呢,难道是修改了EIP。参考了论坛中 http://bbs.pediy.com/showthread.php?t=122890 的文章,对涉及到的GetThreadContext 等关键函数下断,无果。声明:这是个国外的程序的检测保护的手段。。。
程序怎么会在中间执行且无调用函数,难道是缓冲区溢出?
[培训]科锐逆向工程师培训第53期2025年7月8日开班!