0

0

android逆向之frida安装与使用

星夢妙者

星夢妙者

发布时间:2025-08-28 11:19:19

|

353人浏览过

|

来源于php中文网

原创

这篇文章最后以分析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或掌握面向对象的编程概念。感兴趣的朋友可以过来看看

下载

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

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

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

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

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

代码语言:javascript代码运行次数:0运行复制
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

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”,通过百度云下载。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

679

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1365

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

569

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

730

2023.08.11

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 13万人学习

Java 教程
Java 教程

共578课时 | 49.6万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 6.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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