将值写入PE文件

时间:2009-11-22 22:32:51

标签: c# portable-executable

我想尝试以下方法:

我有一个C#程序,它接受一个文件作为输入,并为这五个MD5计算MD5算法。我的算法对每个文件都有唯一的值;这个值是一个128位的值,所以我想使用这种技术来保护我的程序,方法是将md5算法的输出值保存到我的PE文件中(假设值为X)。 PE将再次计算MD5值(对于自身)(假设值为Y),然后将X与Y进行比较。如果它是相同的值则可以运行;否则,它会退出。

我的问题是:如何将我的值写入PE文件?重要提示:我的算法是用C#编写的,所以我想用C#语言写入PE文件。

3 个答案:

答案 0 :(得分:4)

一种选择是简单地将您的值附加到文件的末尾。 Windows非常乐意将任意数据附加到可执行文件中 - 例如,自解压zip文件的工作方式就是这样。

编辑以回应Hany的评论:它对我有用,以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>

(你确实以二进制模式进行文件操作,不是吗?)

答案 1 :(得分:4)

创建一个嵌入的空字符串资源数据并位于代码/数据段的末尾,计算出将值写入资源位置所在空白点的偏移量。

但话说回来,保护自己的节目有什么意义呢?

我不会走那条路,而是采用PE文件的商业保护方案(Native C / C ++代码/库和.NET)......例如,.NET可执行文件也是PE文件,并且它们很容易被逆向设计(想到反射器)......看看很多这些所谓的warez,其中保护方案被破解并使用序列号......你怎么看?如果你仍然坚持自己这样做,那么我的答案中的第一段应该对你有帮助。

我的2美分想到这里...... 祝福您的保护计划,祝您好运, 汤姆。

答案 2 :(得分:0)

您可以使用Alternate Data Streams。 。 。您可以在其中打开并写入filename.exe文件名:md5sig,以便md5sig是签名的命名空间。原始文件(驻留在未命名的默认命名空间中)及其数据保持不变。 TheEruditeTroglodyte