android逆向之frida安装与使用

星夢妙者
发布: 2025-08-28 11:19:19
原创
338人浏览过

这篇文章最后以分析uncrackable-level1.apk介绍frida脚本的使用,如果大佬们对前面介绍的adb、frida安装已经清楚,则可以直接拉到最后看uncrackable-level1.apk的分析。

一、安装frida

电脑上安装adb安装adb是为了在电脑上通过adb与手机进行交互。手机需要通过usb连接(adb也支持通过wifi连接,但最开始都需要通过usb连接一次)windows电脑安装adb,可以通过安装android sdk,然后在android sdk目录中的platform-tools目录中找到adb.exe,将该目录设置为系统环境变量,即可在命令行中使用adb,具体安装方法可以百度或者Google一下参考mac安装adb可以参考如下链接https://www.jianshu.com/p/52e9b44460d0安装完adb后,通过数据线将手机与电脑进行连接,手机设置允许usb调试,然后执行adb devices命令查看手机是否已经跟电脑连接成功,如下所示
android逆向之frida安装与使用
在电脑上安装python3windows电脑可以在https://www.python.org/downloads/windows/下载python3安装包进行安装,如下所示
android逆向之frida安装与使用

mac电脑安装python3,可以通过brew install python3指令进行安装,如下所示

android逆向之frida安装与使用
在电脑上安装frida-toolswindows电脑与mac电脑都可以通过如下指令安装frida-toolspip3 install frida-tools如下所示
android逆向之frida安装与使用
下载frida-server发送到手机中并启动电脑上配置完后,现在需要下载frida-server保存到手机中,并启动frida-server,这样电脑上的frida客户端才能与手机中的frida服务端进行交互frida-server下载,可在github中下载,链接如下所示https://github.com/frida/frida/releases下载的frida-server可根据设备cpu的型号进行下载,如下所示
android逆向之frida安装与使用

如果觉得github下载速度慢,可以在公众号回复“frida-server”百度云下载,四个版本都打包一起哈下载完android设备相对应的frida-server后,通过adb push将frida-server发送到android设备中(通常将frida-server保存在/data/local/tmp目录中),如下所示

android逆向之frida安装与使用

修改frida-server的权限,使frida-server具有执行权限,如下所示

android逆向之frida安装与使用

以后台模式运行frida-server,这样电脑上的frida CLI就能够与frida-server进行交互,我们可以在电脑上使用frida来与android设备中的app交互(当然前提是手机要通过usb数据线连接到电脑),如下所示

android逆向之frida安装与使用
android逆向之frida安装与使用

二、frida的使用

frida tools主要有Frida CLI、frida-ps、frida-trace、frida-discover、frida-ls-devices、frida-kill等命令工具

frida tools命令工具的使用

除了frida命令行使用外,frida还可以通过python及JavaScript脚本来hook android设备中的应用程序

下载安装UnCrackable-Level1.apk

https://github.com/OWASP/owasp-mstg/tree/master/Crackmes/Android/Level_01

android逆向之frida安装与使用

运行UnCrackable-Level1,观察app的功能,可以发现该app主要是要校验我们输入的字符串是否正确。并出现了一个"Root detected!"弹框,表示app检测到我们的android设备已root,如下所示

android中音频视频开发教程 中文WORD版
android中音频视频开发教程 中文WORD版

媒体包提供了可管理各种媒体类型的类。这些类可提供用于执行音频和视频操作。除了基本操作之外,还可提供铃声管理、脸部识别以及音频路由控制。本文说明了音频和视频操作。 本文旨在针对希望简单了解Android编程的初学者而设计。本文将指导你逐步开发使用媒体(音频和视频)的应用程序。本文假定你已安装了可开发应用程序的Android和必要的工具,同时还假定你已熟悉Java或掌握面向对象的编程概念。感兴趣的朋友可以过来看看

android中音频视频开发教程 中文WORD版 0
查看详情 android中音频视频开发教程 中文WORD版

确认我们需要完成任务即绕过app的root检测和找出app校验的正确的字符串是什么,现在可以开始分析app

静态分析app,可以通过jeb、jadx、Androidkiller等工具进行分析,这里我就使用jadx静态分析app。我们先分析app的检测android设备是否root的功能,如下所示

android逆向之frida安装与使用
android逆向之frida安装与使用

顺带看一下app中的检测app是否被调试的方法

主要有两种方式绕过root检测方法

代码语言:javascript代码运行次数:0运行复制
<pre class="brush:php;toolbar:false;">setImmediate(function(){ //防止超时    console.log("[*] Staring script");    Java.perform(function(){ //JavaScript代码成功被附加到目标进程时调用,我们要hook app的代码都在Java.perform底下写,是个固定格式        //我们通过两种方法来绕过app的检测android设备是否root,如果root则退出app        //方法一 修改我们上面分析的3个root检测函数的返回值 使他们始终返回false        console.log("[*] Hooking calls to root detect");        //1.修改方法a的返回值,使返回值为false。方法a通过检测PATH(android系统环境变量)中是否有su文件来判断android系统是否被root        var rootDetect = Java.use("sg.vantagepoint.a.c"); //Java.use用于声明一个Java类 这里我们声明root检测的类        //类.函数.overload(参数类型).implementation = function(形参名称){        rootDetect.a.implementation = function(){ //这里我们需要hook的是rootDetect类中的a方法 a方法没有参数因此overload可以不用写        //function中不用写形参名称            console.log("-----hook su finder-----");            var suFinder = this.a(); //执行a方法并返回a的返回值Boolean值            console.log("su finder original return value is: ",suFinder.toString()); //打印返回值            suFinder = false; //修改返回值为false            console.log("su finder new return value is: ",suFinder.toString()); //打印修改的返回值            return suFinder; //返回我们修改的值 使a函数始终返回false        }        //2.修改方法b的返回值,使返回值为false。方法b通过检测Build.TAGS中是否包含字符串"test-keys"来判断android系统是否被root        rootDetect.b.implementation = function(){ //这里我们需要hook的是rootDetect类中的b方法 b方法没有参数因此overload可以不用写        //function中不用写形参名称            console.log("-----hook test-keys finder------");            var testKeysFinder = this.b(); //执行b方法并返回b的返回值Boolean值            console.log("test-keys finder original return value is: ",testKeysFinder.toString()); //打印返回值            testKeysFinder = false; //修改返回值为false            console.log("test-keys finder new return value is: ",testKeysFinder.toString()); //打印修改的返回值            return testKeysFinder; //返回我们修改的值 使b函数始终返回false        }        //3.修改方法c的返回值,使返回值为false。方法c通过检测指定路径下是否包含指定的文件来判断android系统是否被root        rootDetect.c.implementation = function(){ //这里我们需要hook的是rootDetect类中的c方法 c方法没有参数因此overload可以不用写        //function中不用写形参名称            console.log("-----hook superuser file finder-----");            var superuserFileFinder = this.c(); //执行c方法并返回c的返回值Boolean值            console.log("superuser file finder original return value is: ",superuserFileFinder.toString()); //打印返回值            superuserFileFinder = false; //修改返回值为false            console.log("superuser file finder new return value is: ",superuserFileFinder.toString()); //打印修改的返回值            return superuserFileFinder; //返回我们修改的值 使c函数始终返回false        }        //方法二 修改System.exit函数使app不退出 当app检测到android设备root时则会调用System.exit函数退出app        /*console.log("[*] Hooking calls to System.exit");        var exitClass = Java.use("java.lang.System"); //声明System类        exitClass.exit.implementation = function(){ //这里我们需要hook的是System类中的exit方法 exit方法没有参数因此overload可以不用写        //function中不用写形参名称            console.log("[*] System.exit called");        }*/        //hook app正确字符串生成算法得到解密后的正确字符串        console.log("[*] Hooking calls to AES decrypt");        var aesDecrypt = Java.use("sg.vantagepoint.a.a");        aesDecrypt.a.overload('[B',"[B").implementation = function(arg1,arg2){            console.log("[*]Hook a.Class");            var decryptValue = this.a(arg1,arg2);            var secret = '';            for(var i=0;i<decryptValue.length;i++){                secret+=String.fromCharCode(decryptValue[i]);            }            console.log("secret is : " + secret);            return decryptValue;        }    });})
登录后复制

verifyString.py

下面是执行绕过app root检测方法脚本后,得到的结果,如下所示

android逆向之frida安装与使用
android逆向之frida安装与使用

为了验证app root检测方法的正确性,我们也可以到android设备中上面检测方法涉及的目录查看是否存在相应的文件,如下所示

android逆向之frida安装与使用

我们已经分析完app的root检测功能,现在分析app的verify算法,查看app字符串校验的算法,确认app需要的正确的字符串是啥,如下所示

android逆向之frida安装与使用

分析完verify校验算法后,我们即可通过frida hook最后的aes解密算法,得到它解密后的返回值再转成String后,就是我们想得到的正确的校验字符串,代码如下

下面是执行完aes解密方法脚本后,得到的结果,如下所示

android逆向之frida安装与使用

综上所述,我们已经通过frida脚本完成了绕过app的检测及hook app校验字符串的方法从而得到真正的字符串。感兴趣的大佬可以试一试,完成项目代码可以在公众号回复“codeUncrackable1Test”,通过百度云下载。

以上就是android逆向之frida安装与使用的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号