C++程序反編譯筆記(13) 資源丟失
????之前用簡(jiǎn)單的方法解決了字符串資源丟失的問題.
????可執(zhí)行文件中還有很多其他的資源, 比如位圖, 音頻, 對(duì)話框等.?
????字符串資源十分簡(jiǎn)單, 可以在代碼中直接用字符串常量代替原來的LoadString函數(shù)調(diào)用. 其他資源就不好辦了, 因?yàn)槠渌Y源的數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜, 不清楚內(nèi)部數(shù)據(jù)結(jié)構(gòu)的話, 資源就相當(dāng)于一個(gè)很長(zhǎng)的字節(jié)數(shù)組.?
????當(dāng)然也可以用字節(jié)數(shù)組常量來替換原來的資源, 但是最方便的辦法還是 : 從可執(zhí)行文件中導(dǎo)出資源, 然后添加到項(xiàng)目中.

使用Resource Hacker導(dǎo)出資源
????

????使用Resource Hacker打開"掃雷.exe" 可以看到, 里面有很多資源. 點(diǎn)擊菜單"Action" -> "Save ALL Resources to an RC file ...", 然后選擇保存位置,?Resource Hacker將導(dǎo)出所有資源并生成一個(gè) xxx.rc 文件.

????導(dǎo)出的資源文件如下, 主要是 "掃雷.rc" :
????


導(dǎo)入資源到項(xiàng)目中
????rc文件就是Visual Studio項(xiàng)目資源描述文件, 可以直接把它添加到項(xiàng)目中(只需要添加rc文件就可以了, 其他資源文件被包含在了rc文件中).
????但是Resource Hacker導(dǎo)出的rc文件有點(diǎn)問題, Visual Studio會(huì)報(bào)錯(cuò). 因此, 我們創(chuàng)建一個(gè)新的rc文件, 然后把導(dǎo)出的rc文件的代碼復(fù)制過來. 出現(xiàn)問題的原因應(yīng)該是rc文件版本不同, 代碼格式做了一些修改.

????接下來把導(dǎo)出的資源文件復(fù)制到 Resource.rc 文件同級(jí)文件夾下, 并將 "掃雷.rc" 除第一行外的內(nèi)容全部復(fù)制, 粘貼到 Resource.rc 中的如下位置:


修復(fù)rc文件錯(cuò)誤
????選中Resource.rc文件, 右鍵 -> 編譯, 發(fā)現(xiàn)還會(huì)報(bào)錯(cuò) "FW_NORMAL" 及 "FALSE" 未定義, 把所有FW_NORMAL替換為400, FALSE 替換為0 就行了.
????這是在定義字體, 數(shù)值是多少不太重要, 具有可以參考RC文件的格式.
????

運(yùn)行程序
????啟動(dòng)項(xiàng)目, 可以看到如下界面:

????已經(jīng)有掃雷的輪廓了, 但是有點(diǎn)亂碼的感覺, 還需要繼續(xù)修復(fù).