首页
社区
课程
招聘
[原创]SO Hook技术汇总
发表于: 2015-1-3 22:14 90090

[原创]SO Hook技术汇总

2015-1-3 22:14
90090
收藏
免费 3
支持
分享
最新回复 (106)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
感谢楼主的汇总。hook简直是android开发必备的技术,至少得了解原理,无奈国内资料太少。
2015-1-12 16:14
0
雪    币: 13
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
52
收藏一份,感谢
2015-1-12 18:27
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
谢谢分享, 你们的编译环境是弄的, 我在ubuntu14 的ndk环境下. 编译通不过?
2015-1-15 17:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
学习一下!
2015-1-16 10:58
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
mark一下……
2015-1-16 12:11
0
雪    币: 20
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
用楼主的 inline hook , 发现 hook 此函数运行不正常,以下是函数开头几行汇编
.text:000317E0                 PUSH.W          {R4-R11,LR}
.text:000317E4                 VPUSH           {D8-D9}
.text:000317E8                 VMOV            S16, R2
.text:000317EC                 SUB             SP, SP, #0x4C
.text:000317EE                 LDR             R5, =(_GLOBAL_OFFSET_TABLE_ - 0x317FA)
.text:000317F0                 MOV             R4, R0
2015-2-25 10:35
0
雪    币: 370
活跃值: (1190)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
59
多谢反馈!由于涉及指令众多,之前实现时只对个人认为比较常见的指令进行了处理,并未将T模式特殊的vpush vmov等指令处理,陆续加上。 就其出错原因是:这段Thumb汇编第三条指令为vmov指令占4个字节,替换时只替换了前2字节,将指令识别成了2条,故出错
2015-2-25 11:11
0
雪    币: 20
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
多谢楼主指点!
2015-2-25 12:02
0
雪    币: 144
活跃值: (718)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
mark
2015-2-25 12:07
0
雪    币: 20
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
楼主,有几个地方不明白,望解答!
指令替换怎么做的?
是用 shell code还是直接用二进制编码, 如果是二进制编码,怎么把汇编翻译成 二进制码?
如果是用 shell code 那么是编译成 arm 模式呢还是 thumb 模式? 据我理解, 如果被hook的函数是 thumb ,用来替换的指令应该也是thumb,但是跳到的地址应该是 arm,这个该怎么做呢?

另外 是什么指令是不是判断 指令的第 25~28位? 来决定是否是相对PC的指令?这个参考 arm 32bit 手册吗?
2015-2-25 14:49
0
雪    币: 370
活跃值: (1190)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
63
指令替换使用指令二进制实现。
指令分为A 和 T/2模式,分情况处理。 模式切换有相应指令,参看手册即可
2015-2-25 17:40
0
雪    币: 20
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
楼主又有问题了,我在自身lib中进行如下调用,发现hook不成功,是哪里用错了吗?

HookStruct HookPara;
                strncpy(HookPara.SOName, "libndktest.so", strlen("libndktest.so"));
                strncpy(HookPara.FunctionName, "strlen", strlen("strlen"));
                HookPara.NewFunc = (void *)my_strlen;
                PTK_HookImportFunction HookImportFunction = (PTK_HookImportFunction) dlsym(handle, "TK_HookImportFunction");
                int ret = HookImportFunction(&HookPara);
2015-2-27 14:31
0
雪    币: 370
活跃值: (1190)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
65
额,我试了,没什么问题。 你再试试,还是没解决的话,你直接私信我吧。
2015-2-27 22:25
0
雪    币: 20
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
问题解决了,另外期待楼主支持V指令的版本.
2015-3-13 20:38
0
雪    币: 28
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
67
感谢好文!
请教楼主个问题:
我做inline hook的时候,有时候需要插入自定义代码。PE的情况下,通过新加区段可以轻松把自己的代码插入。但是ELF我用类似的方法做,却无法成功。很多ELF的.text段并无空间。学习了ELF个时候可以知道,仅增加section似乎是不够的,因为无法被loader加载到内存。但是尝试增加segment,连so都无法正常加载了。请教楼主,怎么增加代码段以便插入代码呢?
2015-3-14 21:43
0
雪    币: 228
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
68
导出表hook不太清楚,比如有一个第三方的SO中的导出函数A,那么要注入哪个进程空间并对其st_value进行修改?才能达到hook住所有对函数A的调用?
2015-3-18 19:22
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
69
学习啦 !
2015-3-21 10:20
0
雪    币: 2841
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
顶顶顶顶
2015-3-21 21:51
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
学习学习。。。。。感谢分享!
2015-3-27 17:32
0
雪    币: 20
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
楼主帮我看下,用你的动态库 inline hook 这个函数执行不正常,貌似指令没有跳回来,是不是有相对寻址?另外能看出这是arm还是thumb指令不?

.text:002025AC                 STMFD           SP!, {R11,LR}
.text:002025B0                 ADD             R11, SP, #4
.text:002025B4                 SUB             SP, SP, #0x18
.text:002025B8                 STR             R0, [R11,#var_10]
.text:002025BC                 STR             R1, [R11,#var_14]
.text:002025C0                 STR             R2, [R11,#var_18]
2015-3-29 22:27
0
雪    币: 370
活跃值: (1190)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
73
ARM指令,只需替换前三条指令。 HOOK应该没什么问题,你动态调试下SO看看是哪里的问题。
还存在问题的话,你直接私信我吧。
2015-3-30 12:43
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
74
谢谢分享。
2015-3-30 13:01
0
雪    币: 2841
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
75
默默的赞下
2015-3-30 13:02
0
游客
登录 | 注册 方可回帖
返回