反彙編

把機器語言轉換為彙編語言代碼

徠反彙編(Disassembly):把目標代碼轉為彙編代碼的過程,也可以說是把機器語言轉換為彙編語言代碼、低級轉高級的意思,常用於軟體破解(例如找到它是如何註冊的,從而解出它的註冊碼或者編寫註冊機)、外掛技術、病毒分析、逆向工程、軟體漢化等領域。學習和理解反彙編語言對軟體調試、漏洞分析、OS的內核原理及理解高級語言代碼都有相當大的幫助,在此過程中我們可以領悟到軟體作者的編程思想。總之一句話:軟體一切神秘的運行機制全在反彙編代碼裡面。

編程原理


通常,編寫程序是利用高級語言如C,C++,Delphi等高級語言進行編程的,然後再經過編譯程序生成可以被計算機系統直接執行的文件(機器語言)。反彙編即是指將這些執行文件反編譯還原成彙編語言或其他語言。但通常反編譯出來的程序與原程序會存在些許不同,雖然執行效果相同,但程序代碼會發生很大的變化,要讀懂反彙編需要有紮實的高級語言編寫功底和彙編功底。

作用及方式


作用

有許多程序可以進行逆向操作即反編譯以求修改,例如Flash的文件生成的SWF文件,可以被反彙編成Flash原碼,但可以發現與原程序代碼發生了很大變化。
目前網路上的許多“免費軟體”,PSP PS NDS遊戲機的破解和蘋果iOS系統的越獄都跟反彙編息息相關。

靜態反彙編

反彙編
反彙編
靜態反彙編是從反彙編出來的程序清單上分析,從提示信息入手進行分析。目前,大多數軟體在設計時,都採用了人機對話方式。所謂人機對話,即在軟體運行過程中,需要由用戶選擇的地方,軟體即顯示相應的提示信息,並等待用戶按鍵選擇。而在執行完某一段程序之後,便顯示一串提示信息,以反映該段程序運行后的狀態,是正常運行,還是出現錯誤,或者提示用戶進行下一步工作的幫助信息。為此,如果我們對靜態反彙編出來的程序清單進行閱讀,可了解軟體的編程思路,以便順利破解該軟體,也就是我們常說的破解版即盜版。反彙編亦是外掛設計最重要的環節,可以說沒有反彙編就沒有外掛。常用的靜態分析工具是W32DASM、PEiD、FileInfo、HexRays Ida和HIEW等。

工具


反徠彙編工具如:OD、IDA Pro、radare2、DEBUG、C32等。
反彙編可以通過反彙編的一些軟體實現,比如DEBUG就能實現反彙編,當DEBUG文件位置設置為-u時,即可實現反彙編。而使用OD實現反彙編時,殺毒軟體可能會報告有病毒與木馬產生,此時排除即可,且使用OD需要有紮實的基礎才能看懂。