題:
逆向工程(非常)舊的DOS計算程序
user28805
2019-06-22 21:41:43 UTC
view on stackexchange narkive permalink

我最近加入了一家專門從事風道&通風系統的公司,當我發現他們仍在使用DOS程序來計算特定風道系統的壓力損失時,我感到非常驚訝。您會看到,當空氣通過風管時,會遇到很多阻力(彎曲……),一旦您輸入系統的所有不同組件,此程序就會計算出阻力的大小。

該程序仍然可以在今天運行,但是必須在運行Windows XP的虛擬服務器上運行,而且佈局還很過時。我想知道是否可以對這個程序進行逆向工程,並放入“現代”外套中,從而實現簡單的數據指令。

例如,今天您必須從系統中手動輸入每個組件,但是在一系列組件上運行程序(從我們的繪圖軟件中提取)會容易得多/更快。 (這是額外的)

我不是程序員,但是我看到了這個線程,這是一個非常相似的問題,最終找到了解決方案。

該程序可以追溯到1990年,如果我在記事本中打開文件,則可以看到它是用TURBO BASIC編寫的。我有.DAT和.EXE文件,還有.KAN文件(我認為這些最後一個文件是由該程序專門創建的,稱為LUWKAN)。該程序的開發在幾年前就已停止,甚至連該公司都不再使用該軟件。

任何幫助或指導將不勝感激?我認為可以輕鬆地檢查和復制源代碼,但是我可能太幼稚了。

您已經熟悉哪些工具? DOSBox進行了一些修改(更不用說您可以自己對其進行修改了)以調試DOS程序。另外,過去有一個相當不錯的IDA插件與(啟用了調試功能的)DOSBox接口。通常,任何環境信息對於RCE目標都是有價值的。另外,在DOS時代,人們使用了很多技巧來應對資源的限制。因此,也許值得一本書,例如“ Programming Pearls”,並閱讀這些技巧。
三 答案:
bart1e
2019-06-22 22:47:03 UTC
view on stackexchange narkive permalink

我想知道是否有可能對這個程序進行逆向工程並放入“現代”外套中,+啟用簡單的數據指令。

是的,有可能,但不是非程序員。為此,應檢查如何執行計算以及使用精確的公式。然後,獲得了這些知識之後,就可以編寫一個應用程序,該程序結合了原始程序中使用的技術,為現代處理器工作。

我認為可以輕鬆地檢查和復制源代碼,但是我可能太天真了。

應該易於檢查,特別是如果應用程序不是很複雜時(我認為是正確的,因為它是一個舊的 DOS 應用程序)。但是,這裡有一些細微差別:

  1. 從可執行文件獲得的不是應用程序的源代碼。它是從以人類可讀的高級編程語言編寫的源代碼到所謂的機器代碼的翻譯,該語言是計算機可以理解的語言,並且其中包含的指令可以由 CPU
  2. 它必須被重寫,即您不能只複製代碼。其背後的原因之一是自軟件發布以來,操作系統與程序之間的交互方式已發生變化。
  3. 即使您擁有此應用程序的源代碼,也無濟於事並應以任何一種方式進行重寫(請看上面的觀點)以與現代OS兼容。
  4. ol>

    但是分析和重寫它並不是一個大問題(+添加其他一些功能),我認為,尤其是如果執行的計算不太複雜的話。我不能多說了,因為您沒有上傳可執行文件。

    可以說的是,一個非程序員只是不會那樣做;您將需要一些幫助,因為它需要編程和RE知識,但這似乎是可行的。

    我可以推薦的工具以及用於反轉 DOS 程序的工具是:

  • DOSBox調試器用於動態分析(在運行時觀察程序行為)
  • IDA用於靜態分析(分析

但是如上所述,要利用它們,您將需要一些幫助。

i336_
2019-07-01 19:25:01 UTC
view on stackexchange narkive permalink

聽起來仍然可以與公司進行溝通。優秀:詢問他們對程序進行逆向工程的看法

  • ,以明確地促進業務持續進行

  • 公開傳播在互聯網上對該程序的二進制副本(已修改或未修改),也用於反向工程的明確目的,以促進操作的繼續進行。

  • 如果不能以公開方式傳播,請私下共享與其他人建立二進製文件,而無需從可能的接收者處簽名NDA。

  • 允許同一團隊執行逆向工程也可以直接重新實現所需的功能,而無塵室則不需要位於中間(ref: https://zh.wikipedia.org/wiki/Clean_room_design

  • (您可能可以回答此問題(您自己)共享許多屏幕快照和/或視頻(來自攝像機,或來自 obs-studio 屏幕錄像軟件),以了解與程序的交互方式

  • (如果您有e。任何 .bas 文件)共享任何可能構成私有或公開程序源代碼的內容

基本上,您是在要求稍微重新排列您的原始許可協議:)。我認為這有點像保修:您的軟件已經完全超出了維護的所有原始定義,並且有時被視為合理的售後維護。此處供應商的觀點可能有所不同。

出於合作的利益,您可能會向您提供從您進行的任何逆向工程工作中恢復的任何算法的信息。 (發送的內容可能包括也可能不包括您添加的任何現代化/接口,因為這是您獨立進行的獨特工作。)當然,只有供應商不提供現代化的上級產品,這樣的報價才有價值自己去陸灣。

無論如何,一旦您有明確的答案,您將有一個具體的法律基礎可以建立,而不是您當前所處的當前灰色海洋。

如果您可以公開將二進製文件轉儲到互聯網上,將大大簡化事務;轉到一些逆向工程論壇,共享該程序,您可能會在幾天之內收到極其準確的報價(和ETA)。您可能最終僱用了大約兩個人的團隊。

如果您可以不使用NDA私下共享該程序,則可以達到90%以上的良好狀態,尤其是如果您可以共享圖像/視頻時該程序的作用。報價過程只需要有興趣的人士來ping您,並且會慢一些,因為初始分析不會是異步的。

我不確定您要查看哪種費率,因為我本人沒有該領域的經驗。視頻和描述可能會得到不錯的初步估計。


我看了 https://en.wikipedia.org/wiki/PowerBASIC

不幸的是,對您而言,此特定環境的頭號功能之一(當年仍是Turbo BASIC時)是它構建的本機二進製文件不需要捆綁的運行時。

p>

通常,這意味著您將不得不走完整彙編語言逆向工程的“硬模式”之路...但是在硬幣的反面,例如,那裡有大量工具例如,要反向“編譯” Java或混淆的JavaScript,到現在(2019年),任何反向工具(例如QuickBASIC“已編譯程序”格式(使用字節碼和運行時解釋器))都可能掉在地上或隱藏在巨大的價格標籤後面。

很明顯,當您尋求RE協助時,很明顯注意到該程序是用Turbo BASIC編寫的。可能有些人對TB編譯器的特性很有經驗。


我想知道是否可以對這個程序進行反向工程,並放入“現代”外套中,並啟用簡單的數據指令。

是的。我可以想到兩種不同的方法。兩者都很複雜,很難說出哪一種方法更容易解決,而無需準確關注具體情況。

  1. 可以稱之為“傳統” RE方法,通過靜態(IDA Pro,Ghidra,radare2)和動態(CodeView,Turbo Debugger,SoftICE)分析等技術使程序更趨精細,並嘗試從程序的其餘部分中弄清數學,在此可以直接重新實現

    這裡的主要風險是該過程是否捕獲了重要的算法細節或邊緣案例處理。這是我要加粗的唯一內容:您可以通過提供數十到數百個測試來幫助完成此過程。(現在開始考慮此過程-例如,每個測試大約10個測試

    如果程序簡單明了,並且易於識別進行計算的區域(不可能在不插入二進制的情況下說),則應該減輕一定會有風險。

  2. 一種非常接近遵循“夾克”概念的字面翻譯的技術,可以將程序包裝在已修改為可以“導出”屏幕狀態並接受合成的鍵盤輸入的模擬器(例如DOSBox),然後在頂部添加一個轉換層,該層可快速鍵入數據並為結果刮取屏幕。

    此方法的主要風險是程序可以顯示的屏幕數量以及涉及的複雜性(是否需要滾動才能獲取所有數據?抓取信息時,根據屏幕上顯示的指示來明確執行的下一個動作是什麼?)。

  3. ol>

    [...](從我們的繪圖軟件中提取),在組件列表上運行程序會容易得多/更快。 (這是額外的)

    此生成的組件列表的格式是什麼?

    這可能是從瑣碎到復雜的任何事情。添加此功能的成本將大大低於最初的RE投入。


    我非常有興趣了解該項目的進展情況!如果您將此問題帶到其他論壇,則可以將鏈接發佈到相關主題,這將非常酷。 :)

llm
2019-07-03 01:10:19 UTC
view on stackexchange narkive permalink
  1. 文件擴展名通常無濟於事-沒有真正的標準,周圍有1000個.DAT和.KAN文件,絕對沒有關係,而文件的內容可以給我們任何提示

  2. 可執行文件通常不包含源(或類似源的東西),僅包含cpu可以使用的足夠信息,幾乎不可讀-除裂縫外:)

  3. 是小型命令行工具還是功能完善的圖形應用程序?

  4. 您可以將軟件上載到某個地方嗎( http ://www.tinyupload.com/)-這樣我們就可以分析或了解該軟件的工作方式-或列出目錄(屏幕快照或文本文件)以獲取文件大小,擴展名等。

  5. 該軟件是否在Dosbox(在此處下載: https://www.dosbox.com/)下運行以擺脫VM / Win95依賴性並感受一下軟件ist的複雜程度(加密狗,硬件依賴等)->您也可以嘗試: https://github.com/dmsc/emu2如果程序確實非常簡單,則僅使用cmd並且如果可以選擇linux,但請在之前嘗試DosBox

  6. 如果程序的大小不是很大,則非常有用很大

  7. 任何形式的視頻或能顯示軟件如何填充數據,進行計算等操作的東西都會有所幫助( https://www.screentogif.com /

  8. 您為什麼認為該exe基於Turbo Basic? den Exe中的信息字符串?嘗試在IDA免費軟件5( https://www.scummvm.org/news/20180331/?lang=zh_)中打開exe-僅能使用版本5免費軟件打開DOS可執行文件-當前版本7免費軟件無處可尋->向我們獲取有關可執行文件的更多詳細信息

  9. 始終備份完整的安裝文件(一個保存文件)在記事本中可以殺死您的exe或數據文件-最好使用這個微型免費軟件十六進制編輯器: https://mh-nexus.de/en/hxd/

  10. ol >

    我之前已經做過幾個小型到大型的逆向工程項目-所以我知道我在說什麼:)

    !!!給出9個問題/陳述=>需要9個答案/反饋!!!

嗨,歡迎來到RE.SE。儘管這些問題是合法的,但將它們發佈為答案確實不合適。但是,看到您到目前為止還沒有聲譽,我可以看到您所遇到的難題。對於原始詢問者而言,將這些問題合併到OP中並內聯地回答是很好的。
謝謝您下次提供的信息會更好,...自從提出問題以來,他沒有回复,也許他未以非註冊用戶的身份得到更新:(


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