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 討論下。
關注微信公衆號: 奮飛安全,最新技術乾貨實時推送