全平台HOOK神器

声明: 谢绝一切形式的转载。

Hook

Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。

非常类似于中间人攻击,只不过中间人是钩子,操控的是程序的执行流程。

在不同平台下编写hook代码是一件很痛苦的事情,Windows下,必须要熟悉窗口、消息传递机制的,而在Linux下hook底层的消息还需要重新编写内核模块,在Android平台要Hook动态库文件,要懂得arm汇编。

而Frida的出现,让一切变得简单了,只需要会Python,会JavaScript就能够hook任何想hook的内容。

Frida is so great!

Frida

Frida是一个动态代码检测工具。它允许你将JavaScript代码片段或者你自己的库注入到到Windows、 macOS、GNU/Linux、iOS、Android,、and QNX的本机应用中。Frida还为您提供了一些基于Frida API的简单工具。这些可以按原样使用,也根据您的需要进行调整,或者用作有关如何使用API的示例。

安装

仅需呀一行命令就可以完成安装,当然前提条件是已经已经安装了Python,版本最好是3.x。

pip install frida-tools

网上狠毒文章说使用pip install fridapip install frida-tools 进行安装,但是现在一条命名就够了。如果不嫌麻烦,也可以通过源码进行安装。

具体可参见https://blog.youkuaiyun.com/helloworlddm/article/details/105068941

Frida架构

在这里插入图片描述

Windows
开启一个可以注入的进程

本文使用的是记事本notepad.exe,打开记事本。

编写代码

编写example.py,枚举进程使用的模块。

import frida

def on_message(message, data):
    print("[on_message] message:", message, "data:", data)

session = frida.attach("notepad.exe")

script = session.create_script("""
rpc.exports.enumerateModules = function () {
  return Process.enumerateModules();
};
""")
script.on("message", on_message)
script.load()

print([m["name"] for m in script.exports.enumerate_modules()])

运行,可以看出notepad.exe使用了什么模块。
在这里插入图片描述

Linux
前提

首先需要使用下面的命令 “to enable ptracing non-child processes”

 sudo sysctl kernel.yama.ptrace_scope=0
开启一个可以注入的进程

本文开启crackerMe00,如下所示:
在这里插入图片描述

编写代码

另外开启一个终端, 编写example.py,枚举进程使用的模块。

import frida

def on_message(message, data):
    print("[on_message] message:", message, "data:", data)

session = frida.attach("crackerMe00")

script = session.create_script("""
rpc.exports.enumerateModules = function () {
  return Process.enumerateModules();
};
""")
script.on("message", on_message)
script.load()

print([m["name"] for m in script.exports.enumerate_modules()])

运行,可以看出crackerMe00使用了哪些模块。
在这里插入图片描述

Android
前提

手机需要ROOT,不ROOT也是可以的,需要该一些配置文件。后续文章会说。将frida-server推送到手机中。运行./frida-server
在这里插入图片描述查看进程信息 frida-ps -U
在这里插入图片描述

编写代码

编写example.py,枚举进程使用的模块。

import frida

def on_message(message, data):
    print("[on_message] message:", message, "data:", data)

session = frida.get_usb_device().attach("com.android.chrome")

script = session.create_script("""
rpc.exports.enumerateModules = function () {
  return Process.enumerateModules();
};
""")
script.on("message", on_message)
script.load()

print([m["name"] for m in script.exports.enumerate_modules()])

运行,结果如下:
在这里插入图片描述

公众号

关于Frida有一句很流行的话:没有做不到,只有想不到。打算开一个frida专题,欢迎多多支持。更多内容欢迎关注我的公众号。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helloworddm

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值