文章目录
- 1 概述
- 2 启动方式
- 3 Android 常用Hook方法汇总
-
- 3.1 Hook 一般函数---使用implementation
- 3.2 Hook 重载函数---使用overload
- 3.3 Hook 构造函数---使用$init
- 3.4 Hook 生成对象---使用$new
- 3.5 Hook 内部类---使用$
- 3.6 Hook native 函数
- 3.7 Hook 静态变量(属性)/参考文章中有反射的方法
- 3.8 打印堆栈
- 3.9 byte转String
- 3.10 字符串转Uint8Array
- 3.11 int转bytes
- 3.12 string转ArrayBuffer
- 3.13 ArrayBuffer转String
- 3.14 添加时间戳
- 3.15 byte转Hex
- 3.16 Hex转byte
1 概述
在逆向过程中,Frida是非常常用的Hook工具,这个工具在日常使用的过程中,有很多通用方法,这里记录一下,方便查阅,部分函数使用的时候,可能需要稍微修改一下,本文记录是Android的方法,不涉及其他的
主要是搬迁的一下参考文章的片段
Android逆向之旅—Hook神器家族的Frida工具使用详解
Frida官方文档
看雪 Frida官方手册 - JavaScript API(篇一)
看雪 Frida官方手册 - JavaScript API(篇二)
Js中几种String Byte转换方法
Frida learn by example
补充一个参考文章–Hook 属性
2 启动方式
2.1 使用js脚本启动
frida -U -l exploit.js -f com.package.name
其中js脚本的写作方式如下
setImmediate(function() {
//prevent timeout
console.log("[*] Starting script");
Java.perform(function() {
myClass = Java.use("com.package.name.xxActivity");
myClass.implementation = function(v) {
// do sth.
}
})
})
2.2 使用python脚本启动
import frida, sys
def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
jscode = """
Java.perform(function () {
// Function to hook is defined here
var MainActivity = Java.use('com.example.hook.MainActivity');
// hook method is setString
MainActivity.setString.implementation = function (str) {
// Show a message to know that the function got called
send('hook success');
console.log('string is: ' + str));
};
});
"""
process = frida.get_usb_device().attach('com.example.hook')
#pid = device.spawn(["com.android.chrome"])
#session = device.attach(pid)
#device.resume(pid)
script = process.create_script(jscode)
script.on('message', on_message)
print('[*] Hook Start Running')
script.load()
sys.stdin.read()
3 Android 常用Hook方法汇总
3.1 Hook 一般函数—使用implementation
var MainActivity = Java.use('ese.xposedtest.MainActivity');
//外部类 修改返回值
MainActivity.OutClass.implementation = function (arg) {
var ret = this.OutClass(arg);