-
-
[讨论]这样的代码如何跟踪?
-
发表于:
2014-11-19 23:40
3620
-
一个检测线程不断调用isdebuggerpresent,从isdebuggerpresent返回的代码是这样的:
63ce5545 680c5ba9bf push 0BFA95B0Ch
63ce554a 51 push ecx
63ce554b 52 push edx
63ce554c 53 push ebx
63ce554d 50 push eax
63ce554e e8dfcff8ff call ClientBase+0x322532 (63c72532)
这段代码前面是一段乱码,所以肯定不是由前面的代码调用的isdebuggerpresent,而是在别的地方把63ce5545入栈,然后在直接jmp到isdebuggerpresent,这样就无法知道是哪里调用了isdebuggerpresent。继续追踪可以看到:
63c72532 8d642404 lea esp,[esp+4]
63c72536 56 push esi
63c72537 9c pushfd
63c72538 55 push ebp
63c72539 57 push edi
63c7253a e9db2af2ff jmp ClientBase+0x24501a (63b9501a)
这样,如果你断在63b9501a,你是无法通过堆栈回追到63c7253a这个调用处的。
这段代码最终导致程序退出,但是你无法通过程序退出回追到isdebuggerpresent。isdebuggerpresent容易想到,下断就行了,但是这个线程还有其他未知的检测,这种代码有可能从程序的退出回追到真正的判断处吗?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)