首页
社区
课程
招聘
[原创]非root环境下frida持久化的两种方式及脚本
发表于: 2021-6-22 11:31 29007

[原创]非root环境下frida持久化的两种方式及脚本

2021-6-22 11:31
29007

frida是一个非常好用的hook框架,但使用中有两个问题,一是非root手机使用挺麻烦的,二是frida相较于其他HOOK框架没那么持久。网上的持久化大多基于xposed、刷ROM或者是virtualapp,前面两个是比较重量级,不够轻便。虚拟化技术本身就自带风险,很容易被检测到。

在Android端,网上教程里大部分都是使用frida server来进行hook,其实还有一种使用方法为 frida gadget,此方法需要将frida-gadget.so注入到apk中,纯手动的话过于麻烦,所以这里实现两个脚本,分别用修改smali、修改so来注入目标。


我使用的frida-gadget版本为14.2.18。有其他版本的需求,需要替换tools下的so文件

此方法相对简单。原理来自于古早的静态注入方式:Android平台感染ELF文件实现模块注入

而这种注入方式有工具可以快速实现:How to use frida on a non-rooted device

该方法优点在于可以让gadget是第一个启动的,缺点是没有so的apk不能用。

首先运行注入脚本,获得注入且重签名后的apk。直接安装。

将frida_script.js push 到/data/local/tmp。frida_script.js为你的hook代码:

打开app即可看到效果,app每次启动都会成功的打印LOG。:

不想使用持久化(本地js脚本),也可以通过电脑连接:



不使用持久化,就不必添加config文件,所以脚本执行不需要执行-persistence,执行下面的就可以:


工具详细代码:https://github.com/nszdhd1/UtilScript/blob/main/LIEFInjectFrida.py

运行脚本记得安装lief(pip install lief)

其实关键代码就几行:

在实际情况下,并不是所有的apk都有so。没有so,方法一便没有用武之地了。

此方法呢,是通过修改smali,调用System.loadLibrary来加载so。该原理更简单,但是有一个弊端就是时机不够靠前,没有办法hook Activity 启动之前的代码。

手动修改太麻烦,还是写一个脚本自动化注入。


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

最后于 2021-6-22 11:32 被八重嘤编辑 ,原因:
收藏
免费 11
支持
分享
最新回复 (10)
雪    币: 1110
活跃值: (3384)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2

总结如下: 

  1. 给 APK 内的动态库新增依赖项,重新签名

  2. 修改 APK 内的 dex 文件,添加 loadLibray,重新签名

都重新签名,那么明显的检测特征,要不再完善一下,加上过文件校验和签名检测的脚本?


2021-6-22 12:30
2
雪    币: 577
活跃值: (1978)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
3
Amun 总结如下: 给 APK 内的动态库新增依赖项,重新签名修改 APK 内的 dex 文件,添加 loadLibray,重新签名都重新签名,那么明显的检测特征,要不再完善一下,加上过文件 ...
我不想写,我的场景用不到。你自己改一改frida js不就行了吗
2021-6-22 14:04
0
雪    币: 5
活跃值: (2690)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感觉还是inject更好用
2021-6-22 17:09
0
雪    币: 0
活跃值: (385)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
wx_范迪塞尔 感觉还是inject更好用
inject二次开发路过
2021-6-25 23:14
0
雪    币: 6
活跃值: (926)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
phoenii inject二次开发路过
给个源
2021-6-29 11:31
0
雪    币: 353
活跃值: (511)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
Exception in thread "main" java.lang.IllegalAccessError: class com.android.apksig.internal.apk.v1.V1SchemeSigner (in unnamed module @0x6f2b958e) cannot access class sun.security.x509.AlgorithmId (in module java.base) because module java.base does not export sun.security.x509 to unnamed module @0x6f2b958e
        at com.android.apksig.internal.apk.v1.V1SchemeSigner.getSupportedAlgorithmId(V1SchemeSigner.java:622)
        at com.android.apksig.internal.apk.v1.V1SchemeSigner.<clinit>(V1SchemeSigner.java:538)
        at com.android.apksig.DefaultApkSignerEngine.<init>(DefaultApkSignerEngine.java:146)
        at com.android.apksig.DefaultApkSignerEngine.<init>(DefaultApkSignerEngine.java:51)
        at com.android.apksig.DefaultApkSignerEngine$Builder.build(DefaultApkSignerEngine.java:899)
        at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:280)
        at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:93)
2021-11-18 19:31
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
virtualapp 方式是怎样的话,没找到相关文章呢,求指教
2022-1-11 10:20
0
雪    币: 122
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
这个方案需要重新打包签名,用这个方案的前提是先要绕过二次打包校验,不然重新打包之后不能运行
2022-4-12 10:31
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
打包完成之后 走到 frida listen 就不动了  卡着了   是什么情况
2024-5-17 16:44
0
雪    币: 221
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
Can't find string offset in .dynstr for libfrida-gadget.so
Can't find string offset in .dynstr for 

Can't find string offset in .dynstr for
Can't find string offset in .dynstr for
Can't find string offset in .dynstr for ?
Can't find string offset in .dynstr for ectPcS3_
Can't find string offset in .dynstr for _Z8transferPcc
Can't find string offset in .dynstr for 112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE
Can't find string offset in .dynstr for libfrida-gadget.so
Can't find string offset in .dynstr for
Can't find string offset in .dynstr for SI5l5$5ISI5_SlS_SIS05l5_SI5S5l5IS$5$S05_SI5l5$5lS5SO
Can't find string offset in .dynstr for 5_SlS_SIS05l5_SI5S5l5IS$5$S05_SI5l5$5lS5SO
Can't find string offset in .dynstr for
Can't find string offset in .dynstr for ,~
Can't find string offset in .dynstr for
Can't find string offset in .dynstr for
add lib/arm64-v8a/libfrida-gadget.so
add lib/armeabi-v7a/libfrida-gadget.so
add lib/arm64-v8a/libfrida-gadget.config.so
add lib/armeabi-v7a/libfrida-gadget.config.so
Exception in thread "main" java.lang.IllegalAccessError: class com.android.apksig.internal.apk.v1.V1SchemeSigner (in unnamed module @0x156643d4) cannot access class sun.sec
urity.x509.AlgorithmId (in module java.base) because module java.base does not export sun.security.x509 to unnamed module @0x156643d4
        at com.android.apksig.internal.apk.v1.V1SchemeSigner.getSupportedAlgorithmId(V1SchemeSigner.java:622)
        at com.android.apksig.internal.apk.v1.V1SchemeSigner.<clinit>(V1SchemeSigner.java:538)
        at com.android.apksig.DefaultApkSignerEngine.<init>(DefaultApkSignerEngine.java:146)
        at com.android.apksig.DefaultApkSignerEngine.<init>(DefaultApkSignerEngine.java:51)
        at com.android.apksig.DefaultApkSignerEngine$Builder.build(DefaultApkSignerEngine.java:899)
        at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:280)
        at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:93)
sucess, new apk :./hs_1.3.5_frida.apk
大佬,这样是失败了吗?js脚本没生效
2024-7-4 10:51
0
游客
登录 | 注册 方可回帖
返回
//