前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Frida在windows上的玩法

Frida在windows上的玩法

原创
作者头像
奋飞安全
修改2021-06-10 12:05:41
修改2021-06-10 12:05:41
2.6K0
举报
文章被收录于专栏:奋飞安全奋飞安全

一、目标

frida玩了很久,andriod和ios下都玩的不错。不过飞哥其实是混windows出道的,那frida能不能分析winPE呢?

今天介绍下Windows下的玩法,要点如下:

  • Hook Windows Api
  • 修改参数和返回值
  • 主动调用Windows Api

二、步骤

打开心爱的MFC

写个demo小程序,密码是 1234 ,输入正确提示 "密码正确"。

Hook MessageBoxA

代码语言:txt
复制
var pMessageBoxA = Module.findExportByName("user32.dll", 'MessageBoxA')

Interceptor.attach(pMessageBoxA, {
    onEnter: function (args, state) {
        console.log("[+] MessageBoxA");
        console.log("¦- hWnd: " + args[0]);
        console.log("¦- lpText: " + Memory.readAnsiString(args[1]));     
        console.log("¦- lpCaption: " + Memory.readAnsiString(args[2]));    
        console.log("¦- uType: " + args[3] + "\n");
    },
    
    onLeave: function (retval, state) {
    }

});

迫不及待了,好久没有玩windows,跑一下,我们输入 "1234"

main.png
main.png

修改入参和返回值

代码语言:txt
复制
console.log("[!] Hooking lpText: 真的对吗");
this.lpText = Memory.allocAnsiString("真的对吗"); // Allocate new heap ANSI string
args[1] = this.lpText; // Replace lpText pointer

在跑一下,真的对吗?

modify.png
modify.png

修改返回值就比较简单了,这个例子修改返回值也没啥用。

代码语言:txt
复制
console.log("retval: " + retval.toInt32());

retval.replace(0);       
console.log("retval modify: " + retval.toInt32());

主动调用Windows Api

我们来试试如何主动调用 MessageBox,首先按照函数原型,创建对应的 NativeFunction 函数,然后创建好入参,就可以调用了。

代码语言:txt
复制
var pMessageBoxW = Module.findExportByName("user32.dll", 'MessageBoxA')
var lpText = Memory.allocAnsiString("I'm New MessageBox");
var funMsgBox = new NativeFunction(pMessageBoxW, 'uint32',['uint32','pointer','pointer','uint32']);

// 调用
funMsgBox(0,ptr(lpText),ptr(lpText),0);

完美搞定~

msgbox.png
msgbox.png

启动命令

最后说一下启动的命令,因为一开始我也犯难,习惯了启动Android和Ios App了,不知道如何启动 winPE了。

代码语言:txt
复制
frida C:\Users\35085\Desktop\demo\fridawin.exe -l nt.js --no-pause		// spawn 模式
frida *fridawin* -l nt.js		// attach模式

其实都差不多,跨平台工具的好处是,经验可以复用。

三、总结

Windows其实更好玩,只是时代变了,不过就像《神鞭》里说的, 辫子剪了,神留着,一变还是绝活

frida里面的数据类型和各个平台下的类型对应关系要熟练掌握。

ffshow.jpeg
ffshow.jpeg

朕岂可亲系草鞋之绳

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、目标
  • 二、步骤
    • 打开心爱的MFC
    • Hook MessageBoxA
    • 修改入参和返回值
    • 主动调用Windows Api
    • 启动命令
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档