frida玩了好久,andriod和ios下都玩的不错。不过飞哥实际上是混windows出道的,那frida能不能分析winPE呢?ios
今天介绍下Windows下的玩法,要点以下:小程序
写个demo小程序,密码是 1234 ,输入正确提示 "密码正确"。windows
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"安全
console.log("[!] Hooking lpText: 真的对吗");
this.lpText = Memory.allocAnsiString("真的对吗"); // Allocate new heap ANSI string
args[1] = this.lpText; // Replace lpText pointer
复制代码
在跑一下,真的对吗?微信
修改返回值就比较简单了,这个例子修改返回值也没啥用。markdown
console.log("retval: " + retval.toInt32());
retval.replace(0);
console.log("retval modify: " + retval.toInt32());
复制代码
咱们来试试如何主动调用 MessageBox,首先按照函数原型,建立对应的 NativeFunction 函数,而后建立好入参,就能够调用了。函数
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);
复制代码
完美搞定~工具
最后说一下启动的命令,由于一开始我也犯难,习惯了启动Android和Ios App了,不知道如何启动 winPE了。学习
frida C:\Users\35085\Desktop\demo\fridawin.exe -l nt.js --no-pause // spawn 模式
frida *fridawin* -l nt.js // attach模式
复制代码
其实都差很少,跨平台工具的好处是,经验能够复用。ui
Windows其实更好玩,只是时代变了,不过就像《神鞭》里说的, 辫子剪了,神留着,一变仍是绝活
frida里面的数据类型和各个平台下的类型对应关系要熟练掌握。
朕岂可亲系草鞋之绳
TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,若是有人利用本文技术去进行非法商业获取利益带来的法律责任都是操做者本身承担,和本文以及做者不要紧,本文涉及到的代码项目能够去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一块儿学习探讨技术。有问题能够加我wx: fenfei331 讨论下。
关注微信公众号: 奋飞安全,最新技术干货实时推送