欢迎光临散文网 会员登陆 & 注册

Frida Hook

2020-07-26 12:52 作者:无情剑客Burning  | 我要投稿

声明: 谢绝一切形式的转载。 @[toc]

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。

  1. pip install frida-tools

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

具体可参见https://blog.csdn.net/helloworlddm/article/details/105068941。

Frida架构

Windows

开启一个可以注入的进程

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

编写代码

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

  1. import frida


  2. def on_message(message, data):

  3.    print("[on_message] message:", message, "data:", data)


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


  5. script = session.create_script("""

  6. rpc.exports.enumerateModules = function () {

  7.  return Process.enumerateModules();

  8. };

  9. """)

  10. script.on("message", on_message)

  11. script.load()


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

运行,可以看出notepad.exe使用了什么模块。

Linux

前提

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

  1. sudo sysctl kernel.yama.ptrace_scope=0

开启一个可以注入的进程

本文开启crackerMe00,如下所示:

编写代码

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

  1. import frida


  2. def on_message(message, data):

  3.    print("[on_message] message:", message, "data:", data)


  4. session = frida.attach("crackerMe00")


  5. script = session.create_script("""

  6. rpc.exports.enumerateModules = function () {

  7.  return Process.enumerateModules();

  8. };

  9. """)

  10. script.on("message", on_message)

  11. script.load()


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

运行,可以看出crackerMe00使用了哪些模块。

Android

前提

手机需要ROOT,不ROOT也是可以的,需要该一些配置文件。后续文章会说。将frida-server推送到手机中。运行./frida-server

查看进程信息 frida-ps-U

编写代码

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

  1. import frida


  2. def on_message(message, data):

  3.    print("[on_message] message:", message, "data:", data)


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


  5. script = session.create_script("""

  6. rpc.exports.enumerateModules = function () {

  7.  return Process.enumerateModules();

  8. };

  9. """)

  10. script.on("message", on_message)

  11. script.load()


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

运行,结果如下:

公众号

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



Frida Hook的评论 (共 条)

分享到微博请遵守国家法律