之前参加了2020XMAN的冬令营,见识了不少大佬,安卓逆向也算是入门了,最近搞到一台退役手机,所以就开始配置真机调试环境,期间也踩了不少坑,所以就写篇文章记录一下
重点坑已用黑体标出
1.安装python环境
我只在python3下使用过frida,如果有朋友是用python2的请慎重
如果你已经有python环境了可以跳过,没有python环境的可以下载一个Miniconda,推荐清华镜像站的版本
以下介绍摘自清华镜像站https://mirror.tuna.tsinghua.edu.cn/help/anaconda/
Miniconda 是一个 Anaconda 的轻量级替代,默认只包含了 python 和 conda,但是可以通过 pip 和 conda 来安装所需要的包。
Miniconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 下载。
我下载的是最新版本的Miniconda3-latest-Windows-x86_64.exe,在页面最下方才是最新的,有时间标注。
安装时候注意一下,有个加入环境变量选项,没有python环境的要选上,有的话慎选,有可能把你环境变量搞乱
(不过我选了,也没什么事情
具体使用可以看这篇文章https://www.jianshu.com/p/742dc4d8f4c5
安装完之后在cmd或者Powershell执行conda env list可以查看所有环境
默认安装的是python3环境,环境名叫做base,如果需要python2可以根据上面那个链接自行下载
我们选择这个环境,conda activate base即可
启动时用
conda activate 环境名
退出时用
conda deactivate
有了conda就不用怕python2跟python3之间的各种冲突了
2.安装frida
在cmd或者Powershell执行
pip install frida
pip install frida-tools
无脑安装即可
之后在https://github.com/frida/frida/releases下载对应你手机或者模拟器架构的frida-server
frida-server的版本号要跟你安装的frida版本一致,不能一个高一个低
例如我的frida版本是12.8.10,frida-server也得是12.8.10
例如有的模拟器架构是x86的,就下载frida-server-12.8.10-linux-x86.xz
有的手机架构是arm64-v8a的,就下载frida-server-12.8.10-android-arm64.xz
查看模拟器或者手机架构可以用一个device info HW的工具,运行后点击芯片,找ABI那个选项就行
之后利用adb将下载好的frida-server复制到手机或模拟器里的/data/local/tmp/文件夹中
./adb push frida-server /data/local/tmp/frida-server
之后给予权限,直接777就行
./adb shell chmod 777 /data/local/tmp/frida-server
注意,给予权限和复制文件时候需要root权限,不然目录会拒绝被访问,运行时候也会
模拟器应该自带root,手机要想想办法去root一下,切换成root权限用命令su
最后./adb shell连接手机或模拟器,cd到/data/local/tmp/目录,运行./frida-server即可
如果不报错,那就没问题了
3.开始hook
hook的流程很简单,运行frida-server,在模拟器或者真机上运行对应APP,运行python脚本或者通过“frida -U -l exp.js 进程名”来执行js脚本,之后在模拟器或者真机上点击返回键,之后再打开那个APP就会获取到信息
frida的python脚本编写和使用可以看腾讯玄武实验室的大佬写的,基本只需要改改js里面的代码就好
https://mabin004.github.io/2018/03/09/Android-Hook-%E2%80%94%E2%80%94-Frida/
但是有一点,我从模拟器换成真机后,发现找不到设备,最后发现原因:
玄武大佬在get_usb_device()时候没有加参数,导致我运行python脚本时候会报错找不到设备
frida.InvalidArgumentError: device not found
大佬原句是process = frida.get_usb_device().attach('com.example.administrator.words')
这个是frida连接设备跟进程时候的语句,用模拟器时候能正常找到设备,但是真机找不到
我找了很多exp实验,最后发现使用真机调试时候
只需要把frida.get_usb_device()加个参数1,即变为frida.get_usb_device(1)就正常了
还有一点,想要正常hook或者用Android Studio等工具动态调试,你的模拟器或者手机需要允许APP被调试,否则用动态调试或者hook时候就找不到进程,也就没办法达到目的了
1.把系统中ro.debugable设置为1(过程略麻烦)
2.利用重打包技术修改apk相关配置再安装,玄武大佬的博客也有提到(每次安装app都要这样)
3.推荐!安装Xposed框架,再安装一个叫BDOpener的模块并勾选,**勾选之后重启才能生效(**一步到位)
如果你是模拟器,自带xposed框架那就更方便了,我这个旧手机是直接刷了一个自带xposed的系统,美滋滋,具体可以看
https://security.tencent.com/index.php/opensource/detail/17
下载链接也在里面,github上也有
(有问题请指出,感谢)