文章目录
- 一. 前言
- 二. 安装安卓SDK
- 三. 安装安卓模拟器(推荐夜神模拟器)
- 四. 安装frida和objection
- 五. 解题过程
- 六. 总结
一. 前言
- 题目地址:[SWPU 2019]easyapp
- 大佬题解[SWPU 2019]easyapp pwjcw的WriteUp
大佬的题解很简单,直接hook就可以看到返回值,但是我看了半天没看明白是用什么工具做的
看其他题解是分析so文件得到答案,但是仍然没有搞清楚函数调用流程.
后来我学习了一下《安卓Frida逆向与抓包实战 (陈佳林)》才知道是用frida和objection进行hook
不过仍然没有成功复现,这里推测是由于安卓版本的问题,低版本(安卓7)成功复现,安卓9及以上均会失败
app目标安卓版本是安卓10(sdk29),但是我使用了雷电模拟器(安卓9 x86_64)和真机红米Note7(安卓10 arm64)均无法和大佬题解中一样成功hook Android 各版本对应的 SDK 版本
二. 安装安卓SDK
这一步主要是为了获取adb(安卓调试桥)工具
可以在这里直接下载SDK 平台工具版本说明
比较推荐的是安装AndroidStudio并将SDK设置到环境变量,这里不多赘述
三. 安装安卓模拟器(推荐夜神模拟器)
官网:夜神模拟器
注意: 可能出现adb无法找到安卓虚拟机的问题
在模拟器路径 \Nox\bin\ 下的nox_adb.exe和adb.exe先查看一下版本,要和安卓sdk的adb版本一致,不一致直接复制sdk的adb,修改名称并替换掉夜神模拟器中的nox_adb.exe和adb.exe
可以使用adb devices查看识别出的设备
如果打开了模拟器那么应该能正常识别到,
使用connect命令连接,之后就可以使用adb调试
查看安卓版本: adb shell getprop ro.build.version.release
查看sdk版本:adb shell getprop ro.build.version.sdk
四. 安装frida和objection
我的学习笔记略有介绍Android逆向学习之Frida逆向与抓包实战学习笔记(持续更新中)但不够详细,后续会继续补充完善
可以根据大佬文章安装配置frida和objectionfrida安装配置教程
建议使用anaconda管理python版本,给每个版本frida单独开一个环境便于操作多种设备
安装教程anaconda的安装和使用(管理python环境看这一篇就够了)
五. 解题过程
这题调用了Native层的Encrypt函数并进行比较,所以可以尝试hook Encrypt函数直接获取用于比较的字符串
- 启动frida server
adb shell
su
cd data/local/tmp
./frida-server-12.8.0-android-x86
启动之后命令行会卡在这里,注意不要关闭,另开一个cmd窗口进行操作
2. 切换到objection1.8.4环境(frida=12.8.0 frida-tools=5.4.0 python=3.7.16)
conda activate objection1.8.4
frida version
3. objection注入
objection -g com.example.ndktest2 explore
objection会自动搜寻该app并启动注入
4. hook函数
android hooking watch class_method com.example.ndktest2.MainActivity.Encrypt --dump-args --dump-backtrace --dump-return
hook之后在app输入框内随便输入点什么,点击登录,objection会给出hook到的返回值YouaretheB3ST
输入YouaretheB3ST即可成功登录
六. 总结
这题前前后后一个多月终于解决了,虽然是个简单题目但是为了得到答案并不简单
安卓逆向学习之路漫漫,还需多学习多总结多动手
强烈推荐学习陈佳林老师的《安卓Frida逆向与抓包实战》