首页
论坛
课程
招聘
[原创]AppInspect : 一个纯手机端实现的无代码的hook框架
2021-8-20 17:43 4062

[原创]AppInspect : 一个纯手机端实现的无代码的hook框架

2021-8-20 17:43
4062

由于疫情捂在家里,写了一个纯App端的Hook框架(暂且这么称呼,没有太多黑科技,大佬轻拍)。

 

AppInspect的特点是PC端无需安装任何软件,通过浏览器访问手机,对选中的目标App内部模块进行浏览和hook。

 

主要还是想探索一下Rust+Flutter 写一些底层一点的应用,具体应用场景和需求还不是特别明确,想听听专业人士的意见。

 

下载地址:
https://github.com/wuhx/AppInspect

 

包括两个部分:
Riru模块(app-inspect-v0.0.1.zip)用于hook进App内部,启动server与App通信。
App客户端(AppInspect-0.0.1.apk )用于提供hook配置界面,配置完成可退出。

 

1 手机端:

2 浏览器访问:
可通过App名称,pkg名称,地址等进行App搜索,点右边的甲虫按钮进行调试。

3 点调试后,会进入对应App的内部module列表(加载的so,dex等),这里可根据模块名称,地址进行搜索

 

也支持输入地址,显示该地址属于的模块。

 

点击模块右侧的下载按钮,可以从内存dump出模块内容,下载到电脑。

4 点击选中的模块后,进入symbol列表。同样支持实时搜索。对于c++的函数名会自动demangle。

 

5 点击要hook的函数后,进入一个简陋配置界面,

主要是配置参数序号和类型
类型只实现了c的char* 和jni的jstring,其他类型待增加,主要验证可行性,

 

如:open函数的原型是:
int open(const char *pathname, int flags)
对应参数0的类型是chars
参数1的类型是value

 

点击右上角保存按钮,后重启目标App,即可生效。

 

理论上这里可做更多的事,比如利用Android源码或java侧的jni函数signature自动获取函数参数列表类型。

 

目前hook后到操作是以json格式打印到logcat,后面考虑更合适的操作。比如webhook或写sqlite数据库。

 

加载成功后的logcat日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Riru-AppInspect-SRV: libre_server::cache::pb_message_cache: PbMessageCache find 2 hooks
Riru-AppInspect-SRV: add_hook_to_list: HookFunctionInfo { pkg_name: "com.tencent.mm", module_name: Some("libc.so"), function_name: "open", args: [(0, chars), (1, value)] }
Riru-AppInspect-SRV: add_hook_to_list: HookFunctionInfo { pkg_name: "com.tencent.mm", module_name: Some("libwcdb.so"), function_name: "sqlite3_open_v2", args: [(0, chars)] }
 
 
//com.tencent.mm启动时找到两个hook:
//libc.so的open
//libwcdb.so的sqlite3_open_v2
 
Riru-AppInspect-SRV: libre_server::hook: HookInfo: do_hook fail, fail to find ptr for: HookFunctionInfo { pkg_name: "com.tencent.mm", module_name: Some("libwcdb.so"), function_name: "sqlite3_open_v2", args: [(0, chars)] }
 
//sqlite3_open_v2 hook失败(此时libwcdb.so还没加载)
 
 
Riru-AppInspect-SRV: hook_jvm_native_load: load /data/app/~~doK-kt6wrU2os9ZOgHddTA==/com.tencent.mm-gxYlcjouxWARtuBs7QGSPA==/lib/arm64/libwcdb.so
Riru-AppInspect-SRV: do_hook: NativePointer(0x7b672d02dc) HookFunctionInfo { pkg_name: "com.tencent.mm", module_name: Some("libwcdb.so"), function_name: "sqlite3_open_v2", args: [(0, chars)] }
//libwcdb.so加载后,sqlite3_open_v2 hook成功
 
//hook输出打印
Riru-AppInspect-SRV: libre_server::hook::hook_function_info: {
Riru-AppInspect-SRV:   "pkg_name": "com.tencent.mm",
Riru-AppInspect-SRV:   "module_name": "libc.so",
Riru-AppInspect-SRV:   "function_name": "open",
Riru-AppInspect-SRV:   "args": [
Riru-AppInspect-SRV:     {
Riru-AppInspect-SRV:       "name": "arg0",
Riru-AppInspect-SRV:       "value": "/data/user/0/com.tencent.mm/shared_prefs/service_launch_way.xml"
Riru-AppInspect-SRV:     },
Riru-AppInspect-SRV:     {
Riru-AppInspect-SRV:       "name": "arg1",
Riru-AppInspect-SRV:       "value": "0"
Riru-AppInspect-SRV:     }
Riru-AppInspect-SRV:   ]
Riru-AppInspect-SRV: }
 
 
Riru-AppInspect-SRV: libre_server::hook::hook_function_info: {
Riru-AppInspect-SRV:   "pkg_name": "com.tencent.mm",
Riru-AppInspect-SRV:   "module_name": "libwcdb.so",
Riru-AppInspect-SRV:   "function_name": "sqlite3_open_v2",
Riru-AppInspect-SRV:   "args": [
Riru-AppInspect-SRV:     {
Riru-AppInspect-SRV:       "name": "arg0",
Riru-AppInspect-SRV:       "value": "/data/user/0/com.tencent.mm/MicroMsg/c5944ec3938fc59659b516b6f26d17c0/TextStatus.db"
Riru-AppInspect-SRV:     }
Riru-AppInspect-SRV:   ]
Riru-AppInspect-SRV: }

[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

最后于 2021-8-20 17:47 被whx编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (11)
雪    币: 29
活跃值: 活跃值 (458)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
twsxtd 活跃值 2021-8-20 18:40
2
0

代码好像不全

最后于 2021-8-20 18:41 被twsxtd编辑 ,原因: 无
雪    币: 174
活跃值: 活跃值 (362)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whx 活跃值 2021-8-20 19:34
3
0
twsxtd 代码好像不全

是的,开源的是Riru模块,Rust和Flutter部分是和其他项目共用的,还没想好怎么弄。另外目前这个App的完成度还很低,现在放出来主要是想听听各位大佬的意见,我逆向做的比较少,可能get不到需求和痛点

最后于 2021-8-20 21:07 被whx编辑 ,原因:
雪    币: 268
活跃值: 活跃值 (2349)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
suuuuu 活跃值 2021-8-21 15:59
4
0
希望增加,在内存中搜索字符串的功能,这个是逆向获取关键信息的重要功能,如果能直接对字符串进行定位,找到实体类,那就很棒了!
雪    币: 174
活跃值: 活跃值 (362)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whx 活跃值 2021-8-21 20:34
5
0
suuuuu 希望增加,在内存中搜索字符串的功能,这个是逆向获取关键信息的重要功能,如果能直接对字符串进行定位,找到实体类,那就很棒了!

C++还是Java的实体类?

目前只实现了native层的功能,ART层正在考虑中,
想走Frida的实现方式,但貌似native层强制打开调试,用jdwp协议操作会更直接

最后于 2021-8-21 23:26 被whx编辑 ,原因:
雪    币: 2927
活跃值: 活跃值 (839)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
D-t 活跃值 2021-8-22 20:32
6
0
推荐的地址一直访问不进去是什么情况
雪    币: 174
活跃值: 活跃值 (362)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whx 活跃值 2021-8-22 20:41
7
0
D-t 推荐的地址一直访问不进去是什么情况
不清楚,我这边下午访问帖子一直有问题,看雪被ddos了吗?
雪    币: 2927
活跃值: 活跃值 (839)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
D-t 活跃值 2021-8-22 20:47
8
0
whx 不清楚,我这边下午访问帖子一直有问题,看雪被ddos了吗?
我是说软件推荐的远程地址 进不去
雪    币: 174
活跃值: 活跃值 (362)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whx 活跃值 2021-8-22 22:31
9
0
D-t 我是说软件推荐的远程地址 进不去
确认一下手机端10020端口打开了没? pc要和手机在同一个局域网
另外第一次打开需要初始化会有一段时间白屏,可以看一下浏览器的调试窗口
雪    币: 2927
活跃值: 活跃值 (839)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
D-t 活跃值 2021-8-22 22:42
10
0
whx 确认一下手机端10020端口打开了没? pc要和手机在同一个局域网 另外第一次打开需要初始化会有一段时间白屏,可以看一下浏览器的调试窗口
怎么去看啊
雪    币: 268
活跃值: 活跃值 (2349)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
suuuuu 活跃值 2021-9-1 15:43
11
0
地址进去了,点击虫子按钮没有任何反应,我是魅族x8,android 版本8.1.0
雪    币: 174
活跃值: 活跃值 (362)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whx 活跃值 2021-9-5 22:14
12
0
suuuuu 地址进去了,点击虫子按钮没有任何反应,我是魅族x8,android 版本8.1.0
logcat有什么报错? 另外App需要配合Magisk模块使用
游客
登录 | 注册 方可回帖
返回