0

如何使用 crc(循环冗余检查)保护 c++ 输出文件(pe 文件)不被编辑?

                            **Best Regards**
4

2 回答 2

1

您可以使用 CRC 来有效地检查文件是否被意外更改,但它们对于复制保护或防止游戏作弊无效。

通常,当我的程序进行某种 CRC 检查时,我会找到执行检查的代码,并将汇编指令从条件分支更改为无条件分支。这通常很容易找到,因为通常在 CRC 失败后,程序会显示一条消息并退出。我在消息发生时放置一个断点,并检查堆栈中的所有帧。然后,我在堆栈中的每个点上放置断点,再次运行程序,并查看哪个进行 CRC 检查。

这并不是特别困难,人们通常会捆绑一些小程序,这些程序会将相同的更改应用于您选择的软件。

于 2009-11-03T11:23:20.083 回答
1
  1. 您的代码中需要一个静态变量。需要将变量初始化为可以使用十六进制编辑器轻松找到的值(例如 DEADBEEF)
  2. 你需要一个 crc 算法(尝试搜索谷歌)
  3. 棘手的部分。您需要在内存中获取指向 exe 开头和结尾的指针。您可以解析代码位置的 pe 文件头,并从代码开始到代码结束运行 crc 算法。那么你就有了价值。
  4. 当然,您必须使用静态变量中的值检查计算值。
  5. 插入值 - 根据您构建的频率,您可能需要对工具进行编程。您始终可以运行程序并在比较时设置断点。然后记下该值并将其十六进制编辑到可执行文件中。或者您创建一个独立的程序来解析 pe-header,使用相同的函数(这次是在文件上)并将其修补。但这可能很复杂,因为我不知道操作系统在加载。
于 2009-11-03T12:29:59.347 回答