1. 环境搭建
在 windows 下安装 frida
frida 是对应 python 内的文件,是将文件安装在 python 对应的目录中
C:\Users\Administrator\Desktop>pip install frida
执行上个命令首先需要安装 pip 工具。对应的地址 : Windows 安装 pip
在 pip 安装过程中可能处理的比较慢,但第一行会看到下载文件对应的 url , 示例如下:
https://files.pythonhosted.org/packages/dd/11/6cb0ccf6d1dbc75c1957f27a09830769b4b6320c7605348cfbf761efdb30/frida-11.0.13.tar.gz
https://files.pythonhosted.org/packages/87/80/e6118e8641398cb6bfa7238b4cc9137db1efe1cbe2a6c83ea4db5c26fd9f/frida-11.0.13-py2.7-win-amd64.egg
安装成功检测:
C:\Users\Administrator\Desktop\fridastart>python
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import frida
>>>
然后是下载 frida-server android 文件,对应的 github 地址是: frida
对应的文件名称示例: frida-server-11.0.13-android-arm.xz
2. 使用
- 将 frida-server push android 手机内。然后 chmod 后执行。
- 在 PC 断进行端口转发
C:\Users\Administrator\Desktop>adb forward tcp:27042 tcp:27042
C:\Users\Administrator\Desktop>adb forward tcp:27043 tcp:27043
- 编写 py 脚本
import frida
rdev = frida.get_remote_device()
front_app = rdev.get_frontmost_application()
print front_app
- 执行脚本,观察数据
C:\Users\Administrator\Desktop\fridastart>python get_front_app.py
Application(identifier="com.google.android.googlequicksearchbox", name="Google 搴旂敤", pid=1928)
3. 进阶
- hook 类里面的函数
示例:hook 掉 native 方法,打印原始返回数据,并返回自定义的字符串
import frida, sys
def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
jscode = """
Java.perform(function () {
var MainActivity = Java.use('com.saliey.twobutton.MainActivity');
MainActivity.getClc.implementation = function () {
send("Hook getClc Start...");
this.a = 88;
this.b = 99;
send("success !! ");
return 777;
}
MainActivity.getStrFromJNI.implementation = function () {
send("Hook getStrFromJNI Start... ");
var retStr = this.getStrFromJNI();
send("raw ret : " + retStr);
return "asdfgggggggggggggggg";
}
});
"""
process = frida.get_usb_device().attach('com.saliey.twobutton')
script = process.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()
上面可以看到,首先是获取类实例,然后 hook 类方法。
可参考博客:
https://blog.csdn.net/zouyuanxc/article/details/80492465
https://blog.csdn.net/zouyuanxc/article/details/80527522
https://blog.csdn.net/zouyuanxc/article/details/80900808
- 函数传参
在 implementation = function () {...}
的 小括号内,就是要 hook 的函数传递的参数。
网友评论