首页
社区
课程
招聘
[原创]StormHook:Android侵入式Hook框架
发表于: 2017-8-30 16:45 14041

[原创]StormHook:Android侵入式Hook框架

2017-8-30 16:45
14041

https://github.com/woxihuannisja/StormHook

Step1:
编译InjectSo模块 生成libhook.so

Step2:HookCore模块是Android Studio工程,将生成的Apk中的classes.dex提取出来重命名为hook.dex

Step3:
HookCore/Native是jni工程 编译生成libdalvikhook_native.solibarthook_native.so

Step4:
关闭selinux

Step5:
注入libhook.so到StormHookSample App中

hook成功显示的log

测试button事件的log输出

通过注入InjectSo模块中的libhook.so到目标进程,就进入了目标的native世界

使用LoadDex函数加载外部Dex,并执行指定的入口类,对Java函数进行hook操作,这样就进入到目标进程的Java世界

在JNI开发当中,JavaVM参数可以通过JNI_OnLoad参数获取,但是对于我们注入的so ,我们无法通过这种方式获取JavaVm,但是Android提供了另外一种方法可以获取到全局的JavaVm

使用反射的方法调用"dalvik/system/DexFile"类中的loadDex来动态加载Dex,获取一个dex对象

这里我提供了2种方法:

方法一:使用PathClassLoader.loadClass(className);
主Dex对应的是pathClassLoader
由于我们将外部Dex和当前Dex进行MultiDex操作,那么这2个Dex的类都可以通过pathClassLoader来找到外部dex目标类

方法二:dexFile.loadClass(className);
通过LoadDex加载外部Dex之后,会得到一个dex对象dexObj,也可以使用dexObj.loadClass来找到外部dex目标类

采用的方法类似AndFix,将origin method对应的DalvikMethod结构替换为replace method的DalvikMethod结构

采用的是mar-v-hook的Art Hook方案

 
 
adb push libhook.so /data/local/tmp/
adb push hook.dex /data/local/tmp/
adb push libdalvikhook_native.so /data/local/tmp/
adb push libarthook_native.so /data/local/tmp/
root@hammerhead:/ # setenforce 0
root@hammerhead:/ # getenforce
Permissive

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

收藏
免费 1
支持
分享
打赏 + 201.00雪花
打赏次数 2 雪花 + 201.00
 
赞赏  chinahanwu   +200.00 2017/12/29
赞赏  cvcvxk   +1.00 2017/09/22
最新回复 (26)
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
对于Android  N,  自己从文件读取就好,  https://github.com/avs333/Nougat_dlfunctions
2017-8-30 17:44
0
雪    币: 38
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习了

顺便打个广告,art模式做Java方法hook可以用YAHFA,其具有以下优点:
1.  hook方法与原方法无需保持一致签名
2.  原方法是反射调用的,也可以被hook住
3.  支持Android  N
2017-8-30 17:53
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
nabla 学习了 顺便打个广告[em_19],art模式做Java方法hook可以用YAHFA,其具有以下优点: 1. hook方法与原方法无需保持一致签名 2. 原方法是反射调用的,也可以被hook ...
不过YAHFA的方案似乎和mar-v-in的ArtHook是一致的?
2017-8-30 18:03
0
雪    币: 38
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
rrrfff [em_27]不过YAHFA的方案似乎和mar-v-in的ArtHook是一致的?
噢噢,这个还真不清楚,ArtHook还一直没来得及去看。。
2017-8-31 08:57
0
雪    币: 571
活跃值: (4400)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
顶,谢谢楼主的分享
2017-8-31 17:07
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
YAHFA不错,  要是加入

<span>Dalvik  hook就好了</span>
2017-9-3 13:29
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
nabla 噢噢,这个还真不清楚,ArtHook还一直没来得及去看。。
2017-9-3 13:32
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
代码呢,大虾,再发一次呗。
2017-9-12 17:09
0
雪    币: 172
活跃值: (1628)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
liuganchao 代码呢,大虾,再发一次呗。
https://github.com/woxihuannisja/StormHook
在github上把使用方法更新了一下
2017-9-15 17:02
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
寒号鸟二代 https://github.com/woxihuannisja/StormHook 在github上把使用方法更新了一下
3Q
2017-9-18 10:22
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
call  loadDex  method  failed    仁兄  这是什么原因?android  5.1
2017-9-22 16:48
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
13
送上1块..
收藏了
2017-9-22 16:55
0
雪    币: 172
活跃值: (1628)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
cvcvxk 送上1块.. 收藏了
谢谢老V
2017-9-22 17:23
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
寒号鸟二代 谢谢老V[em_13]
怎么会加载失败?  android  5.1.1
2017-9-22 17:26
0
雪    币: 172
活跃值: (1628)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
16
liuganchao 怎么会加载失败? android 5.1.1
看下路径或者权限的问题
2017-9-22 17:28
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
寒号鸟二代 看下路径或者权限的问题
没有问题呀,我把你清理异常的代码去掉,抛出这个:  JNI  FindClass  called  with  pending  exception  'java.lang.StackOverflowError'  thrown  in  long  android.os.SystemClock.uptimeMillis():-2
2017-9-22 18:04
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
能给个联系方式吗。
2017-9-23 03:31
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
能给个联系方式吗。
2017-9-25 15:35
0
雪    币: 172
活跃值: (1628)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
20
qq:1483943306
2017-9-25 16:14
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
Can't  find  original  method  (getMacAddress_hook)java.lang.NoSuchMethodException
2017-9-25 16:31
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
完美测试通过,谢谢二鸟哥。
2017-9-26 17:44
0
雪    币: 3549
活跃值: (941)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
23
谢谢楼主
2017-10-8 17:00
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
多谢,试下
2017-10-17 22:35
0
雪    币: 102
活跃值: (2185)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
mark
2017-12-16 15:35
0
游客
登录 | 注册 方可回帖
返回
//