【frida】 00_简单介绍和使用

🛫 系列文章导航

Android系列教程

windows系列

实战

导读

frida是Greasemonkey公司(该公司的网红产品网络神器油猴子,可以通过“油猴脚本”,自由定制网页,实现你想要的各种功能)开发的一款跨平台逆向全家桶动态代码检测工具。
它允许您将JavaScript或您自己的库的片段注入Windows,macOS,GNU / Linux,iOS,Android和QNX上的原生应用程序。 Frida还为您提供了一些基于Frida API构建的简单工具。 这些可以根据您的需要进行调整,或被作为使用API的示例。

安装

  • 安装最新版本的Python3.x,本教程使用的是Python3.7.1的64位版本(再之前的版本的确会有问题)。
  • 执行指令pip install frida-tools安装即可。

frida安装后Scripts目录内容如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YGBvwOYq-1646190673971)(upload/attach/202001/93_QPEB3Q9GYGG8BXC.png)]

frida-tools工具使用

这些 Frida 工具和可执行文件在应用程序分析和安全研究中具有广泛的应用。以下是它们的简要示例用法:

  1. frida-ls-devices.exe:
    示例用法:frida-ls-devices.exe
    说明:用于列出当前连接到计算机的所有设备的详细信息,包括设备 ID、类型、名称等。
    在这里插入图片描述

  2. frida-ps.exe:
    示例用法:frida-ps.exe -U
    说明:用于列出指定设备上正在运行的进程的信息,包括进程 ID、名称、PID 等。
    在这里插入图片描述

  3. frida.exe:
    示例用法:frida.exe -U -l my_script.js com.yemao.demo
    说明:Frida 的主要执行文件,用于加载和执行 Frida 脚本,与目标应用程序进行交互等。

  4. frida-trace.exe:
    示例用法:frida-trace.exe -U -i “open*” com.yemao.demo
    说明:用于在目标应用程序中跟踪特定函数的调用信息,帮助分析函数的调用情况。

  5. frida-compile.exe:
    示例用法:frida-compile.exe -o compiled_script.js original_script.js
    说明:用于将原始的 JavaScript 脚本编译成可执行的 Frida 脚本,以便在目标应用程序内执行。

  6. frida-create.exe:
    示例用法:frida-create [options] -t agent|cmodule
    说明:用于创建一个新的 Frida 脚本模板文件,可以选择不同的语言和模式进行创建。

  7. frida-ls.exe:
    示例用法:frida-ls [options] [FILE]…
    说明:用于列出当前连接到计算机的所有设备的基本信息,方便查看当前可用的设备列表。
    在这里插入图片描述

  8. frida-itrace.exe:
    示例用法:frida-itrace.exe -U com.yemao.demo
    说明:用于在 iOS 设备上进行跟踪、调试和修改应用程序,提供类似于 strace 的功能。

  9. frida-kill.exe:
    示例用法:frida-kill.exe -f com.yemao.demo
    说明:用于终止指定应用程序的 Frida 进程,方便重新启动和调试。

  10. frida-discover.exe:
    示例用法:frida-discover.exe -U com.yemao.demo
    说明:用于在指定应用程序中自动发现可用的函数或方法,帮助分析应用程序的结构。

实战

一、枚举进程模块

  • 打开notepad.exe。(注意:32位和64位都可以的,frida考虑的还挺全的)
  • 下面脚本保存为enumerate_modules.py,并执行命令python enumerate_modules.py
    import frida

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

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

    script = session.create_script("""'use strict';

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

    print([m["name"] for m in script.exports.enumerate_modules()])
  • 运行结果如下所示:
    ['NOTEPAD.EXE', 'ntdll.dll', 'kernel32.dll', ......]

二、frida-trace直接hook函数recv*

frida-trace是一个动态跟踪函数调用的工具。官网使用twitter程序作为目标程序,国内无法使用,所以我们这里使用python作为目标进程(python程序调用urllib来模拟发包),具体操作如下:

  • 打开python.exe,查看进程id为16196。
  • 执行命令frida-trace -i “recv*” 16196
  • 在python.exe中一次输入import urllibf = urllib.urlopen(‘https://baidu.com’)
  • 执行结果如下图所示:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPIQXLiN-1646190673972)(upload/attach/202001/93_B4S9BG36E2QBWZN.png)]

我们可以看到frida-trace在目录/__handlers__/WS2_32.dll下创建了recv.js和recvfrom.js文件,frida-trace也实现了hook函数recv的功能。

三、hook Qt应用程序打印日志

ps:Qt程序如果不熟悉的,可以不考虑Qt打印日志函数的调用关系。

我们编写个Qt程序,其中点击按钮触发循环打印数字的逻辑。如下面的代码,其使用的是qDebug宏,宏展开是QMessageLogger的一个类,再查看QMessageLogger可以发现内部最终调用了QTextStream类的各种重载操作符<<。

    #define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
    
    void MainWindow::on_pushButton_clicked()
    {
        qDebug() << 9999;
        for(int i = 0; i < 10; ++i)
        {
            qDebug() << i;
        }
    }

查看Qt5Core.dll导出函数,查找QTextStream系列函数,通过demumble解析gcc编译的C++函数,我们发现_ZN11QTextStreamlsEi就是我们要找的函数QTextStream::operator<<(int)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tm0p4dWz-1646190673972)(upload/attach/202001/93_RTK9FE7S9MTFF3D.png)]

启动测试程序Demo.exe。执行命令****frida-trace -i “_ZN11QTextStreamlsEi” Demo.exe**。点击Button按钮,触发函数调用,最终打印出如下内容:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LcFj1GX9-1646190673973)(upload/attach/202001/93_EDYWV27EE2P9EBQ.png)]

总结

  • 方便快捷:frida纯脚本实现hook等操作,免去了编译的问题。
  • 自动分析:frida自动分析可执行文件内容,分析关键api很方便。
  • 支持通配符:frida可以一次执行多个函数hook。
  • 工具丰富:frida全家桶拥有多个工具,如frida-trace等,让分析工作更方便了。

参考资料

**ps:**文章中内容仅用于技术交流,请勿用于违规违法行为。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜猫逐梦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值