美文网首页
非ROOT使用Frida

非ROOT使用Frida

作者: 无情剑客Burning | 来源:发表于2020-11-13 20:24 被阅读0次

    设备

    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命令可以查看动态库的具体信息。 [图片上传失败...(image-dd18fb-1605270250218)]

    由于是32位,这里选择android-arm.so.xz版本。 在这里插入图片描述

    下载完成后,复制到对应的目录下面,如下图: [图片上传失败...(image-9de4eb-1605270250218)]

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

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

    <pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; margin: 0px; padding: 8px 0px 6px; font-family: consolas, menlo, courier, monospace, "Microsoft Yahei" !important; background: rgb(241, 239, 238); border: 1px solid rgb(226, 226, 226) !important; display: block; border-radius: 0px; overflow-y: auto; color: rgb(80, 97, 109); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-size: 10px; line-height: 12px;">

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

    2. .locals 1

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

    4. const/4 v0, 0x0

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

    6. # System.loadLibrary("frida-gadget")

    7. const-string v0, "frida-gadget"

    8. invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

    9. return-void

    10. .end method

    </pre>

    (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)查看进程信息,可以看出注入成功了。 [图片上传失败...(image-30a758-1605270250218)]

    通过logcat可以看到如下的信息,说明frida-server已经开启了监听。 在这里插入图片描述

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

    在这里插入图片描述

    权限

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

    <pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; margin: 0px; padding: 8px 0px 6px; font-family: consolas, menlo, courier, monospace, "Microsoft Yahei" !important; background: rgb(241, 239, 238); border: 1px solid rgb(226, 226, 226) !important; display: block; border-radius: 0px; overflow-y: auto; color: rgb(80, 97, 109); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-size: 10px; line-height: 12px;">

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

    </pre>

    调试

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

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

    在这里插入图片描述

    写在最后

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

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

    公众号

    关于Frida更多内容,欢迎关注我的微信公众号:无情剑客。 burning_gzh.png

    相关文章

      网友评论

          本文标题:非ROOT使用Frida

          本文链接:https://www.haomeiwen.com/subject/uspbbktx.html