題:
專業逆向軟件工程的目標是什麼?
Praxeolitic
2014-10-15 09:47:33 UTC
view on stackexchange narkive permalink

在專業級別上,反向軟件工程用於什麼目的?針對什麼軟件以及為什麼?

對於正在做一些新穎的相當複雜的編譯代碼,通過逆向工程對該代碼的運行方式進行有意義的洞察似乎將需要大量的專業知識,勞動力和時間。特別是,我認為僱用有能力的彙編程序員非常困難,甚至可能很昂貴。但是,我還沒有一個最模糊的想法,擁有資源的實體會想花這些資源。

這是我的可能性清單...

  1. 編寫惡意軟件
  2. 編寫反惡意軟件
  3. 也許正在分析競爭對手的產品?
  4. ol>

    這不是一個很好的清單。這裡的現實是什麼?哪種軟件證明可以進行逆向工程的費用是合理的?

可能是[在哪個行業中使用\ [代碼\]反向工程?](http://reverseengineering.stackexchange.com/questions/1769/in-what-industries-is-code-reverse-engineering-used)
八 答案:
joxeankoret
2014-10-15 12:55:25 UTC
view on stackexchange narkive permalink

逆向工程通常以多種方式使用。這裡只是涉及逆向工程的一些最常見的專業活動的列表。

  1. 惡意軟件研究。如果不進行逆向工程,就很難確定惡意軟件的實際用途,如何以及更重要的是如何清除或防止感染。
  2. P竊檢測:逆向工程通常合法地用於確定是否公司或特定X的公司或特定Y的竊代碼。
  3. 取證。
  4. 兼容性。逆向工程支持並仍然支持許多開源項目,例如Samba或Star / Libre / OpenOffice。沒有專業的(和嗜好的)反向工程師,沒有人能夠像以前的軟件那樣編寫軟件,因為根本沒有適用於所涉及的協議或文件格式的規範。如果您使用的是Libre / OpenOffice,MacOSX或Linux,則實際上是許多年來反向工程師的工作成果。
  5. 漏洞研究/開發。為了發現公司,程序員或第三者留下的未記錄的功能,漏洞或後門,自然需要反向工程。
  6. 修改遺留程序。這是我在該領域看到的最常見的任務之一:X公司購買了程序Y,但生產它的公司Z消失了,它們根本沒有源代碼。該公司X簽訂了逆向工程服務,以修正錯誤和/或將舊的(死的)應用程序用於自己的目的。如果該程序也受到保護,則逆向工程師也需要首先打破複製保護。
  7. 分析競爭對手的產品。自然,這是很常見的事情。特別是在談論硬件產品時。順便說一下,它發生在所有領域。您認為保時捷不會對法拉利的賽車進行逆向工程嗎?
  8. 源代碼恢復。 X公司由於任何原因丟失了其程序/產品之一的源代碼,並且他們只有二進製文件。該公司簽約了逆向工程服務,以重建/恢復源代碼。
  9. 分析外國政府的硬件和軟件。您明白了。
  10. 二進制補丁開發。某些產品仍在發展,但是提供服務的公司修復漏洞的速度非常慢(Oracle很快就浮現了……),或者根本不在乎。在這種情況下,可以簽定逆向工程服務來開發要應用於該產品的二進制補丁程序,以修復錯誤或漏洞(每個版本都要重新製作補丁程序)。
  11. ol>

    I可以繼續寫下逆向工程師通常要做的更專業的任務,但是我認為這份清單為您提供了一個總體思路。

+1!該清單經過深思熟慮,說明內容豐富而簡潔。
謠言(和網絡服務器訪問日誌表明它已被用作Microsoft內部的培訓材料)使NTFS文件系統一次(大約10至15年前)具有* only *文檔(包括Microsoft內部*內部!)。磁盤格式是通過逆向工程創建的Linux-NTFS Wiki。 Samba也被要求相同。因此,如果確實如此,那麼微軟就必須對自己的* own *協議進行反向工程,以符合歐盟的反托拉斯法令,從而迫使他們公開記錄其網絡協議。
@JörgWMittag,如果的確如此,我想知道MS如何計劃添加到NTFS?他們是在計劃自己進行逆向工程還是只是在不知道自己要添加什麼的情況下添加到文件系統中?了解MS,我認為是後者。
-1
@MooingDuck,這是我的第三個猜測。我為您的公司感到難過,但對離開的員工卻更糟。
您可能會驚訝於@MooingDuck發生的頻率。大型軟件公司的活動。
Aren't items 6 and 10 basically the same?
@StéphaneGourichon,是,不是。通常,#6的補丁很長時間,而#10的補丁則是在特定的時間範圍內(直到所有錯誤都已修復)。通常,#10可能意味著還移植到每個新版本,而#6則不需要。但是,是的,它們是相關的。您可以考慮同一任務的兩個專用版本。
Willem Hengeveld
2014-10-15 11:47:57 UTC
view on stackexchange narkive permalink
  1. 查找產品的未記錄功能。

    • 例如用於查找註冊表項或設置為打開調試模式。
  2. 查找文檔記錄不完善的功能的確切工作方式。

  3. 調試

    • 有時我發現自己將自己的軟件加載到IDA中,以查找編譯器生成的代碼,以查找錯誤或查看優化的工作方式。
  4. 破解複製保護

    • 密鑰源通常是通過對應用程序的許可證密鑰驗證算法進行反向工程來創建的。
    • 有時,公司可能已將許可證代碼丟失到某些古老的軟件中。
  5. 評估封閉源產品的安全性。

  6. 修改現有產品

    • 就像將自己的自定義rom刷新到手機上。
  7. 將當前產品與舊版軟件連接。

  8. ol>
我可以確認數字6。即使有來源,也要做很多次。原因很簡單:優化器有時會搞砸。出於相同的原因,我在反彙編程序模式下而非源代碼模式下使用了GDB。
真?這些都是專業活動嗎? #4和#7尤其令人眉毛。
絕對是@Praxeolitic:(4)。以Windows為例。在沒有源代碼的情況下,您如何了解內臟? 7甚至有一個完全合法的用例:讓某人嘗試您的版權保護方案,看看它是否可以承受。頸鎖製造商可以這樣做。
好的,#7是有問題的...但是增加#10
回覆。 #4:我遇到的庫記錄非常糟糕,以至於我不得不求助於RE以弄清楚如何使用本應公開的功能。與不懂軟件的硬件公司打交道時,您會經常看到這種事情。
我當然必須對商業軟件進行逆向工程,以便至少兩次修復關鍵錯誤。
Stolas
2014-10-15 12:57:26 UTC
view on stackexchange narkive permalink

作為專業的逆向工程師,我崇敬:

  • 故障排除
  • 漏洞利用開發
  • 惡意軟件分析
  • 實施
  • P竊,他們知道諾基亞電話庫中有未記錄的內核調用。因此,我們對此進行了反向工程,並創建了一個也使用此調用的程序。

整體反向可增加您的編程知識。

Ira Baxter
2014-10-15 21:44:27 UTC
view on stackexchange narkive permalink

進行逆向工程以恢復工件的抽象設計的關鍵目的。

源程序是概念的實現。它包含大量實現效果的代碼/門,然後在其上進行優化以合理地實現效果(空間,時間,熱量,面積,功率等)。它專注於良好的執行力,而不是概念的良好文檔編制。

對於正在運行的產品,一切都很好。但是,如果您想了解自己擁有的代碼(並且犯了將設計扔掉的錯誤[每個人都有,不要讓我開始對此感到愚蠢]),然後將所有詳細的實現抽象化,留下抽象結構和計算非常有幫助。

這是我定期撰寫的有關如何進行此操作的技術論文(上世紀[!],仍然不錯,恕我直言):逆向工程就是逆向正向工程。本文從實時操作系統中獲取低級彙編代碼,並將其抽象回到其實現的同步原語中。本質上說的是,“這個概念是在這些在代碼中的 this 這樣的代碼中實現的。”

這個想法部分是源自Rich and Water在1980年中期對程序員的徒弟進行的著名研究。在他們的案例中,他們專注於通過執行相當於數據流圖匹配的方式來發現代碼中的抽象實現。 (其他各種論文和博士學位論文也提出了類似的想法)。我的RE論文建議在低水平識別的基礎上嫁接整個設計模型。

我公司最近為陶氏化學公司實現了Rich&Water的願景,它從低級工業控制器代碼中提取了過程控制模型。陶氏正在利用它將運行化工廠的舊代碼遷移到現代控制器。請參見陶氏化學的SD構造工具。這只是宣布了這項工作,但我們已經進行了幾年,並取得了良好的效果。我們希望能盡快為技術期刊撰寫這些文章,並將其應用於更常規的語言(例如C)。

Paul
2014-10-15 12:55:57 UTC
view on stackexchange narkive permalink
  1. 為遊戲撰寫作弊行為。
  2. 為遊戲撰寫反作弊行為。
  3. 尋找編寫不良的代碼以加以利用或修復和修補它。
  4. ol>
0xC0000022L
2014-10-15 12:16:29 UTC
view on stackexchange narkive permalink
  1. 磨練您的技能並保持最新(以及使用工具)。
  2. 好奇心。是的,不必像Willem的回答那樣純粹由目標驅動,如4.和5.。
  3. 建立與傳統產品,文件格式或體系結構的兼容性。在這種情況下,動機可以是11,也可以是4或5,或者完全不同。
  4. ol>
但這是非專業原因,對嗎?我真正難以理解的是如何存在像IDA這樣的程序,這些程序超出了個人的價格範圍。獎勵是什麼?我當然對10和11表示同情,但我想嘗試用一個明確定義的問題來回答這個問題:公司/政府從事逆向工程的主要動機是什麼?
@Praxeolitic:您可能不會讓11漏掉,儘管這表明您的問題確實有很多基於意見的觀點,但是10無疑是專業原因。除非您認為專業人士不需要保持最新狀態並培訓他/她的技能。旁注:即使是學生,我也購買了IDA,後來又更新了許可證。現在已有十多年了。是的,作為個人。好奇心可以成為強大的動力。請定義“專業”。您是說“商業”嗎?
這個問題在一定程度上當然是主觀的問題,但是我想保持禮貌,而不僅僅是在這裡提出我的第一個問題。是的,這是一個年輕的stackexchange,也許還不錯。
不用擔心,我很想投票贊成將其關閉,但是我也很高興看到其他人提出更多的觀點。因為我認為您和Willem基本上都牢牢地抓住了這一點,所以當然會有可能的變化(這就是為什麼我認為11更像是一個超集,而動機可能是出於商業目的)。儘管如此,原因只是一個簡短的清單。
我絕對不想建議“專業”僅是“商業”,但是仍然必須有人吃飯,因此很多專業活動都是商業性的。無論如何,我想了解的是如何從逆向工程中獲得報酬?
@Praxeolitic:世界不是黑白的。我還*還*做反向工程而得到報酬。我不是專門做的。 Igor因開發RCE工具而獲得報酬。同樣,您的問題似乎僅限於RCE,而不是作為一項體育活動進行的逆向工程(即從iFixIt拆解諸如電子設備之類的電子設備)。
什麼是RCE? (Google的熱門信息無處不在。)
反向代碼工程通常將範圍限制為程序或“代碼”,而反向工程則可能將洗衣機拆開以了解其構造和工作方式。該SE網站是關於後者的,而不僅僅是前者。這就是為什麼這很重要:)
Chris
2014-10-16 12:17:45 UTC
view on stackexchange narkive permalink

我相當專業地進行了逆向工程。通常,我們受委託進行以下操作:

1)確定(由該軟件的開發人員)為某些軟件創建破解有多困難。

2)了解特定漏洞利用(從安全角度而言,例如緩衝區溢出)。換句話說,“這是我們收到的電子郵件;告訴我們發生了什麼事”或“這是漏洞利用程序。確切地,它是如何工作的,以及將來如何防禦這種漏洞利用? “

3),通過檢查二進製文件而不參考源代碼來查找軟件中的錯誤,這是對代碼進行較大安全性審核的一部分。這是非常有用的,因為某些危險的行為在代碼中不明顯,可能會以二進制形式“突圍”您,例如複雜的預處理器宏會導致C / C ++中的危險行為。因此,與直覺相反,有時我們使用反轉,因為它更快。查閱IDA pro和Hopper的各種“快速反轉”功能可在此方面提供幫助-反編譯為偽代碼,查找對X的所有調用或僅搜索字符串表,然後查找對危險/可疑字符串的所有引用等上。有時,僅在二進製文件上運行“字符串”可以使您對錯誤可能在哪裡有所了解。緊隨其後的是真正的,可逆的工具可以提供幫助。這不限於C / C ++ / Objective C-如果我們在.Net或Java中工作,則將使用.Net Reflector或Java Decompiler,而其他環境則具有它們的等效項。

有時我們使用逆向工程來幫助我們進行更大的項目。例如,我們可能想單獨測試一個組件。要在沒有源代碼的情況下執行此操作,我們可能需要編輯二進製文件以引入日誌記錄調用或簡化某些行為。

那當然很模糊了,但這可能並沒有真正意義上的逆轉,儘管它可能涉及在彙編級別檢查代碼,以了解代碼崩潰的原因/錯誤的位置/是否是安全性問題。

即使在一般的開發環境中,逆向工程也很有幫助的原因有很多。在安全領域,這非常重要。

在專業發展方面,如果您在安全領域並且具有良好的逆轉技能,那麼您可能會處於薪資表的高端。您需要能夠做其他事情,但是,如果您的履歷已經倒退-並且可以備份-那麼被錄用應該不是問題(至少在安全領域)。

Guy Hoozdis
2014-10-17 02:15:27 UTC
view on stackexchange narkive permalink

已經有很多不錯的答案。如果我可以加上我的兩分錢。逆向工程軟件類似於機械師或修補匠,他們喜歡將事物拆開,理解它們的工作原理,將它們放回原處,並可能修改其主題以適應其行為,因此更像他們的喜好。

任何電氣工程師,硬件設計師和最傑出的QA工程師都是有才華的逆向工程師;也就是說,他們在調試/分析軟件/硬件實現方面具有專業知識。我在學校學習期間曾在AMD實習,我的調試技能不僅幫助我晉升到公司中更重要的職位,而且還真的很有趣!就像您可以玩多長時間的遊戲或難題。挑戰永無止境。

我最喜歡的反向工程師合法需求的例子是NASA。它們不是唯一適用於“任務關鍵型”一詞的服裝,人們的生活取決於工作質量,但它是唯一必須解決問題的設備,即使他們的產品在太空中飛馳。他們必須設置並凍結產品版本 years ,然後軟件/硬件才能進入啟動平台。這似乎很愚蠢,因為我們口袋裡的電話比整個航天飛機具有更多的計算能力,但它們不能使用現代技術。太冒險了。他們必須接受規範凍結時可用的資源,僅此而已-以免他們招致安排和工作量,以進行升級,測試,修復,重新測試,再次驗證,模擬實際情況以確定故障點並加以修復,然後重新開始...。這是一項嚴肅的工作,這些工程師不會輕易承擔起責任。

得知NASA項目在硬件上使用Microsoft OS進入航天飛機組件,您會感到驚訝嗎?它與使用M $ OS作為基礎(例如,銷售點終端或電廠的控制系統)沒有太大區別。現在考慮一種情況,其中發現OS,硬件或第三方軟件的某些部分存在缺陷。此外,假設供應商不關心NASA所做的努力,並決定他們沒有財政動機來解決問題-即使生命取決於該組件是否能夠正常工作。美國航空航天局陷入困境。

此時,他們的選擇是更換組件並重新開始流程-耗費大量時間,工時,並且無法保證他們不會發現其他關鍵問題升級後的缺陷;或者,而不是升級,他們可以對硬件/軟件故障進行逆向工程,並確定自己是否可以解決問題-可能需要重新設計,更改一些電阻器的值,​​以使存儲器總線上的電壓水平在使它們失效的極端條件下保持在要求的限制內,或者可能存在二進制補丁程序,他們可以應用該補丁程序來減輕錯誤狀態,他們發現了生命支持系統開始出現故障或探針的電池耗盡而無法重新使用的狀態自己充電。

我並沒有完全彌補這些情況。它們來自我曾在JPL工作的朋友,我在大學時的工程教授或在技術行業工作過的同事們所講述的故事。所有這些以及更多,已經由NASA的工程師克服了。做他們所做的事,確實比印度付了很多錢(也要給他們頂禮帽),但是第一次經歷總是很昂貴。

從技術上講,NASA工程師將違反供應商聲稱擁有的一項或多項知識產權法(他們可能會或可能不會真正擁有這些權利;我在這裡不打算對此進行辯論)。 ,您將完全有能力拆開氣缸以改變汽車的性能曲線;使用不同的輪胎;改進的懸架;調整噴油系統中的正時和混合比;著名的謝爾比眼鏡蛇不僅進行了修改,而且還進行了再營銷它的售後修改完全是合法的。

如果您購買了收音機並想進行一些修改,以使其防水,那麼您可以隨身攜帶它到湖上。

現在,越獄您的iPhone,修改您隨附的xBox或Kinect系統,或者就NASA而言,修改操作系統和/或重新設計母板上的內存總線rd,確保您的人腦安全。所有這些活動都引起了供應商的強烈反應,不管他們出於何種原因,他們都不希望這些活動繼續進行或變得更加廣泛。最終,這導致了我們今天通過的DMCA法律。在此之前,即使您單擊“我同意”之前已提交的重做條款和服務,仍然存在該合同是否可強制執行的問題。

數字千年版權法案(DMCA)並沒有對中國或南美的大型黑市採取任何措施,它受到嚴厲的處罰,對於那些希望追逐消費者可以擁有並擁有的人而言,它被視為一種“狩獵許可證”。 。未經許可複制他人音樂是否屬非法;出售,交易甚至贈送?

很明顯,那應該是非法的。藝術品,書籍,專利工藝,受保護的商標;是的,那些也應該受到保護。軟硬件;再次,是的,軟件的作者應該能夠執行其許可方面的共鳴,以保護創建所述軟件或硬件所做的投資。明確地,合法地合法地購買一本副本,轉身製作副本,然後出售/交易/或提供未經許可的副本是並且應該保持非法。 Microsoft,VMWare,Adobe和類似的大公司應保留該權利。

現在,一旦我獲得了軟件或硬件的許可,就可以進行修改,然後出售/交易/或放棄具有 my 修改功能的軟件/硬件。那要看。從衍生作品中獲利超出了您最初許可該藝術作品(即軟件)的限制,並且是非法的。例如,您無法繪製迪士尼角色的肖像,更改名稱,然後將其聲明為您自己的名字並從使用中獲利。我相信Mikey不再受到保護,但是當他那時就應該而且應該是非法的。 ,更改,討論,顯示或教授他們希望在其合法許可的軟件和硬件上進行的任何活動?我不會回答,但是我會說DMCA表示“否”。實際上,反向工程師用來調試操作系統的工具與檢察機關將其引用為非法活動的工具完全相同。

讓我們為起訴DMCA案件的人付出更多一點,在該案件中,被告被告知已經訪問了加密密鑰,除其他外,這些密鑰將使被告能夠複製受保護的藝術品(例如音樂和電影)。有一些正當的理由可以解釋被告的行為,但是可以進行的非法活動並不多,對那些試圖保護自己的人來說代價高昂。歸根結底,即使他們盡了最大的努力,也無法阻止任何人訪問那些加密密鑰。

這讓我想起了床墊上的標籤,警告人們要對這些標籤實施嚴厲的處罰移除所述標籤,但是標籤沒有任何保護。只是威脅和過分的懲罰被用來作為榜樣,當他們st火併宣布進行女巫狩獵時。

蘋果公司應該能夠推崇一名安全研究人員,並真誠地努力幫助和支持他們。蘋果製造更好的產品,被科技巨頭所迷嗎?地獄沒有,但您最好相信他們嘗試了-發生了。 Target或Home Depot的員工警告了潛在危險;他們現在在哪裡?他們被解僱,流失,被認為對公司有害,被迴避並貼上“不是團隊成員”的標籤。在Tar​​get,Home Depot和無數其他數據洩露事件(肯定是其中至少一項事件影響了您的生活)之後,現在比以往任何時候都更加明顯的是,逆向工程不僅是一項權利,而且是我們的一個方面1)保護像您這樣的世界上無辜的消費者和數字公民的迫切需要的新興社會結構; 2)對那些有責任採取合理措施保護賦予他們健康的社區的人負責(被授予以換取服務)。

NSA,CIA,DeutcheBanks,HealthCare.govs和我們都想要並有權做的事情的醫院。是逆向工程師,它將成為現代自由戰士,明天的激進主義者,當權力腐敗和貪婪讓路而忽略給予他們的權力所隱含的責任時,小傢伙將站在你這一邊。組織。使它更具戲劇性;逆向工程師是一種新宗教的牧師。我們應該對他們表示敬意,為他們勇敢地站在那些喝醉了的權力者面前鼓掌,並在他們冒著家人的隱私冒著生命危險代表我們走上火線時保護他們,因為這是“正確的做法”。

如果您認識其中一個人,請在今晚給他們買啤酒,然後說謝謝。與任何士兵一樣,當下一個數字悲劇迫在眉睫時,他們將成為保護我們的人。



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