本文主要是介绍安卓app逆向破解脱壳教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
From:Hook 神器家族的 Frida 工具使用详解:https://blog.csdn.net/FlyPigYe/article/details/90258758
详解 Hook 框架 frida ( 信抢红包 ):https://www.freebuf.com/company-information/180480.html
APP逆向神器之Frida【Android初级篇】:https://www.jianshu.com/p/2d755beb1c54
frida 官网文档:https://frida.re/docs/home/
《FRIDA操作手册》:https://python.ctolib.com/hookmaster-frida-all-in-one.html
FridaApp_Python的Hook脚本.zip:链接: https://pan.baidu.com/s/196-f9xggQ6QNNavmwiP8PA 提取码: vzuh
利用Frida绕过Android App(途牛apk)的SSL Pinning:https://blog.csdn.net/weixin_44677409/article/details/106650473
Frida从入门到入门—安卓逆向菜鸟的 frida 使用说明:https://bbs.pediy.com/thread-226846.htm
哔哩哔哩视频教程:
frida java 层 hook:https://www.bilibili.com/video/BV1UE411A7rW?p=78
frida native 层 hook:https://www.bilibili.com/video/BV1UE411A7rW?p=79
关键字:frida hook 或 fridaapp.apk 或 frida工具使用详解
Android 之 Frida 框架:https://mp.weixin.qq.com/s?__biz=MzU5Mjg5NjMyNA==&mid=2247484311&idx=1&sn=f18d19fd7cbf72c66beba9455caf24cc
雷电3版本模拟器上 frida-server 跑不起来。雷电4模拟器可以。https://blog.csdn.net/ugooo/article/details/112045478
但是 雷电4模拟器没法设置代理进行抓包。 https://www.ldmnq.com/forum/thread-67291-1-1.html
所以抓包可以用雷电3,运行frida-server 可以用 雷电4
一、前言
说到逆向APP,很多人首先想到的都是反编译,但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值,极大地增加了逆向时的复杂度,有没有什么办法可以方便地知道被传入的参数和返回值呢?答案是有的,这个方法就是Hook,Hook的原理简单地说就是用一个新的函数替代掉原来的函数,在这个新的函数中你想做什么都可以,为所欲为。
在逆向过程中有一个 Hook 神器是必不可少的工具,之前已经介绍了 Xposed 和 Substrate 了,不了解的可以看这两篇文章:Android中Hook神器Xposed工具介绍 和 Android中Hook神器SubstrateCydia工具介绍 这两篇文章非常重要,一个是 Hook Java层的时候最常用的 Xposed , 一个是Hook Native层常用的SubstrateCydia,可以看之前的文章比如写微信插件等都采用了Xposed工具,因为个人觉得Xposed用起来比较爽,写代码比较方便。而对于SubstrateCydia工具可以 Hook Native 层。
那么有了这两个神器为啥还要介绍 Frida工具呢?而且这个工具网上已经有介绍了,为什么还有介绍了,因为这个Frida工具对于逆向者操作破解来说非常方便,所谓方便是他的安装环境和配置要求都非常简单兼容性也非常好,因为最近在弄一个协议解密,无奈手机上安装 Cydia 之后不兼容导致死机所以就转向用了这个工具实现了 hook,所以觉得这个工具非常好用就单独介绍一下。
Frida 也是一个很常用的 Hook 工具,只需要编写一段 Javascript 代码就能轻松地对指定的函数进行 Hook,而且它基本上可以算是全平台的(主流平台全覆盖),除了 Android 以外,iOS 和 PC 端的APP也可以用它来进行Hook,非常方便。
1、Hook是个什么鬼?
Hook 翻译过来就是 "钩子" 的意思,钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。Hook 技术无论对安全软件还是恶意软件都是十分关键的一项技术,其本质就是 劫持函数调用 。
2、Frida框架的那些事
frida 是一款基于 python 和 java 的 hook 框架,是一种动态插桩工具,可以插入代码到原生App的内存空间中,动态的监视和修改其行行为,可运行在Android、iOS、Linux和windows等多个平台。
插桩技术 是指将额外的代码注入程序中以收集运行时的信息,可分为两种:
- 1. 源代码插桩【Source Code Instrumentation(SCI)】:额外代码注入到程序源代码中。
- 2. 二进制插桩【Binary Instrumentation】:额外代码注入到二进制可执行文件中,其又可分为两种:
● 静态二进制插桩 【 Static Binary Instrumentation(SBI) 】:
在程序执行前插入额外的代码和数据,生成一个永久改变的可执行文件。
● 动态二进制插桩 【 Dynamic Binary Instrumentation(DBI) 】:
在程序运行时实时地插入额外代码和数据,对可执行文件没有任何永久改变。
使用 Frida 框架到底能做什么呢 ?
- (1)访问进程的内存,提取我们感兴趣的信息或敏感信息
- (2)在应用程序运行时覆盖一些功能,改变其程序运行逻辑
- (3)从导入的类中调用函数
- (4)在堆上查找对象实例并使用这些对象实例
- (5)Hook,动态跟踪、拦截变量和函数 等等。
二、环境安装配置
如何让 Frida 奔跑起来 ?
用到的 frida 框架分为两部分:
- 一部分是 "客户端", 即:用于连接远程设备,提交要注入的 JS 代码到服务端,并接受服务端发来的消息;
- 另一部分是 "服务器端", 即:注入JS代码到目标进程,操作内存数据,并将相关信息发送至给客户端。
官网安装说明
frida
环境要求
系统环境 – Windows、macOS、Linux
Python – 最新的3.x版本,
Adb环境 – 请自行下载adb工具或安装 android studio 工具
环境准备好了,让我们来安装 frida CLI 吧!
安装 frida CLI 有很多种方法,这里只介绍两种,即:pip 和 npm
pip 安装 frida
执行 pip install frida
执行 pip install frida-tools
执行 frida -version
npm 安装 frida,首先安装 NodeJS
执行 npm install frida
执行 npm install frida-tools
执行 frida --version
执行一波 pip install frida-tools
,安装完毕以后,测试是否安装正确,因为官网安装文档的下半部分是用于测试刚装好的库是否可用,但是比较麻烦,这里可以直接使用 frida-ps
命令来测试(显示本机的进程)
如果加上参数 U 表示的是 usb 连接的设备。( 模拟器也是 -U 参数)
frida-ps -aU
看起来是没问题了,然后我们怎么Hook Android手机上的 APP 呢?别急,还需要在手机上做一些操作你才能这么做。
我们需要有一台已经Root了的Android手机,因为不同型号的手机Root方法存在差异,本文中就不指导如何对手机进行Root操作了,请自行通过搜索引擎查找方法。实在没有可以Root的Android手机的话可以选择使用模拟器,推荐使用Genymotion之类系统较为原生的模拟器,并将Android版本选择在6.0以上,否则可能会出现一些奇奇怪怪的问题。
手机准备好了之后,找到 Frida 文档中 Tutorials 栏里的Android页,开始进行Frida的手机端准备工作。
文档中能看到,Frida官方最近的大部分测试都是在运行着Android 9的Pixel 3上进行的,所以理论上来讲如果你在使用中遇到任何奇怪的问题,都可能是你手机的系统导致,所以这里再次建议,使用较为原生和偏高版本的系统(建议至少6.0)进行操作。
Frida 环境
-
1. 手机运行服务端
-
2. 电脑端运行客户端,电脑端再进行端口转发
-
adb forward tcp:27042 tcp:27042
-
adb forward tcp:27043 tcp:27043
frida-server
环境要求
手机一部,本文主要讲述 Android系统。手机必须被 Root,具体 Root 方法请自行查询
下载 frida-server ,地址:https://github.com/frida/frida/releases
安装方法( 先要看构架:adb shell getprop ro.product.cpu.abi )
什么是 Android ABI ?
ABI 就是 Application binary interface 的意思,即应用程序二进制接口。他定义了一套规则,允许编译好的二进制目标代码能在所有兼容该ABI的操作系统中无需改动就能运行。不同的Android手机使用不同的CPU,因此需要提供对应的二进制接口交互规则(即对应的ABI文件)才能进行交互。目前,有部分CPU是能支持多种交互规则,但这是在牺牲性能的前提下所做的兼容。
API架构 | 说明 |
---|---|
armeabiv-v7a | 第7代及以上的 ARM 处理器。目前,大部分手机的CPU都支持此ABI交互规则 |
arm64-v8a | 第8代64位ARM处理器,支持此ABI的手机还比较少 |
armeabi | 第5代、第6代的ARM处理器,早期手机用得较多 |
x86 | 平板、模拟器用得比较多 |
x86_64 | 64位的平板 |
在 Android 手机上安装一个应用时,只有手机CPU架构支持的ABI架构对应的.so文件会被安装。如果支持多个ABI架构,会按照优先级进行安装。
CPU架构 | 支持的ABI架构对应的.so文件安装优先级 |
---|---|
ARMv5 | armeabi |
ARMv7 | armeabi,armeabi-v7a |
ARMv8 | armeabi,armeabi-v7a,arm64-v8a |
MIPS | mips |
MIPS64 | mips,mips64 |
x86 | x86,armeabi,armeabi-v7a |
x86_64 | :armeabi,x86,x86_64 |
CPU大都是向前兼容的,但是会按优先级来选择ABI。如x86架构的CPU会优先选择x86目录下的.so包,当不存在时,才会选择armeabi-v7a目录下的.so包,如果仍然不存在,最后才会选择armeabi目录下的.so文件。
注:x86设备运行armeabi下的so库时会损失性能。
打开 GitHub 之后你会发现,这里有很多个不同的版本,应该下载哪一个呢?
可以看到末尾处都有个 系统 和 CPU架构 的标识,我们直接看 Android 的。
这里标了Android的一共有四个,怎么判断自己的手机/模拟器属于哪一种CPU架构的呢?
查CPU架构的方法很多,这里介绍一个比较方便快捷的——使用一个名叫 Device Info HW 的 APP。
Device Info HW 下载地址:https://www.cr173.com/soft/845060.html
下载的文件名的格式是: frida-server-(version)-(platform)-(cpu).xz
例如:手机是 nexus6p, cpu 为 arm64
需要下载的是: frida-server-11.0.13-android-x86_64.xz;
注意, frida-server 的版本一定要跟 frida CLI 的版本一致。
执行以下命令
adb devices
adb push path/to/frida-server /data/local/tmp
adb shell
su
cd /data/local/tmp
chmod a+x ./frida-server 或者 chmod 777 ./frida-server
./frida-server 或者 ./frida-server &
frida tools
Frida 提供的工具,frida-trace,frida-ps,frida,frida-discover,这些工具都位于 python 的 Scripts 路径下,
frida 的工具共有 6 个:
(1)frida 命令是一个交互式解释器(REPL),用于实现 Hook 代码的动态注入,他的交互形式跟 IPython 很类似。
命令帮助:
示例:
将一个脚本注入到 Android 目标进程:frida -U -l myhook.js com.xxx.xxxx
参数解释:
- -U 指定对 USB 设备操作
- -l 指定加载一个 Javascript 脚本
- 最后指定一个进程名,如果想指定进程 pid,用
-p
选项。正在运行的进程可以用frida-ps -U
命令查看
frida 运行过程中,执行 %resume
重新注入,执行 %reload
来重新加载脚本;执行 exit
结束脚本注入
(2) frida-ps: 用于列出进程的一个命令行工具,当我们需要跟远程系统进行交互的时候,这个是非常有用的。
(备注:这里的 com.android.chrome 就是通过 frida-ps 命令查询到的远程客户
这篇关于安卓app逆向破解脱壳教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!