FrIDA-Gadget简介
简单来说,FridaGadget是一种免ROOT的注入方式,通过修改程序加载动态库而实现HOOK。
FridaGadget官方文档:https://frida.re/docs/gadget/
实战目标
破解某照片恢复APP,试了下确实可以对手机照片进行签名恢复(非深度恢复),主要还是恢复了那些后缀名不是标准后缀名的图片。
实战开始
1.分析软件流程
打开APP--扫描可恢复照片--随便点一张恢复
以个人经验来说 从支付宝入手是最方便的(因为支付宝的可见字符串比较多)
直接假装支付一下 然后取消 看看有没有什么提示
有提示就非常方便了 直接去代码搜 取消支付
(如果没提示呢? 通常的解决办法是通过界面分析查看资源ID 比如查看确认支付这个按钮 然后去代码里搜这个按钮的点击事件onClick)
2.实现白嫖 PS:本文主要是对Gadget实战使用的记录,所以不做太多破解分析
现在的APP 90%都会加壳 所以要脱壳 才能看到真实代码
脱壳的话 使用大佬们的DUMP工具就行 https://github.com/lasting-yang/frida_dump
脱完壳 使用jadx 或者 等等等 搜索 取消支付
可以看到c方法是取消支付 a方法是支付成功
所以可以让程序准备执行c方法的时候去调用a方法
可以看到 a方法需要三个参数 其中第一个参数i肯定要为0 才能进入支付成功的流程 其余两个参数倒是没影响(从代码中分析出来)
hook代码如下:
运行一下 故意取消支付看看效果
发现能正常使用 但是略显麻烦 每次要故意取消一下
如果了解安卓程序生命周期 可以知道onCreate方法是每个界面首先调用的方法
因此可以在订单支付界面的onCreate方法里面直接调用a方法(支付成功)
这应该是一种最简单暴力的方式了
hook代码如下:
运行看一下效果 发现直接点恢复就可以恢复了 不用再看到订单支付窗口
3.FridaGadget注入源程序
首先在原APK的lib目录下分别加入各自架构的FridaGadget库 https://github.com/frida/frida/releases/
并在同目录下写入配置文件(执行哪个脚本) 配置文件名就是库名的so前加config.
根据我这里写的配置 需要把脚本命名为myscript.js并放在手机内置存储根目录
最终加入后:
还差最后一步 就是加载Gadget库
一般来说也有两个方法 一是在java层加载 二是在其他so里加载
这里选择java层
对应的smali代码:
[Java] 纯文本查看 复制代码 const-string v0, "frida"
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
把代码加到程序入口(其实只要加到恢复界面之前运行的地方都可以)
因为这是个加固app 其实能选的地方不多
注入完成 打包apk 重新签名 安装到手机(不要忘了把脚本放在手机存储里) 刚装完第一次启动可能无效果 重新启动一次就行
最后放个成品 https://pan.lanzouj.com/icq4ije |