2009-11-22 23 views
1

我想嘗試以下方法:寫入一個值PE文件

我有一個C#程序,它需要一個文件作爲輸入,並計算這五個MD5 MD5算法。我的算法對每個文件都有一個唯一的值;這個值是一個128位的值,所以我想用這種技術來保護我的程序,把md5算法的輸出值保存到我的PE文件中(假設值爲X)。 PE將再次計算MD5值(對於它自己)(假設該值爲Y),然後將X與Y進行比較。如果值相同,則可以運行;否則,它會退出。

我的問題是:我怎麼寫我的價值進入PE文件?重要提示:我的算法是用C#編寫的,所以我想用一種用C#語言編寫PE文件的方法。

+0

會不會一旦它寫進文件的校驗有所不同呢? – spender

+0

它酷似校驗 但問題如何校驗什麼 的值寫入文件 – Hany

回答

4

一種選擇是簡單地將您的值追加到文件的末尾。 Windows非常高興將任意數​​據附加到可執行文件 - 例如,自解壓zip文件就是如此。

編輯響應哈尼的評論:這對我的作品,使用的cmd.exe爲例:(?你沒有做以二進制方式的文件操作,沒有你)

C:\WINDOWS\system32>copy con rjh 
This is a test! 
^Z 
     1 file(s) copied. 

C:\WINDOWS\system32>copy /b cmd.exe + rjh cmdrjh.exe 
cmd.exe 
rjh 
     1 file(s) copied. 

C:\WINDOWS\system32>od -cv cmdrjh.exe | tail -4 
1367760 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 
1370000 T h i s  i s  a  t e s t ! \r 
1370020 \n 
1370021 

C:\WINDOWS\system32>cmdrjh 
Microsoft Windows XP [Version 5.1.2600] 
(C) Copyright 1985-2001 Microsoft Corp. 

C:\WINDOWS\system32> 

+0

感謝里奇.. 我曾嘗試我的價值直接在文件 的末尾寫,但該文件已損壞 – Hany

+0

實際上我試圖寫我的價值,但不是二進制的(我使用stram Writer),但是你能否更多地解釋你的例子 – Hany

+0

'copy con rjh'創建一個包含文本的文件。 'copy/b cmd.exe + rjh cmdrjh.exe'需要'cmd.exe'和文件'rjh'並創建一個新文件'cmdrjh.exe',它是'cmd.exe'並附加了'rjh' 。 'od -cv cmdrjh.exe |尾-4「表明'cmdrjh.exe'確實在我的文本結尾,然後運行'cmdrjh.exe'顯示Windows認爲它是一個有效的可執行文件,並且很樂意運行它。 – RichieHindle

4

創建嵌入並處於代碼/數據段的末尾的空字符串資源數據,計算出的偏移量,其中在所述值寫入到該空白區域,其中所述資源位置是。

不過話說回來,什麼是在自己保護你的程序的點...?

我不會走這條路線,而是採用了PE文件的商業保障計劃(本機C/C++代碼/庫和.NET)...例如,.NET可執行這是一個PE文件還,並且它們很容易被逆向工程(想到反射器)......看看很多這些所謂的warez,其中保護方案被破解並且使用序列號......您怎麼看?如果你仍然堅持自己做,那麼我的回答中的第一段應該會對你有所幫助。

我的2分錢想在這裏... 祝你好運,在你的保護計劃, 湯姆。

0

您可以使用Alternate Data Streams。 。 。您可以在其中打開並寫入文件名,如filename.exe:md5sig,以便md5sig是簽名的名稱空間。原始文件(駐留在未命名的默認命名空間中)及其數據將保留。 TheEruditeTroglodyte