雷电模拟器上使用第一个frida(三)简单的使用实例及python编写hook代码(python3.8.10)

经过前两篇

雷电模拟器上使用第一个frida(一)之安装-CSDN博客雷电模拟器上使用第一个frida(二)之su超级权限-CSDN博客

本篇开始记录如何使用frida进行hook。

一、先让手机模拟器端的frida server运行起来

虽然是让手机模拟器端的firda server运行起来,但操作还是在pc端,使用adb来操作。

使用adb连接模拟器,进入frida-server-14.2.18-android-x86_64所在的/data/local/tmp路径,

执行./frida-server-14.2.18-android-x86_64即可。

似乎没有什么反应,其实是服务端已经在运行。运行之后,当前cmd窗口不能关闭。

第一个cmd里的整个命令如下(用于操作手机模拟器):

cmd
d:
cd D:/leidian/LDPlayer4/
adb.exe kill-server
adb connect 127.0.0.1:5555 雷电模拟器的默认端口是5555,(逍遥模拟器端口:21503)
adb devices
adb.exe kill-server(雷电模拟器很特殊,需要多执行一次kill-server)
adb devices


adb shell
getprop ro.product.cpu.abi
su
cd /data/local/tmp
ls
./frida-server-14.2.18-android-x86_64

二、pc端设置端口转发

再开一个cmd,第二个cmd执行下面命令,实现端口转发:

d:
cd D:/leidian/LDPlayer4
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043

三、pc端编写python代码(本机环境,win10 64,python3.10.4

先写一段最简单的代码

import frida

rdev = frida.get_remote_device()
front_app = rdev.get_frontmost_application()
print(front_app)

结果一上来就报错了

参考了frida安装配置教程_安装指定版本frida-CSDN博客 

应该是python版本过高的原因。本机python版本为3.10.4。

那么,就按要求再安装一个Python3.8.10的环境。

 Download Python | Python.org

安装完成后,将python3.exe改为python38.exe,pip3.exe改为pip38.exe。

路径:

cd C:\Users\LC\AppData\Local\Programs\Python\Python38

python38

cd C:\Users\LC\AppData\Local\Programs\Python\Python38\Scripts

pip38.exe

不过pip38.exe -V报错: 

参考“Fatal error in launcher: Unable to create process using”解决办法-CSDN博客 

步骤1:到scripts目录,将原来的pip.exe文件删掉
步骤2:cmd窗口执行:python38 -m pip install -U pip

执行完毕后,会在scripts目录下,重新生成pip pip3 等文件
(之前的pipxx都不可用)
新生成的都是可用的,随便一个改成pip38.exe



在python3.8.10的环境下(路径C:\Users\LC\AppData\Local\Programs\Python\Python38\Scripts)安装frida:

pip38 install frida==14.2.18
pip38 install frida-tools==9.2.5

在pycharm里新增python3.8.10编译器

打开项目,运行代码之前选择3.8.10:



完成上述工作后,重新测试frida,成功。

 

代码:

import frida

#得到android手机当前最前端Activity所在的进程
rdev = frida.get_remote_device()
front_app = rdev.get_frontmost_application()
print(front_app)

#枚举android手机所有的进程
rdev = frida.get_remote_device()
processes = rdev.enumerate_processes()
for process in processes:
    print (process)

最后,在python3.8.10的C:\Users\LC\AppData\Local\Programs\Python\Python38\Scripts目录中,多出了一些关于frida操作的exe文件,可以在cmd下运行,显示手机模拟器的数据。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,首先需要在 Android 设备上安装 fridafrida-tools,然后在 Python 中安装 fridafrida-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 中,我们可以将获取到的函数返回值进行处理,例如写入文件或执行其他操作。由于本人不能获取您的具体要求,因此无法提供更具体的代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值