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