首页
社区
课程
招聘
对堕落天才大牛写的SSDT HOOK一个迷惑之处
发表于: 2009-11-26 19:00 4750

对堕落天才大牛写的SSDT HOOK一个迷惑之处

2009-11-26 19:00
4750
仔细的看了堕落天才写的一篇文章 SSDT Hook的妙用-对抗ring0 inline hook
链 接: http://bbs.pediy.com/showthread.php?t=40832
我对其中几个代码非常困惑!哪位大侠帮忙解答!
就是其中
在HOOK的时候
JmpAddress = (ULONG)NtOpenProcess + 10; //跳转到NtOpenProcess函数头+10的地方,这样在其前面写的JMP都失效了

JmpAddress已经是ntopenprocess的地址偏移10的地址了

但是在 MyNtOpenProcess中,我看到了    jmp     [JmpAddress]     这句
我把它改成jmp     JmpAddress,程序蓝屏了,请问这是什么原因,为什么要jmp     [JmpAddress] 这样写呢

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
那个jmp是内嵌汇编代码。你只要编译完后把sys拖到IDA里,看看这两种写法到底各自被编译成什么样子了,你就明白要采取哪一种写法了。
2009-11-26 19:06
0
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
JmpAddress 的值不是ntopenprocess的地址偏移10的地址么?
为什么还要加[] ,我看程序被编译成jmp dword ptr [xxxxxx]的形式了
2009-11-26 19:09
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
应该一个6字节 一个5字节
区别很大 ^-^
2009-11-26 19:11
0
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
不会吧,都是位于内核中的地址啊.........
2009-11-26 19:15
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
6
额,我试了一下似乎两者编译出来结果没区别……
2009-11-26 19:43
0
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
怎么会没区别呢,想不通,一个是地址,一个是地址中的地址
2009-11-26 20:19
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
8
你按照字面上的理解好像是那个样子的,但是实际上编译出来的(编译器解释后的)不一样就是你想像的那个样子(比如在那个jmp里面JmpAddress,编译器到底把它当成C代码中相应变量所在的地址还是其值)。所以对这种C内嵌汇编的,一定要在编译后再反汇编看一下编译出来的代码到底跟你的原始意图是不是一样。如果用内嵌汇编不纯熟,编好了程序结果不对劲之后,如果只会按照自己理解的字面意思猜来猜去,只能是自己想不通,实际上反汇编调试看一下到底变成了什么才是真正的解决之道。
2009-11-26 21:02
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
应该是要加[]号吧?
如果不是的话,貌似JmpAddress本身的地址都不好取了?
2009-11-26 21:49
0
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
嗯,明白了,谢谢大家的回答!
2009-11-26 23:17
0
游客
登录 | 注册 方可回帖
返回
//