首页
社区
课程
招聘
[原创]非root环境下Frida完全内置apk打包方案及2种注入方式回顾
发表于: 2024-11-18 18:54 42886

[原创]非root环境下Frida完全内置apk打包方案及2种注入方式回顾

2024-11-18 18:54
42886

今天简单分享之前验证的一个免ROOT权限Frida完全内置APK方案!让Frida得到更广泛的使用!

关于frida-gadget使用官方及各论坛都有许多讲解及说明,但似乎都停留在把hook脚本代码存放本地SD目录或者/data/local/tmp。

对于分析来说完全够用了,但是对于想把实现hook的整体效果直接分享出来就存在局部限制,那么能不能实现LSPatch类似效果?答案是完全没问题!
运行效果如下:

首选我们回顾下frida-gadget注入两种方式,顺便补充完善部分细节,具体如下:

1.基于so层通过添加依赖库方式调用Frida库 (实现原理参考:Android平台感染ELF文件实现模块注入)

简单来说就是找个软件启动时候最开始调用so文件,t通过对其注入添加依赖库方式启用frida-gadget

如果apk本身没有so这种方式是否可以?
也没问题,直接通过dex2c方案把部分java方法转换为so调用,再注入就好了!
比如 开源的 152K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6U0L8$3c8W2K9r3q4K6j5h3&6Q4x3V1k6V1k6i4R3J5j5H3`.`. 或者某些一键工具

为了让操作简单化,这里我把注入工具重新py写了下,为了普遍可以用特意找win7环境打包独立exe
Windows环境下so注入工具下载见:fc9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8W2k6g2)9J5k6h3y4G2L8g2)9J5c8Y4S2V1N6Y4y4J5M7#2)9J5c8Y4y4G2i4K6u0V1K9h3&6B7k6h3y4@1K9h3!0F1i4K6u0V1N6r3!0G2L8q4)9J5k6r3g2^5k6b7`.`.
(论坛附件上传运行空间有限,只能借助gitee)
注入操作方式如下图:

2.基于JAVA层Smali代码调用Frida库 (System.loadLibrary("frida");)
这是比较常用的方案,通过首启activity或application在方法<init>()或<clinit>()或onCreate植入如下代码

代码如下

关于打包进apk后执行js官方文档及之前部分博主、网友是这样讲的 !


这样并不能实现脚本内置,这样还得借助ADB或者本地文件夹读取权限才能完成加载hook的js代码,分享使用存在局限性!

原理:安装后的 so 文件通常会被存储在以下路径:/data/app/<package-name>/lib/<abi>/
(本身没有so的APK就手动创建文件夹或者D2C抽取产生)


libjs.so:hook的js代码文件(案例内容)

libfrida-gadget.config.so: 调用配置内容改如下

libfrida-gadget.config.so:Frida依赖库文件(可根据需要自行去下载ffaK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3M7X3W2V1j5g2)9J5c8X3k6J5K9h3c8S2i4K6u0r3M7X3g2D9k6h3q4K6k6i4x3`.

为了进一步方便大家参考比较,以上2种方式分别做了Demo,可自行下载对比原版改动地方!

完成以上打包,接下来就是自由发挥的时候了!hook!hook!

apk demo下载 (gitee分享)

第三方网盘下载:f7cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6K9r3q4J5k6g2)9J5k6h3k6W2K9h3A6A6M7r3q4F1i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8Y4N6S2c8o6N6m8e0K6g2w2

有待改善优化空间:比如做手机端或者PC端一键注入打包,做魔改,自己二次编译libfrida-gadget定制个人需求功能

补充:市场上部分应用目前都带加固或者防Frida,如何过检测等等.....就靠大家自己探索了!

文献主要参考:cbbK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6X3M7X3W2V1j5g2)9J5k6i4u0W2i4K6u0r3k6r3!0U0M7#2)9J5c8X3N6S2k6r3N6W2N6q4)9J5c8R3`.`. 以及部分前辈、博主文档

const-string p0, "frida-gadget"    
invoke-static {p0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
const-string p0, "frida-gadget"    
invoke-static {p0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
if (Java.available) {
    Java.perform(function () {
        console.log("Hooking any Activity...");
 
        // 动态获取所有的 Activity 类,并 Hook 其 onCreate 方法
        var Activity = Java.use("android.app.Activity");
 
        Activity.onCreate.overload("android.os.Bundle").implementation = function (bundle) {
            var activityClassName = this.getClass().getName(); // 获取当前 Activity 类名
            console.log(activityClassName + " onCreate hooked!");
 
            // 调用原始的 onCreate 方法
            this.onCreate(bundle);
 
            // 获取上下文并在主线程显示 Toast,提示当前 Activity 名称
            var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext();
             
            Java.scheduleOnMainThread(function() {
                var toast = Java.use("android.widget.Toast");
                var message = "Frida Hook成功! 通过java层调用 \n当前Activity: " + activityClassName;
                toast.makeText(context, Java.use("java.lang.String").$new(message), 1).show();
            });
        };
    });
} else {
    console.log("Java environment not available!");
}
if (Java.available) {
    Java.perform(function () {
        console.log("Hooking any Activity...");
 
        // 动态获取所有的 Activity 类,并 Hook 其 onCreate 方法
        var Activity = Java.use("android.app.Activity");

[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2024-11-19 09:31 被笑对VS人生编辑 ,原因: 补充
上传的附件:
收藏
免费 129
支持
分享
最新回复 (123)
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享,向楼主学习
2024-11-18 23:24
1
雪    币: 490
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
理论学习
2024-11-19 02:58
0
雪    币: 103
活跃值: (2163)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享,向楼主学习
2024-11-19 08:58
0
雪    币: 1153
活跃值: (1887)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享,向楼主学习
2024-11-19 10:40
0
雪    币: 100
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
666
2024-11-19 10:46
0
雪    币: 65
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
6666666
2024-11-19 10:53
0
雪    币: 2579
活跃值: (3537)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
感谢分享
2024-11-19 11:42
0
雪    币: 2431
活跃值: (4028)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
9
可以跨进程搞?
2024-11-19 14:57
0
雪    币: 105
活跃值: (4915)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
66666666
2024-11-19 15:29
0
雪    币: 5150
活跃值: (3346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习了
2024-11-19 16:38
0
雪    币: 31
活跃值: (491)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了,感谢
2024-11-19 18:25
0
雪    币: 1569
活跃值: (3183)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2024-11-19 20:10
0
雪    币: 427
活跃值: (1453)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
感谢分享
2024-11-20 10:39
0
雪    币: 1072
活跃值: (4087)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看看看看·
2024-11-20 10:53
0
雪    币: 1442
活跃值: (3235)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢分享
2024-11-20 11:05
0
雪    币: 12
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
看看隐藏
2024-11-20 11:19
1
雪    币: 12
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
感谢分享
2024-11-20 16:06
0
雪    币: 318
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
看看技术贴
2024-11-20 16:25
0
雪    币: 327
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
看看技术贴
2024-11-21 01:18
0
雪    币: 4149
活跃值: (3032)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
学习技术贴
2024-11-21 09:31
0
雪    币: 170
活跃值: (390)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习技术贴
2024-11-21 10:13
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
2024-11-21 11:47
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
牛皮牛皮
2024-11-21 15:36
0
雪    币: 268
活跃值: (1011)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
牛的。又是一种新方式
2024-11-22 11:07
0
游客
登录 | 注册 方可回帖
返回