C/C++ 通过CRC32实现反破解
2023-06-13 09:16:22 时间
我们可以通过使用CRC32算法计算出程序的CRC字节,并将其写入到PE文件的空缺位置,这样当程序再次运行时,来检测这个标志,是否与计算出来的标志一致,来决定是否运行程序,一旦程序被打补丁,其crc32值就会发生变化,一旦发生变化,程序就废了,绕过的方式则是,1.动态打补丁,2.找到crc32算法位置将跳转nop掉,3.直接手动计算出crc32并覆盖到原始程序的crc算法位置。
对文件的CRC32检测
PE头,前面有非常多的无效空间,可以供我们使用,crc32地址应该反写。
另一种通过使用 MapFileAndCheckSum 实现的反破解,先来修改一下C++编译器配置,使其能够支持
C/C++ -> 常规 -> 调试信息格式 --> 程序数据库
连接器 -> 常规 -> 启用增量链接 -> 否
连接器-> 高级 ->设置校验和 ->是
主程序检测程序如下。
对磁盘的CRC32检测
对磁盘完整性检测只能防止文件被修改,但无法防止内存补丁,下面的代码将可以检测内存变化,如果内存被打补丁,则会退出执行。
原理是,定位到.text节首地址,然后计算该节的CRC32值,并存入全局变量,然后开一个线程进行循环检测,一旦发生变化,则立即让程序报废。部分代码片段。
上方代码是保护了整个程序,在实际应用中,有时我们只需要保护其中一个片段代码就好,这样可以提高效率,所有我们对上面代码稍作修改即可实现针对特定片段的内存校验.
相关文章
- C++ lamda表达式[通俗易懂]
- C++和java的区别和联系「建议收藏」
- c++获取子类窗口句柄位置_C++中各种获取窗口句柄的方法「建议收藏」
- 10min快速回顾C++语法(二)
- 【c++】【基础】【primer_plus】【第三章】基本数据类型
- C++stl库_c++库
- C++结构体和类的区别_c++有结构体吗
- C++字符串加密_c++字符串连接函数
- C/C++ 将ShellCode注入进程内存
- C/C++ Rootkit 实现进程伪装
- c++存储类
- c++基础篇之C++ 模板
- 开心档之C++ 预处理器
- codeblocks c++11 pthread详解程序员
- C++构造函数和析构函数调用顺序详解
- C++ if语句嵌套使用方法详解
- C++自定义复制构造函数详解
- 深入浅出使用CMySQL编写有效代码(c++ mysql 代码)
- c++临时对象的来源
- C++中对象的常引用总结