如何反編譯exe文件
反編譯exe文件基本上是不可能的,因?yàn)榉淳幾g過程由很多因素會干擾,反編譯過程:
1、檢測程序時候加殼了,如果加殼就必須先去殼。
2、去殼后需要猜測程序員采用的是什么編程語言,編程語言有:java/c/c++/c#/vb/VC++等等。
3、猜測到程序員使用的語言后根據(jù)編程語言進(jìn)行匯編,匯編需要考慮到語言中的語法問題,即使是同種語言,一種命令有多種說法,匯編成功率在20%左右。
4、匯編成功后基本就已經(jīng)到反編譯的頂端了,要從匯編程序翻譯成源碼可能性為1%。
exe文件能不能反編譯?
本身就是不能反編譯的,請看:程序:#includestdio.hvoidmain()
和程序:#includestdio.hvoidmain()
反匯編各得5071行,沒有區(qū)分。如果編譯時用了/O2,再反匯編回來,得到行數(shù)不同。要想反編譯成原文件,明顯不可能。除非開發(fā)1個新編譯器,把源程序用注解方式寫進(jìn)去,就可以反編譯回來。
EXE文件反編譯成源碼
EXE文件可以通過步驟來反編譯成源碼,具體步驟如下:
1、在百度上搜索下載反編譯工具ILSpy,ILspy是一個開源的.net反編譯軟件,使用十分方便。解壓后如圖,雙擊.exe文件打開解壓工具。
2、選擇file,點(diǎn)擊“打開”,選擇要反編譯的文件,點(diǎn)擊“打開”,就可以看到源碼了!
3、如果想把源碼保存下來,自己在源碼的基礎(chǔ)上修改,點(diǎn)擊"file"下的“Save code...”,保存即可,保存完的文件如圖
4、如需用vs打開反編譯后的源碼,只需要打開這個.csproj文件即可,其中VS為Microsoft Visual Studio是VS的全稱。VS是美國微軟公司的開發(fā)工具包系列產(chǎn)品。
擴(kuò)展資料:
反編譯也稱為計算機(jī)軟件還原工程,是指通過對他人軟件的目標(biāo)程序(比如可執(zhí)行程序)進(jìn)行“逆向分析、研究”工作,以推導(dǎo)出他人的軟件產(chǎn)品所使用的思路、原理、結(jié)構(gòu)、算法、處理過程、運(yùn)行方法等設(shè)計要素,某些特定情況下可能推導(dǎo)出源代碼。
exe是編譯好的程序文件 要看結(jié)構(gòu)就得反編譯 但是通常不能把可執(zhí)行文件變成高級語言源代碼,只能轉(zhuǎn)換成匯編程序。 所以要要看結(jié)構(gòu)不止要會反編譯 還得精通匯編語言。
如何反編譯EXE文件
Windows軟件開發(fā)工具包(SDK)提供一個叫做 DUMPBIN 的極有用的工具,它有許多有助編程分析的功能. 反編譯只是其功能之一.
反編譯命令格式:
dumpbin /DISASM 你的文件.exe
DUMPBIN 詳細(xì)用法參考:
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B121460
上述網(wǎng)頁談的是Windows NT, 其實(shí)也實(shí)用于其它視窗系統(tǒng).
反編譯exe文件就是把exe還原為匯編?
首先了解一下概念,exe程序只是WIN下PE格式的可執(zhí)行文件的一種,而所謂的計算機(jī)執(zhí)行的代碼只是一串
二進(jìn)制數(shù)
,跟數(shù)據(jù)沒區(qū)別,當(dāng)CS,EIP指向哪,哪里就是程序,而匯編語言之所以叫最底層的語言,是因?yàn)椋?br />匯編的每一個語法,都應(yīng)對了一串二進(jìn)制的指令,這也就是
反匯編
的原理,所以
NO1.一、
反編譯
exe程序
就是
把
exe
還原為匯編語言嗎?,這句話,不能叫還原,應(yīng)該叫解釋,“解釋”的東西,沒還原的那么逼真,比如,在匯編
源程序
中所有的標(biāo)號和注釋,進(jìn)行編譯后,變成二進(jìn)制可執(zhí)行文件后,在反匯編,標(biāo)號就變成數(shù)字了,而注釋更是沒了.....
二、除了
還原為
匯編語言,還能
反編譯為
其他
高級語言
嗎?不能,高級語言的語法是建立在大量的計算機(jī)
二進(jìn)制代碼
之上的,比如你C語言隨便調(diào)用一個子函數(shù),到了二進(jìn)制中,他是先壓棧,參數(shù)(編譯后參數(shù)從右往左壓,每個語言還不一樣),然后就是call
子函數(shù),子函數(shù)運(yùn)行后,他還要清理堆棧,所以你一個句簡單的高級語言,其實(shí)蘊(yùn)含了大量的代碼,而高級語言編譯后的程序,就脫離了他的開發(fā)環(huán)境,樓上說的會引起你誤會,Java的中間碼,可以用他自帶的反編譯工具,因?yàn)镴ava不是
編譯器
,而是
解釋器
,所以他不編譯,只是解釋他的中間碼
NO2.所有的exe都可以反匯編,但是你要注意,不只exe這種pe格式,linux下可執(zhí)行文件是elf,所以你在反匯編的時候,要注意可執(zhí)行文件的文件的頭,而早期的DOS只是純二進(jìn)制代碼,沒有
頭文件
,這個很重要,你要反匯編什么格式,就要選擇相應(yīng)的工具
NO3
.exe反匯編,當(dāng)然是OD,不過,我對OD不熟悉,好像他只支持WIN下的反匯編