首页
社区
课程
招聘
[讨论]这样的代码如何跟踪?
发表于: 2014-11-19 23:40 3620

[讨论]这样的代码如何跟踪?

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期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
2
你贴的这段代码附近存在花指令造成你当前反汇编错误!所以你看不到对这个函数调用的正确汇编指令,但是下断该函数,是可以堆栈回溯到附近地址的。
2014-11-20 10:50
0
雪    币: 1
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
花指令虽然会造成反汇编错误,但是运行到该条指令时会恢复的,贴出来的这些都是单步恢复了的正确指令。关键地方下断不能回溯到调用地址,哪怕附近都不可能,因为调用前堆战里有用的信息都被清零了,连返回地址都没有,因为是退出程序不用返回。
2014-11-20 11:59
0
游客
登录 | 注册 方可回帖
返回
//