非ROOT环境下使用Frida及调试

本文介绍了在非ROOT的Android设备上如何利用Frida进行APK的逆向工程。主要步骤包括:解包APK、修改AndroidManifest.xml以开启调试、添加gadget动态库、修改smali代码注入frida-gadget、重新打包并签名、安装APK、启动程序并查看进程以确认注入成功。通过这种方法,可以在不修改源码的情况下对目标应用进行动态分析和HOOK。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设备

Android版本: 9
MIUI版本: 11.0.5稳定版
手机型号: Redmi Note 8
CPU信息:在这里插入图片描述

关于ROOT

ARMV8的引入以及Google对安全的重视,使得Android获取ROOT权限很难。那个仅仅依靠一个apk就能实现手机ROOT的时代基本上一去不返了。apk提权基于的是Android系统的漏洞,目前Android已经很完善了,寻找漏洞非常困难。

目前获取ROOT基本都是通过刷安装包来实现。当然了Android模拟器可以很轻松获取ROOT权限。但是很多APP都对模拟器有检测,并且模拟器的架构基本上基于的是x86,与arm有很大的区别。

市面上大多数的手机都是非ROOT的,不能为了使用一次Frida就去刷机吧。

刷机有风险,智能变板砖。笔者曾刷小米6的手机,结果很不幸。

非ROOT环境下使用Frida

本文使用的apk是领跑娱乐.apk。有需要的可以私心我。一个赌博类的app,不要作非法的事情噢。

(1)解包: java -jar apktool_2.4.1.jar d game.apk
(2)修改AndroidManifext文件。添加 android:debuggable="true"
(3)下载相应的gadget放到lib/ABI目录下。通过file命令可以查看动态库的具体信息。
在这里插入图片描述
由于是32位,这里选择android-arm.so.xz版本。
在这里插入图片描述下载完成后,复制到对应的目录下面,如下图:
在这里插入图片描述(4)修改smali代码,加载libfrida-gadget.so,通常是在Application的onCreate方法或者启动Activity的onCreate方法。

笔者选择在启动Activity的onCreate方法中添加。

.method public constructor <init>()V
    .locals 1

    invoke-direct {p0}, Lcom/fish/main/BaseGameActivity;-><init>()V

    const/4 v0, 0x0

    iput-boolean v0, p0, Lcom/fish/main/MainGameActivity;->p:Z

    # System.loadLibrary("frida-gadget")
    const-string v0, "frida-gadget"
    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
    
    return-void
.end method

(5)打包 java -jar apktool_2.4.1.jar b game
(6)重新签名 jarsigner -verbose -keystore burning.keystore -signedjar game_signed.apk game.apk burning
(7)安装 adb install -r game_signed.apk
(8)启动程序,这里通常会黑屏,等待连接,具体可参见第9步
(9)查看进程信息,可以看出注入成功了。
在这里插入图片描述通过logcat可以看到如下的信息,说明frida-server已经开启了监听。
在这里插入图片描述(10)运行frida -U Gadget -l 1.js。脚本能够正常运行,于是可以愉快的HOOK了。
在这里插入图片描述

权限

如果本来就有这个权限,那就不需要添加了。

<uses-permission android:name="android.permission.INTERNET" />

调试

(2)修改AndroidManifext文件。添加 android:debuggable="true"

加上这句话之后,就可以通过jeb进行调试了。关于JEB调试,后面会专门讲解。

在这里插入图片描述

写在最后

这种方式有一个明显的缺点,那就是需要修改smali源代码,而很多apk是不允许修改smali源码的(dex文件),当然这个可以通过Frida给HOOK掉。

有什么办法不改smali?有的,通过动态连接库的依赖加载来实现,这个会在Frida高级篇进行介绍。

公众号

关于Frida更多内容,欢迎关注我的微信公众号:无情剑客。
在这里插入图片描述

使用 Frida 进行第三方应用程序的动态调试,需要进行以下步骤: 1. 手机或模拟器需要具有 root 权限。 2. 在手机或模拟器中安装 Frida Server。可以下载最新版的 Frida Server,并将其推送到 /data/local/tmp 目录下,然后在命令行中运行以下命令启动 Frida Server: ``` adb push frida-server-14.2.18-android-x86 /data/local/tmp/frida-server adb shell chmod 755 /data/local/tmp/frida-server adb shell /data/local/tmp/frida-server & ``` 其中,frida-server-14.2.18-android-x86 是 Frida Server 的文件名,根据具体的情况可能会有所不同。 3. 在 Frida 的命令行中使用以下命令连接到设备: ``` frida -U ``` 4. 在 Frida 的命令行中使用以下命令列出设备上的应用程序: ``` frida-ps -U ``` 5. 选择需要进行动态调试的应用程序,并记录其进程 ID。 6. 在 Frida 的命令行中使用以下命令启动应用程序,并在其进程中注入 Frida: ``` frida -U -p 进程ID -l hook.js --no-pause ``` 其中,进程ID 是第 5 步中记录的应用程序的进程 ID,hook.js 是 Hook 代码所在的 JavaScript 文件。 7. 在 Android Studio 中编写 Hook 代码,并将其保存为 hook.js 文件。 8. 在 Hook 代码中使用 Java.use() 或 Java.choose() 等函数来 Hook 应用程序中的类和方法。 9. 在命令行中运行第 6 步中的命令,等待应用程序启动,然后在 Android Studio 的 Logcat 中查看 Hook 的结果。 需要注意的是,在使用 Frida 进行第三方应用程序的动态调试时,需要注意遵守法律法规和伦理道德,不要进行法活动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helloworddm

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值