iT邦幫忙

0

比對執行檔

總裁 2011-02-15 14:29:3210437 瀏覽
  • 分享至 

  • xImage

如果我有兩個執行檔, 我要如何比對出其中差異的部分, 還要知道差異的部分是在做甚麼??
前提是我沒有source code, 也看不懂組合語言.
這個問題有解嗎??

看更多先前的討論...收起先前的討論...
無解
player iT邦大師 1 級 ‧ 2011-02-15 18:40:43 檢舉
用逆向工程的工具
把 .exe 檔 反轉成 .asm 檔
然後拿到 純文字檔的比對工具 去比較
這樣可以把差異的內容找出來

但是
你看不懂組合語言?
無解
總裁 iT邦好手 1 級 ‧ 2011-02-16 08:20:15 檢舉
唉....這是我朋友出給我的一個難題.
他們和廠商簽的合約, 只有軟體的使用權, 沒有source code, 沒有版權, 而且合約到期後, 連程式都屬於廠商的, 所以軟體的一切版本控管都是廠商在做, 他們連廠商哪時有上版都不知道, 本來這樣也沒事, 已經這樣過了好多年了, 可是....最近他們要導入ISO27001, 稽核員說這樣嚴重違反資安, 要他們提出證明, 說廠商上的程式, 真的只有廠商說的功能, 沒有其他不該有的.
我還有說可以要求廠商做CODE REVIEW, 然後再現場BUILD執行檔, 可是廠商不願配合....
我是跟他們說, 稽核員的重點其實是要有稽核的"流程", 而不是要知道反組譯的結果, 可是他們不能接受我的說法, 問題就在他們被稽核的時候我不在現場, 所以.....就剩下這個難題了.
(難道真的是我的看法錯了嗎?? 如果是我的看法錯了, 那我是不是該告訴他們可以放棄ISO27001了...Orz)
還有...我的朋友都是業務出身的, 所以才會簽這種合約, 他們不要說組合語言了, 根本連電腦都所知有限....瞎倒
總裁 iT邦好手 1 級 ‧ 2011-02-16 08:24:02 檢舉
這其實也是我預設的答案.....只是想來這裡問問看, 看會不會有神蹟出現, 可以幫我把執行檔直接變成文件, 還是中文的.....哭
嗯...
聽您這麼一說
我覺得應該是ISO27001的議題
而不是技術問題忙

若照這種邏輯推演
作業系統、資料庫或MS OFFICE
是否也得使用相同檢驗標準?
還是他是知名大廠所以不用?
台灣本土廠商就要被稽核?
如果是這樣我也沒話說了瞎

這問題應該不是問懂組合語言或反組譯的人
可能要問有導入過ISO27001的更適合rock
總裁 iT邦好手 1 級 ‧ 2011-02-16 10:14:19 檢舉
antijava提到:
若照這種邏輯推演
作業系統、資料庫或MS OFFICE
是否也得使用相同檢驗標準?

我也這樣跟我朋友講呀, 那以後PATCH都不用上了, 病毒碼也不用更新了...Orz
所以我一直強調是他們誤會稽核員的意思了, 可是他們都不聽.

我本來也想用ISO27001當標題來問的, 可是又覺得這個議題太大了, 可能會討論不到重點, 所以就變成現在這樣了.Orz
fillano iT邦超人 1 級 ‧ 2011-02-16 10:37:59 檢舉
soga...這樣看起來好像死胡同...
小成 iT邦高手 10 級 ‧ 2011-02-16 14:25:24 檢舉
神蹟XD
賽門 iT邦超人 1 級 ‧ 2011-02-16 15:50:34 檢舉
就我很久以前喜歡胡搞可執行檔的經驗, 逆向工程最多是產出組合語言碼, 再高階的程式語言碼是比較難產出的. 因為這些逆向工程軟體都是由反謂'反組譯程式'搞出來的成品.

而且, 逆向工程軟體...說實在話, 是神學, 不同的逆向工程軟體會逆向出不同的組合語言程式碼出來, 而更神的是..同一套逆向工程軟體會給你搞出兩套不同組合語言程式, 結果也不一樣的.

好玩的是, 如果把逆向產生的組合語言程式再組譯回去, 會得到大小完全不一樣的可執行檔, 能不能順利執行呢? 這是聽由命的事. (所以稱之為神學)

總裁大人的問題有沒有解呢? 有...要不要花錢呢? 要....要工錢....

1. 兩支可執行檔內容是可以一個Byte一個Byte去比對, 驗證兩個可執行檔案是相同的

2. 先拿其中一支程式執行, 倒入測試資料, 執行後, 把程式執行結果和人工處理的結果比對, 驗證是正確的

3. 拿另一支程式執行, 倒入測試資料, 執行, 把執行結果和第一支程式結果比對, 驗證完全相同

即可證明兩支可執行檔案是相同的.

但這樣就行了嗎? 不行. 你怎麼知道可執行檔中沒有故意植入的惡意程式碼? 就算兩個可執行檔案一模一樣, 怎麼知道沒有早已植入的本馬或電腦病毒什麼的....

所以, 重點在於提供可執行檔案的供應商本身有沒有經過驗證. Microsoft、Oracle等等, 都是經過驗證的公司, 所以提供的軟體有一定的可靠度, 稽核員不會去問Windows 2008 R2有沒有問題....

稽核員今天關心的不是兩個可執行檔內容一不一樣的問題, 而在於..怎麼驗證這個可執行檔案裏沒有包含非必要的機器碼.

最簡單的方式是...找出原始程式碼, Compile出來的可執行檔來比較. 但這樣就OK了嗎? 不行.....有時候, 我就是會把同一支程式編譯出有點大小不一樣的檔案, 這要看有沒有加入一些額外的Add-ons.
賽門 iT邦超人 1 級 ‧ 2011-02-16 15:51:15 檢舉
<<Oops! 超出1000字...>

所以, 怎麼辦呢?

1. 原廠商還存在嗎? 存在的話, 簽系統保固合約. 該合約可確認系統在正常的維運狀態下.

2. 請驗證機關把可執行檔案用惡意程式碼掃瞄工具掃一遍, 如果沒有惡意程式就行了. 如果有, 就不要玩了, 提早收工.

3. 加上之前做苦工的驗證資料.

有1.合約2.驗證無惡意程式碼3.符合程式設計功能結果的證明文件就行了.

BS7799/ISO27001的精神不是找麻煩, 而是提供使用該公司服務的大眾有一個經過驗證確保符合國際標準的服務機構來提供服務.

所以, 該花的錢必需要花, 因為, 一支欠缺原始程式碼也沒有廠商來保固, 甚至連自己IT人員都無法維護的程式, 根本上, 是不符合BS7799的基本精神的...

以上, 請總裁過目.....偷笑
總裁 iT邦好手 1 級 ‧ 2011-02-16 16:00:37 檢舉
cdfu提到:
他們和廠商簽的合約, 只有軟體的使用權, 沒有source code, 沒有版權

他們就是已經簽了不平等條約, 然後要導ISO27001, 所以才有這一堆鳥問題.嗚
現在又不能要求廠商也通過ISO27001.....落寞
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
16
Ray
iT邦大神 1 級 ‧ 2011-02-15 16:35:59
最佳解答

這是純人工作業, 把錢拿出來就有解....

看更多先前的回應...收起先前的回應...
總裁 iT邦好手 1 級 ‧ 2011-02-15 16:42:26 檢舉

唉....這就是最大的問題了....Orz

Ray iT邦大神 1 級 ‧ 2011-02-16 14:37:52 檢舉

OK, 原來謎底在 *討論* 裡面......落寞

小弟正好是英國標準協會認證的 BS-7799 主任稽核員 (Leader Auditor), BS-7799 是 ISO-27001 的前身, 事實上, ISO-27001 的內容等於就是 BS-7799 Part-2 (ISMS requirements, 2005 年定案). 雖然名稱不太一樣, 不過實質的內容也很接近, 因此, 這裡應該要稍微討論一下 ISO-27001 的需求.

想先請樓主了解以下幾件事情:

Ray iT邦大神 1 級 ‧ 2011-02-16 14:44:56 檢舉
  1. 樓主朋友目前導入到甚麼階段? 是已經申請驗證了? 還是在輔導?

如果是在輔導期的話, 其實那個人不叫 *稽核員*, 頂多只能稱為 *輔導顧問*. 顧問的職責, 是協助業主通過驗證, 但這不代表顧問的話就需要百分之百遵從, 關鍵在於, 業主必須與顧問討論出一個: *在本企業內可被執行的安全政策*, 而不是只聽顧問的話辦事. 因為顧問並不了解業主的難處與環境, 不可能完全依照業主的條件來制定合用的政策.

通常顧問必須保證業主可以通過驗證拿到認證, 否則他可能會拿不到錢.

基於以上的前提, 顧問往往會提出 *過當* 的措施或政策, 以確保可以通過驗證, 例如, 原本只要 80 分就可以通過驗證, 但顧問卻要求業主做到 150 分, 因為這樣可以確保顧問公司第一次驗證就通過, 馬上可以請款.

Ray iT邦大神 1 級 ‧ 2011-02-16 14:50:13 檢舉

其次, 顧問公司如果還有其他業務項目的話, 也可能藉此機會出難題給業主. 以本案來說, 如果業主無法滿足顧問所提的要求, 顧問可能會以: *這是通過驗證的必要條件* 來威脅業主,

接下來開始說服業主依他們的建議來進行, 例如: 放棄原有的軟體商, 重新購買一套符合驗證規範的軟體. 當然, 這套軟體也是由顧問公司所建議. 這個費用, 當然有很大的油水可以中飽.....(重買一套 ERP 要多少錢? 數百萬到數千萬都有可能)

Ray iT邦大神 1 級 ‧ 2011-02-16 14:54:55 檢舉
  1. 如果是已經申請驗證, 樓主的問題是由外部驗證的主任稽核員所提出.

這樣的話, 責任大部分在輔導的顧問公司. 跟驗證機構關係比較好的顧問公司, 會想辦法把缺點*搓*到最少, 讓業主很快就能改善. 經驗豐富的顧問公司, 應該在主任稽核員提出缺失改善單的時候, 就知道應該如何改善了, 而不是把問題丟回給業主自己處理.

總裁 iT邦好手 1 級 ‧ 2011-02-16 15:00:40 檢舉

他們好像是預評(還是初評)就有一堆缺失, 這些問題是預評的那個人(我也不知這個人算顧問還是稽核員)提的, 其他問題都解決的差不多了, 就剩這一個.
因為他們四月要正評, 所以找我幫忙, 我也被他們搞得很沒力...
就我的認知, 我認為稽核的重點是流程, 所以有資安問題的部分, 都必須有對應的流程來稽核, 資訊系統只是流程的一部分.
但是我朋友一直認為資安問題就是電腦有問題, 一定要從電腦上找出解決方案, 這是我個人認為目前最大的問題.

Ray iT邦大神 1 級 ‧ 2011-02-16 15:00:52 檢舉

回到樓主的問題, 不管這個問題, 是由輔導顧問還是主任稽核員所提出, 業主要思考的關鍵點, 並不在於: 程式碼要如何驗證? 因為就如其他網友所說的, 難道公司買所有的套裝軟體, 都必須要求原始碼來驗證嗎? 這是不可能的事情.

所以, 要回到這個要求的本質來問:
要改善的, 是哪一種風險?
要動用 ISO-27001 裡面的哪一個控制項 (Control Objective)?

Ray iT邦大神 1 級 ‧ 2011-02-16 15:09:48 檢舉

可否了解, 他們申請的第三方驗證機構是哪一家?
SGS? BSi? TUV NORD? AFNOR? TAF?....

Ray iT邦大神 1 級 ‧ 2011-02-16 15:15:18 檢舉

如果已經到了外部機構來驗證的階段, 通常稽核員不會直接告訴你關鍵點, 他所提出的缺失只是一個現象, 你們要從這個現象, 去 Review 既有的安全政策, 找出漏洞.

我剛剛查了一下 ISO-27001, 跟此事件有關的 Control 好像是 A.6.2 的 External parties, 底下的:
A.6.2.1 Identification of risks related to external parties
A.6.2.3 Addressing security in third party agreements
這兩個, 可否請教, 業主他們自訂的 Security Policy 裡面, 對這兩個 Control 是如何實施的?

如果業主沒有制定的話, 那顯然就是稽核員所挑剔的重點, 應該請顧問公司提供一個可行的執行制度給業主參考, 而不是叫業主自己想辦法.

Ray iT邦大神 1 級 ‧ 2011-02-16 15:17:15 檢舉

目前我只能幫到這裡, 如果要更進一步的話, 應該是原輔導的顧問公司要負責解決, 不然就是要把顧問費交給我, 我才能協助解決.....

總裁 iT邦好手 1 級 ‧ 2011-02-16 15:49:00 檢舉

感謝RAY老大的幫忙, 這已經幫助我很多了, 我已經請我朋友自己來看這一篇了, 他如果還看不懂, 我也幫不了他了.

Ray iT邦大神 1 級 ‧ 2011-02-16 16:33:29 檢舉

總之, 這個缺失是有解的, 但解法絕對不是叫外包廠商給原始碼....

10
ilovepc
iT邦研究生 5 級 ‧ 2011-02-15 19:03:34

應該是說,答案就在問題中。
比對出差異之後,差異的部份鐵定是所謂的機器碼,所以你一定要懂組合語言,不然你比對出可執行檔的差異部份之後…………那要做什麼?
如果這個問題要符合你的「前提」,那鐵定是無解吧。

12
shunyuan
iT邦研究生 1 級 ‧ 2011-02-15 23:40:42

dos 下有一個命令 FC

beyond compare 這個軟體可以比對。

看更多先前的回應...收起先前的回應...

shunyuan大好久沒見,近來可好否?
rockrockrock

+1

去哪邊把妹??很想你的~~~

總裁 iT邦好手 1 級 ‧ 2011-02-16 16:16:56 檢舉

兔大兔年的第一發就發在這了, 真是讓人受寵若驚....驚rockrock灑花灑花

shunyuan iT邦研究生 1 級 ‧ 2011-02-18 22:56:11 檢舉

都把不到 MM 因為發福,小肚凸出,然後覺得很容易疲倦,所以每天騎腳特車去了。空

總裁,糖淑,海棉寶寶,各位大大。rock
rock

鐵殼心 iT邦高手 1 級 ‧ 2011-02-18 23:54:32 檢舉

shunyuan提到:
所以每天騎腳特車去了。

找時間一起騎去新竹吧!開心

6
bzbz
iT邦新手 2 級 ‧ 2011-02-15 23:57:24

先問一下,如果只有一個執行檔,沒有source code,你能逆回去看的懂他在幹嘛嗎?

8
fillano
iT邦超人 1 級 ‧ 2011-02-16 02:43:59
  1. 那個作業系統?什麼執行檔格式?
  2. 假設是PE,可以先用一些工具分析,看看哪個節區是從檔案的哪裡開始,然後binary的編輯器或工具做比較,看看差異點是落在哪個節區。並不是所有節區都是程式,裡面有些是資料。
  3. 例如dumpbin(要安裝visual studio中的vc++),可以用他來取得執行檔資訊。也可以把他執行結果重導到檔案,然後比較一下結果。
  4. 如果是.net做出來的執行檔,而且沒有做原生編譯,那可以找一些反組譯工具把他轉成c#...等語言的程式碼(如果你了解IL,倒是可以直接用ildasm,安裝windows sdk後應該就有這個工具)

http://support.microsoft.com/kb/177429/zh-tw (dumpbin的官方文件)

用portable executable關鍵字,可以找到PE執行檔格式的解說,例如:
http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

fillano iT邦超人 1 級 ‧ 2011-02-16 08:04:46 檢舉

抱歉,那個dumpbin文件是機器翻譯的...結果把命令列參數也「翻譯」了XD

還是參考英文版吧:
http://support.microsoft.com/kb/177429/en-us

我要發表回答

立即登入回答