C++程序反編譯筆記
????任何可執(zhí)行程序都可以反編譯成C++源代碼,因為C++支持內嵌匯編代碼。
????目前沒有全自動的反編譯軟件,只能半自動地反編譯。
? ? 可執(zhí)行文件中包括的數(shù)據(jù)有全部變量,代碼,資源(光標,圖標,位圖等)。
????可行的反編譯過程是:
(1)將資源導出到文件,將代碼反匯編得到很多個匯編函數(shù),全局變量全部導出;
(2)借助ida pro,ghidra等軟件將匯編函數(shù)反編譯成C語言的函數(shù)的偽代碼,注:這些軟件反編譯的結果不是100%準確的,而且代碼流程很亂(包含很多goto語句);
(3)在Visual Studio中創(chuàng)建C++項目,將導出的資源,全局變量,函數(shù)偽代碼添加進來,包含必要的頭文件,解決所有的編譯錯誤(絕大多數(shù)的編譯錯誤都是類型錯誤,強制轉換就行了,強制轉換99.99%的情況都不會導致邏輯錯誤),此時已經得到了一個可以編譯的C++項目了;
(4)解決鏈接錯誤,也就是鏈接必要的庫文件,這步很簡單;
(5)解決邏輯錯誤,也就是重構數(shù)據(jù)結構和算法,這一步是最復雜的。必須要理解可執(zhí)行程序里的數(shù)據(jù)結構和算法,相當于去看別人完全沒有注釋的源代碼?。?!也相當于玩一個很復雜的解密游戲!?。?/p>
????至此,反編譯可執(zhí)行程序完畢!
標簽: