Frida在windows上的玩法

一、目标

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

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

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

二、步骤

打开心爱的MFC

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

Hook MessageBoxA

1var pMessageBoxA = Module.findExportByName("user32.dll", 'MessageBoxA') 2 3Interceptor.attach(pMessageBoxA, { 4 onEnter: function (args, state) { 5 console.log("[+] MessageBoxA"); 6 console.log("¦- hWnd: " + args[0]); 7 console.log("¦- lpText: " + Memory.readAnsiString(args[1])); 8 console.log("¦- lpCaption: " + Memory.readAnsiString(args[2])); 9 console.log("¦- uType: " + args[3] + "\n"); 10 }, 11 12 onLeave: function (retval, state) { 13 } 14 15});

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

main.png

修改入参和返回值

1console.log("[!] Hooking lpText: 真的对吗"); 2this.lpText = Memory.allocAnsiString("真的对吗"); // Allocate new heap ANSI string 3args[1] = this.lpText; // Replace lpText pointer

在跑一下,真的对吗?

modify.png

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

1console.log("retval: " + retval.toInt32()); 2 3retval.replace(0); 4console.log("retval modify: " + retval.toInt32());

主动调用Windows Api

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

1var pMessageBoxW = Module.findExportByName("user32.dll", 'MessageBoxA') 2var lpText = Memory.allocAnsiString("I'm New MessageBox"); 3var funMsgBox = new NativeFunction(pMessageBoxW, 'uint32',['uint32','pointer','pointer','uint32']); 4 5// 调用 6funMsgBox(0,ptr(lpText),ptr(lpText),0);

完美搞定~

msgbox.png

启动命令

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

1frida C:\Users\35085\Desktop\demo\fridawin.exe -l nt.js --no-pause // spawn 模式 2frida *fridawin* -l nt.js // attach模式

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

三、总结

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

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

ffshow.jpeg

朕岂可亲系草鞋之绳

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

IOS 某电商App签名算法解析(二) Frida RPC调用

一、目标Android下用frida来做rpc调用计算签名,我们已经玩的很熟练了。今天介绍在IOS下的玩法。要点如下:参数类型确认NSDictionaryNSArray等ObjectC对象的构造和复制ObjectC类方法和对象方法的调用附送福利,ObjectC的nil参数如何构造二、步骤参考Android下的玩法参照某段子App协议分

JS 苹果手机日期显示NaN问题

问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl