非ROOT使用Frida

核心提示设备Android版本:9MIUI版本:11.0.5稳定版手机型号:RedmiNote8CPU信息:关于ROOTARMV8的引入以及Google对安全的重视,使得Android获取ROOT权限很难。那个仅仅依靠一个apk就能实现手机ROOT

设备

Android版本:9MIUI版本:11.0.5稳定版手机型号:RedmiNote8CPU信息:

关于ROOT

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

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

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

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

非ROOT环境下使用Frida

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

解包:java-jar apktool_2.4.1.jar d game.apk

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

下载相应的gadget放到lib/ABI目录下。通过file命令可以查看动态库的具体信息。

由于是32位,这里选择android-arm.so.xz版本。

下载完成后,复制到对应的目录下面,如下图:

修改smali代码,加载libfrida-gadget.so,通常是在Application的onCreate方法或者启动Activity的onCreate方法。

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

.method public constructor V.locals 1 invoke-direct {p0},Lcom/fish/main/baseGameActivity;->Vconst/4 v0,0x0 iput-boolean v0, p0,Lcom/fish/main/MainGameActivity;->p:Z# System.loadLibraryconst-string v0,"frida-gadget" invoke-static{v0},Ljava/lang/System;->loadLibraryVreturn-void.end method

打包

java-jar apktool_2.4.1.jar b game

重新签名

jarsigner-verbose-keystore burning.keystore-signedjar game_signed.apk game.apk burning

安装

adb install-r game_signed.apk

启动程序,这里通常会黑屏,等待连接,具体可参见第9步查看进程信息,可以看出注入成功了。

通过logcat可以看到如下的信息,说明frida-server已经开启了监听。

运行frida-UGadget-l1.js。脚本能够正常运行,于是可以愉快的HOOK了。

权限

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

调试

加上android:debuggable="true"之后,就可以通过jeb进行调试了。关于JEB调试,后面会专门讲解。

写在最后

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

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

 
友情链接
鄂ICP备19019357号-22