对于frida ,就不再过多解释,是一种可以hook安卓app的工具之一,方便自己在逆向的时候常用的工具之一,现在主要讲解器如何安装。
提前准备软件
- pip
本篇章主要讲解的是在windows中安装步骤,首先我们确定电脑上有pip这个软件,可以在cmd的dos窗口中可以输入pip 查看是否安装了这个软件。
pip是python的一个工具,用来安装python包特别方便,所以一般在配置python环境的时候一般默认都会安装这个软件。
- adb
adb官网下载
或者本人百度云盘自取:链接: https://pan.baidu.com/s/1oT74bq5JoiLJd0ta7Kutig 提取码: 4f8f
下载后解压到自己想要安装的路径,一般不建议安装在c盘,不过现在很多win10系统只有一个盘符,如果不重新分盘,也没有办法(比如我买的所谓的超级本,一共200多G,懒得分盘所以只有一个c盘)。
第一步:找到自己放的路径比如是 D:/ADB 文件夹找到adb.exe,整体路径是 D:/ADB/adb.exe
第二步:找到图标 “我的电脑”——右击——点击 ”属性“——找到 ”高级系统设置“并点击进入环境变量设置页;点击”环境变量“—— 系统变量框下 找到“Path”——编辑——新建——将刚才复制的adb路径(D:/ADB)粘贴上去——保存即可。
一般选择放在下面,下面是所有用户都可以用。
第三步:打开cmd 输入输入 adb version ,如果出现版本信息那就是安装上了,如果没有那看是否路径有问题,或者在用户和系统path中都放入adb的路径试试。
硬件设备
需要的设备一个电脑,一个手机(或者安卓模拟器)
安装frida
电脑上安装frida
现在就需要给电脑安装firda 相关的人软件,简单给命令即可
pip install frida-tool
//有时候安装国外资源会慢,所以可以用国内资源
pip3 install frida-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/
等安装完毕后,可以用frida 命令进行测试,电脑是否安装完成打开cmd输入下面命令。当然也有人说pip install frida,然后pip install frida-tool的,其实个人安装的时候直接pip install frida-tool就可以了。
frida --version
如果出现版本号那就是安装完毕
手机端安装 frida
这个需要有两种一种是手机有root权限(安装frida-server),一种是手机没有root权限的(安装frida-gadget),如果是安卓模拟器一般都是由root权限的。
个人建议最好使用root权限,因为简单直接,不像没有root权限的手机需要手动注入,会有些麻烦。
无论是否由root权限,都必须做两件事情。
第一: 看电脑的frida版本。
第二:看手机的芯片的版本。
目前就以本人的为例子,演示一下过程,所以大家在安装的时候记得注意自己安装的版本要求。
frida version
adb shell getprop ro.product.cpu.abi
我的是ARM 处理器 ,如果自己不知道可以百度一下自己的型号。
打开官网:https://github.com/frida/frida/releases
官网frida-server和frida-gadget都用,自己根据自己的需要选择下载。
- root权限的手机安装 frida-server
因为分32位和64位,记得确定号版本下载,不过下错了也没有关系,比如我手机是21位,但是大意下载了64位的,然后安装的时候提示无法安装64位,然后删除重新安装即可。
通过adb命令将解压后的软件push到手机里面。cd到解压后的文件里面然后输入下面命令
adb push frida-server-14.2.14-android-arm /data/local/tmp/frida-server
因为一般习惯都是将解压后的文件放入/data/local/tmp这个文件下面,将其改名为frida-server,方便启动。
这个时候就需要运行frida-server,具体如下
//进入安卓手机,可以使用linux的命令
adb shell
//获得root权限
su
//到放frida-server的文件夹里面
cd /data/local/tmp
//修改frida-server的权限修改,如果对linux了解的就知道linux权限可以通过数字来表示
chmod 755 frida-server
//运行frida-server
./frida-server
这个cmd 可以通过ctri+c退出,但是这个窗口在调app的时候不能关闭或退出,如果需要其他操作就重新打开要给cmd进行操作。
为了测试是否安装成功,需要重新打开一个cmd窗口,然后输入frida-ps -U 如果成功输出进程列表,如下:
那就是安装成功了。但是这个时候你通过python调用frida框架的时候,还会报错的是,因为你缺少了一个端口监控,就是本地和手机是数据两者相互监控,需要输入下面两句
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
这两句是默认这样写的,一般不会变,这个时候就可以通过frida框架进行调试app。
- 非root权限的手机安装frida-gadget
为什么我不建议这种,因为需要对目标应用的app进行反编译注入和调用。
反编译对方的app,需要重新打包以及签名等。
这个又需要一个神奇的软件 apktool,如果没有安装就就看括号里面内容
(如果没有安装就软件安装很简单,本人百度云盘自取:链接: https://pan.baidu.com/s/1oT74bq5JoiLJd0ta7Kutig 提取码: 4f8f 安装步骤在apktool中的readme中写了如何安装,所以这里不在演示了)
打开cmd ,然后cd到下载好的app文件夹下面
apktool d target_app.apk -o target_app_floder
然后下载系统对应版本的 frida-gadget(官网地址上面又),解压并放到指定位置。也是需要根据手机版本进行选择。就算下载错了也没事,可以再根据整个步骤来一遍。
下载的是frida-gadget-14.2.14-android-arm.so.xz,然后解压。如果解压后文件不是so文件,就修改一下后缀.so
对于apd反编译的结构文件,可以看另一篇文章,大体差不多:安卓逆向基础 安卓逆向结构简单说
代码中加载上一步so 文件,建议在应用的入口文件中执行,这样app在运行的时候就会调用frida。
根据 AndroidManifest.xml 文件找到程序的入口文件,例如 MainActivity,在反编译生成的代码 smali 中的 onCreate 方法中注入如下代码。一般的app都是这样的结构,不过后面有些app的方法会被重写。
打开app源码,需要另一个空间,我百度分享里面又jadx,然后找到对应的smail文件进行修改如下(这个还是有点麻烦的,有时候对方修改了需要查找):
const-string v0, "frida-gadget"
invoke-static {v0}, Ljava/lang/System;>loadLibrary(Ljava/lang/String;)V
然后查看AndroidManifest.xml权限
<uses-permission android:name="android.permission.INTERNET" />
然后就需要重新打包 app
apktool b -o repackage.apk target_app_floder
打包完毕的文件会在target_app_floder,这个文件
但是一般反编译的app 都不能直接被安装上,需要签名,签名有好几种,而我常用的是
keytool jarsigner 工具是JAVA JDK自带的
//生成证书命令
keytool -genkey -keystore target_app.keystore -alias 密码 -keyalg RSA -keysize 4096 -validity 10000
//用证书给apk签名
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore target_app.keystore -signedjar target_app_sign.apk target_app.apk my_alias
然后安装app ,但是有时候我的签名不一定可以过去,这个也是我不建议这种方式的原因之一。
adb install target_app_sign.ap
执行命令,看是否成功
frida-ps -U
frida -U gadget
pip3 install -U objection
objection patchapk -s target_app.apk