刚开始学习安卓逆向, 遇到的一大堆坑, 所以先记录下来, 不管是用于分享学习或者用于日记记录也好
首先你需要有一台Root了的手机, 如果没有用3.2版本的雷电模拟器或者买一台Google的pixel 1
前置需求就不多说了, adb jdk python环境之类的安装, root, 开发者选项打开usb调试, OEM解锁
首先先去下载frida-server所需文件https://github.com/frida/frida/releases
frida frida-server的版本必须保持一致 frida-tools需要看其版本支持什么哪个版本的frida, 如果不清楚直接下载同样版本就好
pip install frida
pip install frida-tools
查看Frida安装版本
frida --version
根据所安装的frida版本下载相对应的frida-server版本
进入github之后发现frida-server有四个不一样的, 那么如何知道使用哪个才对呢
我们需要查看一下自己的手机是32位还是64位的
arm基本是32位的手机使用的
arm64基本是64位手机使用
如果是模拟器基本是使用x86的即可
而最后一个基本用不着, 所以不管他
如何查询自己手机是多少位
https://jingyan.baidu.com/article/0eb457e54c290f43f0a90550.html
安装frida-server
下载完了之后, 先用usb链接电脑, 然后打开电脑的小黑窗
输入以下命令用于查看链接设备
adb devices
前面的是你的设备, 后面的是已连接的意思
具体其他情况可以参考一下: https://blog.csdn.net/weixin_38374974/article/details/83589633
看到已连接之后, 把刚才下载下来的frida-server推送去手机
adb push 本地文件路径 /data/local/tmp/
push之后有一个空格, 是你刚才下载下来的压缩包里面的一个文件路径, 然后后面接着一个空格, 是手机存放的路径, 一半为/data/local/tmp/ 如果tmp后面没有任何内容则使用默认文件名, 如果有则使用指定的名字
push完了之后继续输入命令进入安卓内操作
adb shell
adb -s 设备名 shell
以上两种选择一种即可, 第二种是因为你电脑可能链接了多个设备, 所以需要指定进入哪个
如果是看到有一个$的符号说明你已经成功进入了.$代表的是shell, 但是我们需要的是root用户权限所以还需要切换一下root用户(输入su 回车即可). 当你看到#的时候, 说明已经是root用户权限了
进入刚才推送的包的目录下
cd /data/local/tmp/
更改文件权限(至于为什么可以自己额外了解一下linux)
chmod 777 文件名
运行frida-server
./fd64test
这里可能会有坑
当你运行的时候, 如果没有任何信息提醒固然是好的, 但是如果有其他信息出现. 例如
其实是可以运行的, 我也不知道为什么, 反正我自己的手机和模拟器都这样. 但是运行是正常的. 所以暂时忽略不管吧
运行了之后,小黑窗一定不能关闭, 必须常在后台挂着, 除非你不打算继续使用frida了
然后到代码部分
# -*- coding: utf-8 -*-
import sys
import frida
jsCode = """
console.log('Zeno');
"""
def message(message, data):
if message["type"] == "send":
pass
print(u" {0}".format(message["payload"]))
else:
print(message)
# process = frida.get_usb_device().attach(27082) # 使用PID
process = frida.get_remote_device().attach("com.dodonew.online") # 标准端口 使用包名
# process = frida.get_device_manager().add_remote_device('手机ip:端口').attach("com.dodonew.online") # 非标准端口
script = process.create_script(jsCode)
# script.on("message", message)
script.load()
sys.stdin.read()
完美运行