首页
社区
课程
招聘
[原创]Native层与Java层注入之免ROOT框架TweakMe
发表于: 2022-6-20 09:31 28084

[原创]Native层与Java层注入之免ROOT框架TweakMe

2022-6-20 09:31
28084

https://github.com/liaoguobao/TweakMe

TweakMe是一个轻量级的逆向开发框架,它与传统的xposed、frida、magisk等框架相比的最大优势是无需root环境,对手机系统的要求很低,只需要一个正常手机即可对app进行逆向分析。简单的几步操作就可以完成对指定app的进程注入(Native层与Java层),可以绕过大多数加固(360、梆梆、爱加密等)的签名证书校验。完成注入后通过Java编写hook代码,一键脚本编译为dex插件。目前TweakMe框架在5.011.0的android手机上测试通过(12.0由于无对应手机,没有测试)。由于篇幅问题,本文档并不介绍TweakMe的实现原理,仅仅介绍如何快速使用它,以及使用过程中的注意事项。
 
 
 
如果有任何使用上的问题,可以在后面留言,我会尽量及时回复,或者加入TweakMeQQ讨论群 325509091
 
 
TweakMe地址如下:
TweakMe是一个轻量级的逆向开发框架,它与传统的xposed、frida、magisk等框架相比的最大优势是无需root环境,对手机系统的要求很低,只需要一个正常手机即可对app进行逆向分析。简单的几步操作就可以完成对指定app的进程注入(Native层与Java层),可以绕过大多数加固(360、梆梆、爱加密等)的签名证书校验。完成注入后通过Java编写hook代码,一键脚本编译为dex插件。目前TweakMe框架在5.011.0的android手机上测试通过(12.0由于无对应手机,没有测试)。由于篇幅问题,本文档并不介绍TweakMe的实现原理,仅仅介绍如何快速使用它,以及使用过程中的注意事项。
 
 
 
如果有任何使用上的问题,可以在后面留言,我会尽量及时回复,或者加入TweakMeQQ讨论群 325509091
 
 
TweakMe地址如下:
一、使用前准备:
1、一台没有ROOT过的正常Android手机,系统版本11及以下都可。
2、开发电脑需要安装AndroidStudio,Java版本最好是1.71.8
3、一个待测试的apk【demo.apk】,假设包名为【com.example.tweakme】。
 
 
二、将TweakMe拉取到本地,目录结构类似如下图
一、使用前准备:
1、一台没有ROOT过的正常Android手机,系统版本11及以下都可。
2、开发电脑需要安装AndroidStudio,Java版本最好是1.71.8
3、一个待测试的apk【demo.apk】,假设包名为【com.example.tweakme】。
 
 
二、将TweakMe拉取到本地,目录结构类似如下图
Apktweak目中附带了一个apktweak.exe的命令行工具,后续步骤会经常用到。
 
三、重打包apk
重打包的目的是让APP在启动时主动加载我们的TweakMe/libs/armeabi/libsotweak.so。
所以我们要在app中放入我们自己的so,并微调某个so,让它把我们的so加载起来。
 
重打包命令:apktweak  --apk  xxx.apk  --target  xxx.so
 
--target参数指定app中待微调的so,不同app设置可能会不一样,但总体原则是:
指定为app在启动时第一个加载的应用层so。
目前大多数的app都有加壳,所以这里的--target其实就是壳的so。
对于梆梆加固是libDexHelper.so,对于爱加密是libexec.so,对于360加固是libjiagu.so。
需要注意的是,对于爱加密、360加固等壳的so并不在通常的lib/abi目录下,而在assets目录中,所以--target 参数必须要
指定绝对路径,只有在通常的lib/abi目录下时才可以只写so名称。可供参考的命令如下:
 
apktweak  --apk  xxx.apk  --target  libDexHelper.so
apktweak  --apk  xxx.apk  --target  assets/ijm_lib/armeabi/libexec.so  
apktweak  --apk  xxx.apk  --target  assets/libjiagu.so
 
如果打包成功,则会在apk当前目录中生成一个重签名的新apk包,如下图所示
apk名称带sign的为重签名apk,另一个为原始apk
Apktweak目中附带了一个apktweak.exe的命令行工具,后续步骤会经常用到。
 
三、重打包apk
重打包的目的是让APP在启动时主动加载我们的TweakMe/libs/armeabi/libsotweak.so。
所以我们要在app中放入我们自己的so,并微调某个so,让它把我们的so加载起来。
 
重打包命令:apktweak  --apk  xxx.apk  --target  xxx.so
 
--target参数指定app中待微调的so,不同app设置可能会不一样,但总体原则是:
指定为app在启动时第一个加载的应用层so。
目前大多数的app都有加壳,所以这里的--target其实就是壳的so。
对于梆梆加固是libDexHelper.so,对于爱加密是libexec.so,对于360加固是libjiagu.so。
需要注意的是,对于爱加密、360加固等壳的so并不在通常的lib/abi目录下,而在assets目录中,所以--target 参数必须要
指定绝对路径,只有在通常的lib/abi目录下时才可以只写so名称。可供参考的命令如下:
 
apktweak  --apk  xxx.apk  --target  libDexHelper.so
apktweak  --apk  xxx.apk  --target  assets/ijm_lib/armeabi/libexec.so  
apktweak  --apk  xxx.apk  --target  assets/libjiagu.so
 
如果打包成功,则会在apk当前目录中生成一个重签名的新apk包,如下图所示
apk名称带sign的为重签名apk,另一个为原始apk
四、获取原apk证书签名数据
重签名的包,最大的改变是签名证书和原来不一样了,加固壳在启动过程中肯定会检查apk包是否被篡改,那时签名证书校验就会报错直接闪退。所以,我们需要获取到原apk证书签名数据,在dex插件中适当时机再重新设置回去。
 
打印apk签名证书命令:apktweak  --apk  xxx.apk  --cert
 
命令执行后会在控制台打印出签名证书数据(Base64编码),如下图
四、获取原apk证书签名数据
重签名的包,最大的改变是签名证书和原来不一样了,加固壳在启动过程中肯定会检查apk包是否被篡改,那时签名证书校验就会报错直接闪退。所以,我们需要获取到原apk证书签名数据,在dex插件中适当时机再重新设置回去。
 
打印apk签名证书命令:apktweak  --apk  xxx.apk  --cert
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-6-24 17:01 被liaoguobao编辑 ,原因:
收藏
免费 13
支持
分享
最新回复 (41)
雪    币: 2484
活跃值: (3152)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
这个相当于重打包吧?
2022-6-20 09:40
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2022-6-20 09:58
0
雪    币: 1549
活跃值: (1638)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持一下!
2022-6-20 12:33
0
雪    币: 441
活跃值: (731)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
要修改源apk啊,有些签名验证过不去咋办呢
2022-6-20 14:22
0
雪    币: 2598
活跃值: (1913)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
火钳刘明
2022-6-20 14:32
0
雪    币: 201
活跃值: (135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
火钳刘明
2022-6-20 14:37
0
雪    币: 17
活跃值: (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
没壳的怎么弄,有些没壳也有签名校验
2022-6-20 14:52
0
雪    币: 838
活跃值: (3995)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9

这签名值打了我人都麻了

2022-6-20 16:49
0
雪    币: 2415
活跃值: (1246)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
来看看大佬
2022-6-20 18:17
0
雪    币: 41
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
免root必须要重打包才能注入的。
2022-6-20 21:08
0
雪    币: 41
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
王麻子本人 这签名值打了我人都麻了
9楼的朋友,不知道你是怎么触发这个bug的,能说下吗?
2022-6-20 21:12
0
雪    币: 41
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
amwpecel 没壳的怎么弄,有些没壳也有签名校验
你可以试一下,记住--target 指向的是第一个应用层加载的so就行。
2022-6-20 21:13
0
雪    币: 41
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
Light紫星 要修改源apk啊,有些签名验证过不去咋办呢
如果有那种重打包后过不了签名的app,请在留言中贴出来,我可以看看,及时修复问题。
2022-6-20 21:15
0
雪    币: 41
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
熊猫吃鱼 这个相当于重打包吧?
免root必须要重打包才能注入的。那种运行在隔离沙箱中的注入模式,环境问题很多,也很难不被检测到。
2022-6-20 21:17
0
雪    币: 201
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
有的包可以解包,但是回编不回去咋办~
2022-6-21 09:50
0
雪    币: 41
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
wx_我是菜鸟 有的包可以解包,但是回编不回去咋办~
我的框架没有解包,所以也不存在回编不回去的问题
2022-6-21 10:15
0
雪    币: 838
活跃值: (3995)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
不清楚正常输命令 我是win11
2022-6-21 12:44
0
雪    币: 199
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
火钳刘明
2022-6-21 22:02
0
雪    币: 17
活跃值: (891)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
搞成一键操作更好
2022-6-21 22:59
0
雪    币: 224
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
给个视频教程,直接看文档说明,有点匪夷所思,就是卡在运行app那里不知道怎么玩。
2022-6-22 07:33
0
雪    币: 420
活跃值: (2638)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
mark
2022-6-22 08:22
0
雪    币: 386
活跃值: (1371)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23

点赞

最后于 2022-6-22 14:15 被笑对VS人生编辑 ,原因:
2022-6-22 09:39
0
雪    币: 334
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
mark
2022-6-22 18:37
0
雪    币: 3624
活跃值: (2703)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25

火钳刘明。不过请问一下,可否hook到so内部的函数?比如sub_xxxx()这样的?或者说可否按地址hook?

最后于 2022-6-23 11:39 被vcdemon编辑 ,原因:
2022-6-23 11:38
0
游客
登录 | 注册 方可回帖
返回
//