使用frida hook Android APP加密函数,并将还未加密的明文转发给python,python处理后再返回内存的完整代码
时间: 2024-02-20 10:00:16 浏览: 193
以下是使用 frida hook Android APP 加密函数,并将未加密的明文转发给 Python,Python 处理后再返回内存的完整代码:
```javascript
var decryptedData = null;
// hook 加密函数
Interceptor.attach(Module.findExportByName(null, "encrypt"), {
onEnter: function(args) {
// 获取加密前的明文数据
var plaintext = Memory.readCString(args[0]);
// 调用 Python 处理数据并返回处理后的数据
decryptedData = recvPlainTextFromPython(plaintext);
},
onLeave: function(retval) {
if (decryptedData != null) {
// 将处理后的数据写入返回值
retval.replace(Memory.allocUtf8String(decryptedData));
}
}
});
// 与 Python 通信
function recvPlainTextFromPython(plaintext) {
var frida = require('frida');
var session = frida.attach("your_app_package_name");
var script = session.createScript(
"recv('"+ plaintext +"').then(function (result) { " +
"send(result);" +
"})"
);
script.on('message', function (message, data) {
decryptedData = message.payload;
});
script.load();
return decryptedData;
}
```
上述代码中,我们使用 frida hook `encrypt` 函数,并在进入函数时获取加密前的明文数据。然后,我们调用 Python 处理数据,并在 Python 中编写 `recv` 函数来接收明文数据,处理后再将处理后的数据返回。最后,我们在 frida 中将处理后的数据写入返回值中,从而将明文数据返回给应用程序。
在 Python 中,我们需要编写 `recv` 函数来接收明文数据,然后处理数据,并返回处理后的数据。以下是 Python 的示例代码:
```python
import frida
# 监听明文数据
def on_message(message, data):
if message['type'] == 'send':
plaintext = message['payload']
# 处理明文数据
decrypted_data = decrypt(plaintext)
# 将处理后的数据返回给 frida
script.post({'payload': decrypted_data})
# 接收明文数据
def recv(plaintext):
# 连接到 frida 并加载脚本
session = frida.attach("your_app_package_name")
script = session.create_script(
"rpc.exports.decrypt = " + decrypt.toString()
)
script.on('message', on_message)
script.load()
# 发送明文数据并等待处理后的数据
return script.exports.decrypt(plaintext)
# 处理明文数据
def decrypt(plaintext):
# TODO: 处理明文数据
return plaintext[::-1]
```
在 Python 中,我们使用 `frida` 模块连接到应用程序,并加载脚本。然后,我们编写 `decrypt` 函数来处理明文数据,并将其导出为 frida 的 `rpc` 接口。接着,我们编写 `on_message` 函数来接收 frida 发送的处理后的数据,并在函数中调用 `script.post` 将数据返回给 frida。最后,我们在 `recv` 函数中发送明文数据,并等待处理后的数据的返回。
需要注意的是,在 Python 中编写的 `decrypt` 函数需要与应用程序中使用的加密算法相匹配,才能正确地处理数据。另外,还需要注意保护数据的机密性和完整性,避免数据泄露或篡改。
阅读全文
相关推荐


















