python hook教程_抖音数据采集教程,详解Hook框架frida,让你在逆向工作中效率成倍提升!...

本文详细介绍了使用Python库frida进行动态二进制插桩的技术,包括frida的基本概念、安装过程、常用工具以及在Android设备上的实战应用,如钩取函数、模拟网络请求以实现微信抢红包插件的制作。通过学习,读者能了解如何利用frida提升逆向工程的效率。
摘要由CSDN通过智能技术生成

免责声明:本文档仅供学习与参考,请勿用于非法用途!否则一切后果自负。

一、frida简介frida是一款基于python + java 的hook框架,可运行在androidioslinuxwinosx等各平台,主要使用动态二进制插桩技术。本期“安仔课堂”,ISEC实验室为大家详解frida,认真读完这篇文章会让你在逆向工作中效率成倍提升哦!45360284eadd4a510cd89ad11ce33001.png1、插桩技术插桩技术是指将额外的代码注入程序中以收集运行时的信息,可分为两种:(1)源代码插桩[Source Code Instrumentation(SCI)]:额外代码注入到程序源代码中。

(2)二进制插桩(Binary Instrumentation):额外代码注入到二进制可执行文件中。

●静态二进制插桩[Static Binary Instrumentation(SBI)]:在程序执行前插入额外的代码和数据,生成一个永久改变的可执行文件。

●动态二进制插桩[Dynamic Binary Instrumentation(DBI)]:在程序运行时实时地插入额外代码和数据,对可执行文件没有任何永久改变。2、你能用DBI做些什么呢(1)访问进程的内存

(2)在应用程序运行时覆盖一些功能

(3)从导入的类中调用函数

(4)在堆上查找对象实例并使用这些对象实例

(5)Hook,跟踪和拦截函数等等二、frida的安装今天我们用到的frida框架分为两部分:一部分是运行在系统上的交互工具frida CLI; 另一部分是运行在目标机器上的代码注入工具 frida-server。1、frida CLI环境要求:

●系统环境 - Windows, macOS, or GNU/Linux

●Python – 最新的3.x版本

通过 pip 安装frida

c05bd1b0701879c89ad5060967b118ce.png

图1

说明:

(1) 通过pip安装的frida是可以跟python绑定的; 另外frida现在也已经有了跟nodeJs绑定的版本, 因此也可以直接通过 npm 进行安装。

(2) frida CLI是安装的frida的其中一个工具,也是最常用的一个工具。2、frida serverfrida-server需要我们单独下载,在 frida项目的github上可以直接下载对应系统已经编译好的frida server

4bd47e1286c64eb2eb337cc11bccf46b.png

图2

我们需要下载的文件名的格式是: frida-server-(version)-(platform)-(cpu).xz

我试验的手机是nexus6p, cpu为arm64

所以我需要下载的是: frida-server-11.0.13-android-x86_64.xz;注意, frida-server 的版本一定要跟 frida CLI的版本一致。

将下载后的压缩包解压得到frida-server, 然后将该文件推送到Android设备上。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 设置 Windows Hook,可以使用 ctypes 库调用 Windows API。具体步骤如下: 1. 导入 ctypes 库和 Windows API 函数: ```python import ctypes # 导入 Windows API 函数 user32 = ctypes.WinDLL('user32') kernel32 = ctypes.WinDLL('kernel32') ``` 2. 定义 Windows Hook 回调函数: ```python # 定义回调函数类型 HOOKPROC = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.wintypes.WPARAM, ctypes.wintypes.LPARAM) # 定义回调函数 def hook_callback(nCode, wParam, lParam): # 处理钩子消息 return user32.CallNextHookEx(hook_id, nCode, wParam, lParam) ``` 3. 安装 Hook: ```python # 安装 Hook hook_id = user32.SetWindowsHookExW( 13, # WH_KEYBOARD_LL 钩子类型 HOOKPROC(hook_callback), # 回调函数 kernel32.GetModuleHandleW(None), # 模块句柄 0 # 线程 ID,0 表示钩子适用于所有线程 ) ``` 4. 处理消息循环: ```python # 处理消息循环 msg = ctypes.wintypes.MSG() while user32.GetMessageW(ctypes.byref(msg), None, 0, 0) != 0: user32.TranslateMessage(ctypes.byref(msg)) user32.DispatchMessageW(ctypes.byref(msg)) ``` 5. 卸载 Hook: ```python # 卸载 Hook user32.UnhookWindowsHookEx(hook_id) ``` 完整代码示例: ```python import ctypes import ctypes.wintypes # 导入 Windows API 函数 user32 = ctypes.WinDLL('user32') kernel32 = ctypes.WinDLL('kernel32') # 定义回调函数类型 HOOKPROC = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.wintypes.WPARAM, ctypes.wintypes.LPARAM) # 定义回调函数 def hook_callback(nCode, wParam, lParam): # 处理钩子消息 return user32.CallNextHookEx(hook_id, nCode, wParam, lParam) # 安装 Hook hook_id = user32.SetWindowsHookExW( 13, # WH_KEYBOARD_LL 钩子类型 HOOKPROC(hook_callback), # 回调函数 kernel32.GetModuleHandleW(None), # 模块句柄 0 # 线程 ID,0 表示钩子适用于所有线程 ) # 处理消息循环 msg = ctypes.wintypes.MSG() while user32.GetMessageW(ctypes.byref(msg), None, 0, 0) != 0: user32.TranslateMessage(ctypes.byref(msg)) user32.DispatchMessageW(ctypes.byref(msg)) # 卸载 Hook user32.UnhookWindowsHookEx(hook_id) ``` 注意:Windows Hook 需要在 Windows 操作系统上运行,而且需要管理员权限。同时,Hook 回调函数的处理时间应该尽量短,以免影响系统性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值