首页
社区
课程
招聘
[原创]TurboDex开源项目中Inline Hook简单原理图
发表于: 2016-5-16 17:11 11561

[原创]TurboDex开源项目中Inline Hook简单原理图

2016-5-16 17:11
11561
本菜鸟是新手研究hook,以下是自己研究lody大神的TurboDex中的Inline hook过程中自己的一些理解,和大家分享一下,有不正确的欢迎大神们指正。

Arm架构下有arm指令和thumb指令之分,不同指令集的hook过程不一样。

假设我们要hook libc.so中的execv和read函数,Android系统的库应该都加了-mthumb-interworking编译选项,支持thumb/arm的代码交织,所以要区分目标函数是thumb还是arm指令的。

用ndk编译自己的代码好像默认的是arm(虽然我网上查的说默认是thumb,但我的库编译出来的是arm,回来我再看下ndk文档),下面的图假设我自己的函数库是arm指令的。

另外,下面的图没有考虑相对偏移的情况,只是针对最简单的情况,如果有相对偏移的话需要特殊处理,这个有点麻烦这里我就不介绍了。


图1 目标函数是Arm指令下的Inline hook原理图


图2 目标函数是thumb指令下的Inline hook原理图

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

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
改arm很容易,thumb稍微有点麻烦吧,那个大哥啊,我在找你啊,你弄的apk加壳成功了吗!!!!!!有联系方式吗,有问题请教一下
2016-5-31 09:41
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有啥问题?直接站内就行
2016-5-31 11:09
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
大哥啊那个apk加壳怎么弄啊,你弄成功了吗,网上jack_jia那个各种闪退啊,怎么办还是换别的办法
2016-5-31 14:10
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
jack_jia的方法只是一个大概的思路,针对不同的系统版本还有一些细节的东西,需要根据具体的错误信息去调试的,但大概就是按照那个方法。
具体方法你看一下ActivityThread.java里面有关application启动的流程代码就清楚了。

另外还有加速启动的问题就需要用到hook相关的东西了。
2016-5-31 14:33
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
谢谢那我继续按这个办法看,请问大哥最终的结果是把我们的解密壳的apk和被加密后的apk合在一起还是,只是用我们的apk解密被加密的apk,然后再运行他,解密的apk和原apk不是同一个文件,而不是把被加密的apk随便丢个目录下面
2016-5-31 14:40
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个看你自己的实现了,都可以,你也可以参考市面上的那些加固公司的做法。
2016-5-31 15:00
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
大哥最后问一个问题,请问用jack_jia大神的办法,资源多了闪退怎么办,!!
2016-5-31 15:12
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个不同人实现不一样,需要根据具体错误信息来看了,解壳的过程主要就是替换Context的过程,你最好对Application的生命周期了解清楚。另外就是Service和Provider这种组件也要稍微处理一下。
2016-5-31 15:31
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
谢谢帮助多谢了,还有一个疑问,o(╯□╰)o,那个原来的apk被添加到加壳程序的dex里面了,原来的apk已经包含了资源文件啊,现在又把资源文件添加一份到加壳程序,这样不是等于资源文件重复了一次吗,这样导致加壳之后的apk大小翻倍了,,,,,,,,,,,有办法解决加壳程序里面不放原apk的资源文件吗!!
2016-5-31 16:00
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
只加壳dex文件就可以了,没必要把整个apk包都加壳,解包apk,修改apk的入口Application,替换成你的壳Application,然后把原始的dex加密,资源文件什么的都不需要做处理。
2016-6-1 19:06
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
谢谢帮助
2016-6-2 08:32
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
大哥哎,ndk-build我这边默认编译出来的是thumb指令呢,你在mk要编译的文件后面加上.arm他就会编译成arm的呢
2016-6-9 10:04
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
是的,默认编译成thumb指令。
2016-6-16 11:07
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
请教下TurboDex 的原理是什么?Inline Hook在中间起了什么作用?
2020-8-20 08:37
0
游客
登录 | 注册 方可回帖
返回
//