反編譯記事本(1) 初始配置
????項(xiàng)目地址 :?https://gitee.com/chenguc/notepad-decompilation .
????嘗試反編譯一下Windodws XP 的記事本程序, 目標(biāo)是構(gòu)建出可以編譯運(yùn)行的C++ Win32項(xiàng)目. 并且運(yùn)行結(jié)果盡可能與源程序接近(100%還原源代碼是不可能的!).
????約 90% 的反編譯工作用IDA Pro完成, 其余工作手動(dòng)完成.

IDA Pro導(dǎo)出C代碼
????之前掃雷的文章也介紹了怎么用IDA Pro導(dǎo)出反編譯的偽代碼, 這里就簡(jiǎn)單說(shuō)明一下了, IDA Pro版本7.5 . 用IDA Pro打開Notepad.exe后, 點(diǎn)擊菜單 File -> Produce file -> Create C file... , 或者快捷鍵 Ctrl + F5, 導(dǎo)出C代碼文件 main.cpp.?
????

????一共5000多行, 掃雷剛開始的時(shí)候是2800多行,?看來(lái)記事本更復(fù)雜一些.

Visual Studio創(chuàng)建C++項(xiàng)目
????Visual Studio版本 2013. 點(diǎn)擊菜單? 文件 -> 新建 -> 項(xiàng)目, 選擇C++ Win32項(xiàng)目, 命名為Notepad, 并選擇空項(xiàng)目創(chuàng)建.
????將導(dǎo)出的main.cpp 復(fù)制到項(xiàng)目下并添加到項(xiàng)目中. 打開 main.cpp, 從頭紅到尾, 不用擔(dān)心, 正?,F(xiàn)象!

????

Resource Hacker導(dǎo)出資源文件
????Resource Hacker 打開 Notepad.exe, 點(diǎn)擊菜單 Action -> XxXxX 導(dǎo)出資源到NOTEPAD.rc文件中.

????Visual Studio新建資源文件notepad.rc, 將NOTEPAD.rc的代碼復(fù)制到notepad.rc中. 這么做, 主要是因?yàn)镽esource Hacker導(dǎo)出的rc文件, Visual Studio識(shí)別不了.

修正資源文件錯(cuò)誤
????Visual Studio中右鍵? notepad.rc , 點(diǎn)擊 "編譯" 菜單, 發(fā)現(xiàn)?FW_NOMAL, FALSE 不認(rèn)識(shí), 將它們分別替換為 400 和 0, 具體原理看 rc 文件的語(yǔ)法了. 我只知道?FW_NOMAL 是字體大小, FALSE 對(duì)應(yīng)的值為0.
????VK_N 這些按鍵宏也識(shí)別不了, 因?yàn)閣inuser.h中沒有定義, 只好自定定義了. 這些宏實(shí)際上就是ASCII碼中對(duì)應(yīng)字母的值.
????

????再次編譯 rc 文件, 通過(guò)了.