我想尝试以下方法:
我有一个C#程序,它接受一个文件作为输入,并为这五个MD5计算MD5算法。我的算法对每个文件都有唯一的值;这个值是一个128位的值,所以我想使用这种技术来保护我的程序,方法是将md5算法的输出值保存到我的PE文件中(假设值为X)。 PE将再次计算MD5值(对于自身)(假设值为Y),然后将X与Y进行比较。如果它是相同的值则可以运行;否则,它会退出。
我的问题是:如何将我的值写入PE文件?重要提示:我的算法是用C#编写的,所以我想用C#语言写入PE文件。
答案 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