使用frida hook Android APP某个函数的值,并将函数值发送给python,python处理后再返回内存的完整代码
时间: 2024-02-20 08:00:22 浏览: 185
好的,首先需要在 Android 设备上安装 frida 和 frida-tools,然后在 Python 中安装 frida 和 frida-tools 包。
接下来,我们需要编写一个 Python 脚本来 hook Android APP 中的某个函数,获取函数返回值并将其发送到 Python 进行处理。以下是一个简单的示例代码:
```python
import frida
import time
# 要 hook 的函数所在的类名和函数名
class_name = "com.example.app.MainActivity"
func_name = "getSomeValue"
# hook 回调函数
def on_message(message, data):
if message['type'] == 'send':
print("[*] Received: {}".format(message['payload']))
else:
print(message)
# 启动 frida-server
device = frida.get_usb_device()
pid = device.spawn(["com.example.app"])
session = device.attach(pid)
device.resume(pid)
# 加载脚本
with open("hook.js", "r") as f:
script = session.create_script(f.read())
# 注入脚本
script.load()
# 调用 hook 函数
hook = script.exports.hook(class_name, func_name)
# 等待 hook 回调
script.on('message', on_message)
time.sleep(2)
# 关闭 frida-server
device.kill(pid)
device.flush()
```
上述代码中,我们使用 `frida.get_usb_device()` 获取连接的 Android 设备,然后启动目标应用程序并附加到其进程。接着,我们加载一个名为 `hook.js` 的 JavaScript 脚本,该脚本实现 hook 目标函数并将函数返回值发送给 Python。最后,我们通过 `script.on('message', on_message)` 等待 hook 回调,处理函数返回值。
以下是 `hook.js` 脚本的示例代码:
```javascript
Java.perform(function () {
var targetClass = Java.use('com.example.app.MainActivity');
// 定义 hook 函数
function getSomeValueHook() {
var result = this.getSomeValue();
// 将函数返回值发送给 Python
send(result.toString());
return result;
}
// hook 目标函数
targetClass.getSomeValue.implementation = getSomeValueHook;
// 导出 hook 函数
var exports = {};
exports.hook = function (className, funcName) {
var targetClass = Java.use(className);
var targetFunc = targetClass[funcName];
targetFunc.implementation = getSomeValueHook;
};
return exports;
});
```
上述脚本中,我们使用 `Java.use()` 方法获取目标类,并使用 `implementation` 属性 hook 目标函数。在 hook 函数中,我们获取函数返回值,并使用 `send()` 方法将其发送到 Python 进行处理。最后,我们将 hook 函数导出为 `exports.hook`,以便在 Python 中调用。
在 Python 中,我们可以将获取到的函数返回值进行处理,例如写入文件或执行其他操作。由于本人不能获取您的具体要求,因此无法提供更具体的代码示例。
阅读全文