我需要在确保文件完整性方面具有一定经验的人的意见。 我正在尝试使用 crc 校验和来保护我的文件的完整性。我的主要目标是更难绕过许可证文件检查(包括反汇编可执行文件和删除条件跳转)。
我想到了以下想法:
unsigned long crc_stored = 4294967295;
char* text_begin = (char*)0xffffffffffffffff;
char* text_end = (char*)0xffffffffffffffff;
int main(){
unsigned long crc = calc_checksum(text_begin, text_end);
if (crc == crc_stored)
//file is ok
}
我按以下方式编辑 elf 二进制文件的 .data
部分:text_begin
和 text_end
将包含.text
部分,crc_stored
.text
部分的 crc 校验和。
我想知道这样做是否正确,或者有更好的方法吗?
编辑:Karoly Horvath 说得对。假设我使用 crc 校验来解密一些代码。我想知道 ro 校验和保护可执行文件的最佳方式是什么。 奥拉夫也有权利。我可以使用 sha 算法。问题是一样的。
Edit2:请不要再说任何保护都可以绕过。我知道,我只是想让它变得更难。如果可以,请回答问题。
最佳答案
让我看看。您有执行此操作的代码:
int main() {
if (!license_ok()) { exit(1); }
// do something useful
}
您担心有人会反汇编您的代码,并修补条件跳转,因此您建议改为这样更改代码:
int main() {
if (calc_checksum() != stored_crc) { exit(1); }
if (!license_ok()) { exit(1); }
// do something useful
}
我希望你明白这个“解决方案”根本不是一个真正的解决方案(如果有人能够修补一个条件跳转,肯定他同样有能力修补两个这样的跳转).
关于ELF文件的CRC校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33734130/