python firda hook配置

一、firda 安装

pip install firda -i http://pypi.douban.com/simple/ 
pip install frida-tools -i http://pypi.douban.com/simple/ 

二、安装木木模拟器

官网: http://mumu.163.com/
开启root
在这里插入图片描述
在这里插入图片描述
打开模拟器USB调试
在开发者选项中。

在这里插入图片描述
安装RE文件管理器
直接搜索进行下载,下载后打开给予root权限

在这里插入图片描述

下载frida服务端-Android

下载frida-server文件
到 https://github.com/frida/frida/releases 下载相应的版本(版本一定对应firda版本)
移动文件到tmp下
下载完成之后,如果你使用的本地下载,则把这个文件放入木木共享文件夹中解压,重命名为 frida-server

**
**
然后打开 RE文件管理器,使用全局搜索,找到这个文件的位置.
在这里插入图片描述
接着把 frida-server文件复制到 /data/local/tmp 目录下.
在这里插入图片描述

使用adb连接mumu模拟器

先找到模拟器的安装目录,然后进入 emulator\nemu\vmonitor\bin目录
在这里插入图片描述

配置adb
将adb_server.exe 重命名为adb.exe
配置全局变量
在这里插入图片描述
1、打开cmd,输入 adb connect 127.0.0.1:7555
2、adb shell 进入交互环境
3、cd /data/local/tmp
4、chmod 777 frida-server 设置权限
5、./frida-server 启动服务
6、adb forward tcp:27042 tcp:27042 开放访问端口
7、打开新cmd,输入frida-ps -U,有信息则服务启动成功

python调试

import frida
import sys

#获取设备信息
rdev = frida.get_remote_device()

#获取在前台运行的APP
front_app = rdev.get_frontmost_application()
print (front_app)

案例

import frida
rdev = frida.get_remote_device()
#获取在前台运行的APP
front_app = rdev.get_frontmost_application()
print (front_app)
import re
res = re.findall(r"pid=(.*?),",str(front_app))
# 枚举进程中加载指定模块中的导出函数
session = rdev.attach(int(res[0]))   # 也可以使用attach(pid)的方式
jscode = """
Java.perform(function(){
    var temp = Java.use('com.xunyou.libservice.server.impl.ServerApi');
    var ServerParams = Java.use('com.xunyou.libservice.server.impl.ServerParams');
        temp.e.overload('org.json.JSONObject').implementation = function(a){
            var result = this.e(a);  
            send(hasmap_parse(result));
            return result;
            }

    function hasmap_parse(result){
     var test = result.toString();
            var keyset = result.keySet();
            var it = keyset.iterator();
            while(it.hasNext()){
                var keystr = it.next().toString();
                var valuestr = result.get(keystr).toString();
                test +=keystr+":"+ valuestr+";";
            }
        
        return test;
    }
});
"""

script = session.create_script(jscode)
def on_message(message, data):
    print(message)
script.on('message', on_message)
script.load()
sys.stdin.read()

脱壳

使用frida_dexdump 强制脱壳,可脱壳已加固
下载地址

使用
在模拟器上运行app后,执行 python main.py
脱壳后的文件将保存到当前目录
在这里插入图片描述

查看

使用jadx-gui查看源代码(拖进去即可)
在这里插入图片描述

### 如何使用 PythonFrida 进行 Hook 操作 为了实现这一目标,通常需要创建两个主要文件:一个是 JavaScript 文件 (`hook.js`) 来定义具体的 Hook 行为;另一个是 Python 脚本 (`hook.py`), 它负责自动化整个注入过程并控制 Hook 的生命周期。 #### 创建 `hook.js` 此文件包含了实际要挂钩的目标函数以及想要执行的操作。下面是一个简单的例子: ```javascript // hook.js Java.perform(function () { var MainActivity = Java.use('com.example.targetapp.MainActivity'); // 对特定方法进行Hook MainActivity.someMethod.implementation = function (arg1, arg2) { console.log('someMethod called with arguments:', arg1, arg2); // 执行原始的方法体 return this.someMethod(arg1, arg2); }; }); ``` 这段代码展示了如何拦截指定应用程序内的某个具体活动中的方法调用,并打印传入参数至控制台[^2]。 #### 编写 `hook.py` 该 Python 脚本用来加载上述编写的 JS 钩子脚本并与目标应用交互。这里给出一段基本框架作为起点: ```python import frida import sys def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) elif message['type'] == 'error': print("[!] {0}".format(message['stack'])) # 加载设备上的进程 device = frida.get_usb_device(timeout=10) # 启动目标APP(如果未运行) pid = device.spawn(["com.example.targetapp"]) session = device.attach(pid) with open("./hook.js", "r") as f: script_content = f.read() script = session.create_script(script_content) script.on("message", on_message) print('[+] Script loaded.') try: script.load() except Exception as e: print(f"[!] Error loading script: {e}") # 继续程序执行 device.resume(pid) sys.stdin.read() # Keep the application alive to maintain hooks. ``` 这个 Python 程序首先连接到 USB 设备上正在运行的应用实例,接着读取本地保存的钩子脚本内容并通过 FrIDA API 将其发送给远程进程,在成功附加之后保持监听来自被监控对象的消息直到手动终止[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值