首页
社区
课程
招聘
[原创] [frida] 00_简单介绍和使用
发表于: 2019-3-11 18:47 7613

[原创] [frida] 00_简单介绍和使用

2019-3-11 18:47
7613

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

frida安装后Scripts目录内容如下:

图片描述

下面脚本保存为enumerate_modules.py,并执行命令python enumerate_modules.py

import frida

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

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

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

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

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

图片描述

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

hook函数qDebug效果图

九分出品,欢迎吐槽。更多精彩,可以前往博客地址

 
 
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-1-31 15:45 被kanxue编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (3)
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2019-3-11 19:09
0
雪    币: 8930
活跃值: (5152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
3
感谢分享,收藏
2019-3-11 19:22
0
雪    币: 27
活跃值: (1698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个主要介绍win下的qt,代码格式没有了
2019-3-16 16:09
0
游客
登录 | 注册 方可回帖
返回
//