首页
社区
课程
招聘
在OD中对抗rdtsc
2005-4-21 16:02 8792

在OD中对抗rdtsc

2005-4-21 16:02
8792
在OD中对抗rdtsc

   不少壳代码使用rdtsc来检测运行时间,找出来跳过非
常烦人。rdtsc指令的解释就不?嗦了,liuyilin有篇很详
细的文章。

   如果CR4的TSD(time stamp disabled)置位,则rdtsc在
ring3下运行会导致异常(特权指令),所以进入ring0,把这
个标记置上,然后Hook OD的WaitForDebugEvent,拦截异常
事件,当异常代码为特权指令时,把异常处的opcode读出检
查,如果是rdtsc,把eip加2,SetThreadContext,edx:eax
的返回由你玩了。

   用MSLRH v0.3测试ok。CR4的改动是全局性的,在OD调试
期间所有使用该指令的程序都会异常:-)。

   不过恶搞太多,我的OD在W2K下都不行了,现在只能在XP
下坚持革命了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞7
打赏
分享
最新回复 (7)
雪    币: 894
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 85 2005-4-21 16:07
2
0
我一般是在rdtsc两头拦截
中间的shift+f9碰巧有的能过
雪    币: 598
活跃值: (282)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
Fpc 4 2005-4-21 16:22
3
0
最初由 fly 发布
我一般是在rdtsc两头拦截
中间的shift+f9碰巧有的能过


如果通篇都是rdtsc
雪    币: 894
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 85 2005-4-21 16:29
4
0
除了你估计没其他人这样干了  
雪    币: 70
活跃值: (110)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
采臣·宁 1 2005-4-22 09:56
5
0
以前研究ICEEXT代码的时候,曾试验性的写过这样一个SOFTICE插件。一时大意,WIN系统中毒删了WINDOW系统后,代码没保留。在单CPU上比较好处理,多CPU上写CR4标志位必须HOOK到APIC处理中断上,在DS3。0及DS3。1中断处理的方法不同,DS3。1采用CPTHOOK。SYS回调NTICE。SYS中的函数的方法来实现。其RDTSC异常处理中断为INT 0D,只须检测异常指令是否为RDTSC(0F 35)就行了。处理完后,注意堆栈恢复
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2005-4-22 22:58
6
0
杀花的时候rdtsc作为一个陪葬品一起去见马克思了。
雪    币: 513
活跃值: (2228)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
loveboom 53 2005-4-23 01:03
7
0
曾经写了这么个脚本片断来跟踪mslrh,先打开open trace,然后......
var addr
var eipval

lbl1:
sti
mov eipval,eip
cmp eipval,xxxx   //判断 是否为API调用
je lblapi
  //这里加上你自己想要处理的代码片段
and eipval,ffff0000
cmp eipval,310f
jne lbl1
fill eip,2,90
sti
sti
fill eipval,1,0f
inc eipval
fill eipval,1,31
jmp lbl1
雪    币: 303
活跃值: (461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuyilin 2005-4-23 08:35
8
0
最初由 forgot 发布
杀花的时候rdtsc作为一个陪葬品一起去见马克思了。

有CRC效验怎么办
游客
登录 | 注册 方可回帖
返回