首页
社区
课程
招聘
[原创]Android Hook 系列教程(二) 自己写APK实现Hook Java层函数
发表于: 2018-9-28 15:30 17453

[原创]Android Hook 系列教程(二) 自己写APK实现Hook Java层函数

2018-9-28 15:30
17453

一. Android Hook 系列教程(一) Xposed Hook 原理分析
二. Android Hook 系列教程(二) 自己写APK实现Hook Java层函数
三. Android Hook 系列教程(三) Cydia Hook Native 原理分析
四. Android Hook 系列教程(四) 自己写APK实现Hook Native层函数
五. Android Hook 系列教程(五) 更多Hook方法
六. Andoird Hook 系列教程(六) Hook的总结

根据上一节课的内容现在我们写一个简单的DEMO,既然是DEMO,我认为代码要尽量的少,能尽量的说明问题,不需要太多的兼容性和扩展性,所以并不打算实现多么复杂的框架.

话不多说,建议先下载附件查看代码(附件在后面).

我使用的是最新版的Android Studio

因为目前该例子只支持32位,所以需要更改app/build.gradle只生成32位的so文件,不然编译会出错(指针转换).

编写HookModule.java

该类非常简单,就是获取方法的DeclaringClass和slot字段,然后传入Native层进行Hook.
主要方法:HookJavaMethod

我们写add函数用于测试Hook
并在onCreate时进行hook

前置说明

由于dvm函数在Android Studio里面不能直接调用,也没有相应的头文件.

所以我通过如下方法使用:

导入Dalivk虚拟机源代码的头文件,这些我已经做好,并打包在项目中(过程中遇到一些无法识别的符号,我直接注销掉,对使用没有任何影响).

dvm函数实在系统的/system/lib/libdvm.so文件中我们通过dlsym动态获取其函数地址

动态获取函数地址时,使用的是导出名称,而不是原来的名称.
我们把libdvm.so从/system/lib/libdvm.so拖到电脑.

adb pull /system/lib/libdvm.so

用IDA查看:EXPOST 后面才是真正的函数名称

我们在Init函数中动态获取所有需要的dvm函数

在JNI_Onload动态注册hookMethodNative函数

前面的一些都是在做铺垫,接下来我们看最主要的函数:hookMethodNative

非常的简单,就是

然后我们看一下hookedMethodCallback

由于我们做的是demo,我并不想让问题变得复杂,所以要实现什么功能,就请尽情的发挥你的想象力吧.

我使用的手机是nexus 5.Android 4.4.4 系统.

也可以使用模拟器测试.

接下来我们看一下运行结果.

我点击一下add按钮.

这个例子是不需要root的.
附件在后面.

 
 
 
 
 

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

最后于 2018-10-29 21:28 被chpeagle编辑 ,原因: 图片放错
上传的附件:
收藏
免费 3
支持
分享
最新回复 (5)
雪    币: 10962
活跃值: (2925)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
2
支持楼主,先标记下,待楼主写完后可以好好跟着学习下。
2018-9-29 17:28
0
雪    币: 99
活跃值: (168)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
mark一下,感谢楼主
2018-10-12 23:22
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
3,4,5,6呢?
2018-10-13 12:56
0
雪    币: 15
活跃值: (765)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主,你好!我问一下:我怎么在这个回调函数中调用原来的方法呢?
hookedMethodCallback当中?
2019-1-2 13:05
0
雪    币: 117
活跃值: (1557)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
没调用到 hookedMethodCallback 被坑。。。哇哇哇
2022-2-23 17:02
0
游客
登录 | 注册 方可回帖
返回
//