題:
DOS .COM文件的反編譯技術
ESR
2014-03-05 04:27:25 UTC
view on stackexchange narkive permalink

我找到了我很喜歡的DOS免費遊戲的二進制副本( Firefighter,可從 FIRE.COM 下載),但是源代碼不可用。我想使用Unix curses在C或Python中重新實現它,儘管我完全有能力做到這一點,但我對反向工程和反編譯DOS .COM文件二進製文件的工具幾乎一無所知。

按說明說.COM是無頭原始機器代碼的文檔,我嘗試在其上運行 objdump -D -b binary -m i386 。結果看起來無效。 objdump -D -b二進制-m i8086 –adjust-vma = 0×100 似乎可以解決問題,就像使用NASM和 ndisasm -b 16 -a -o 0×100 代碼>和這兩個代碼似乎都產生了合理的 assembly 清單。

理想情況下,我正在尋找可以在 as-中反編譯並呈現為C的東西。 if-it-were-assembler 樣式,在DOS陷阱上帶有生成的變量名稱和有用的註釋。我知道這種野獸可能不存在,但是有機會我正在尋求建議。

歡迎來到RE!您是否已搜索並查看了網站上存在的問題?
在“通常用於逆向工程硬件或軟件的工具”下的範圍如何?
[您是否瀏覽了現有的問題?](http://reverseengineering.stackexchange.com/q/1854/189)您是否嘗試過已經提供的任何解決方案?現有問題在哪裡/為什麼失敗?這個問題表明以前沒有任何研究。
我已經更新了問題;可以取消保留狀態嗎?
也許您可以在這裡獲得一些提示http://www.program-transformation.org/Transform/MachineCodeDecompilers
根據對類似問題的答案(http://reverseengineering.stackexchange.com/a/3075/4113),可以使用* NO *好的DOS反編譯器;(
您是否嘗試過將其加載到IDA中?我認為您已註釋了陷阱/系統調用,這將有所幫助。顯然不是完全反編譯,但正如grkvit所說,可能根本沒有反編譯-我當然從未聽說過。
沒有反編譯器,但是DosBox調試器非常好,可以幫助您理解。當然,您可能只需要在此過程中編寫自己的反編譯器即可。確保在此處回答您自己的問題。
似乎是一個相對簡單的遊戲。我認為反編譯是不必要的步驟。如果您只想重新實現它,為什麼不從頭開始編寫它呢?有了適用於Python的圖形庫,它的使用時間不應超過一個週末。
五 答案:
Paddywhacker
2014-04-14 09:52:36 UTC
view on stackexchange narkive permalink

IDA Pro和許多其他反彙編程序將對您的文件進行反彙編,前提是該文件未壓縮或混淆。但這只是生成可工作的彙編語言程序的第一步,如果要將其翻譯成更高的語言,則需要此程序。

本質上,您正在研究兩個項目。首先是產生您遊戲的彙編語言版本。第二個是將游戲機制和邏輯轉換為C ++或其他形式。第一個比第二個容易。

John Källén
2015-07-25 13:00:38 UTC
view on stackexchange narkive permalink

我的回答有點晚了;這個網站的新手。為了反編譯MS-DOS EXE和COM二進製文件,啟動了Decompiler項目。該項目同時具有命令行和GUI工具:

https://sourceforge.net/projects/decompiler/

使用以下命令使用命令行工具來反編譯COM程序:

 反編譯--default-to ms-dos-com myprog.com  

在GUI中,使用菜單命令 File > Open as ... 打開COM文件並指定起始地址,例如0800:0100。

blabb
2014-03-21 05:50:38 UTC
view on stackexchange narkive permalink

不存在將對16位com程序進行反編譯的野獸
如果您希望對其進行調試,請從ladsoft尋找grdb
,同時為所有
int 21 /手中準備一份ralf browns中斷列表的副本。 int 10 SetCursor / GetCursor調用

還要確保將下載的exe重命名為8dot3兼容
(名稱少於8個字符)

  GRDB.EXE firefi。 com獲取Real Debugger版本9.6版權所有(c)1997-2009 David Lindauer(LADSoft)GRDB附帶絕對沒有擔保,有關詳細信息,請鍵入“?g”。這是免費軟件,歡迎您在某些情況下重新分發它;鍵入'?gr'以獲取詳細信息DPMI啟動代碼已被掛鉤已啟用的歷史記錄eax:00000000 ebx:00000000 ecx:00007500 edx:00000000 esi:00000000 edi:00000000ebp:00000000 esp:0000FFEE eip:00000100標誌:00000202 NV UP EI PL NZ NA PO NCds:1F25 es :1F25 fs:1F25 gs:1F25 ss:1F25 cs:1F251F25:0100 E9 25 27 jmp 2828大小:00007500->  
tuantm
2014-08-29 12:04:41 UTC
view on stackexchange narkive permalink

當我查看您的應用程序(Fire.COM)時,我認為您應該使用某些DOS調試器(例如Turbo Debugger 5.0)來調試和反轉此應用程序,因為其中有一些加密階段。如果要將這些應用程序“反編譯”為C代碼,這非常困難,我在過去(2008年)曾嘗試過一些工具,但沒有一個好的工具可以做到這一點。我也有一個C源代碼,但是其中有很多內聯彙編。

user4069
2014-08-29 13:14:29 UTC
view on stackexchange narkive permalink

我最近發現了一個DOS程序,它將.COM和.EXE轉換為簡單的“偽代碼”。該程序是--- exe2c.zip

http:// www。 codeforge.com/dlpre/201558/cb2e19437871.zip__.html

不是“優秀”工具,但我發現它很有用。首先執行ENVMNU.EXE,然後輸入.COM或.EXE文件名。---(提示?)如果需要更好的結果,請使用各個模塊(例如DOS到ASM模塊)並手動編輯ASM差異,然後將它們饋送到ASM到C模塊並觀察結果。

-威廉·加倫(William Gallant)



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...