ELF文件的CRC校验和

标签 c linux security elf crc32

我需要在确保文件完整性方面具有一定经验的人的意见。 我正在尝试使用 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_begintext_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
}

我希望你明白这个“解决方案”根本不是一个真正的解决方案(如果有人能够修补一个条件跳转,肯定他同样有能力修补两个这样的跳转).

您可以在 one 中找到更合理/更可靠的解决方案的想法。的 many books关于这个问题。

关于ELF文件的CRC校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33734130/

相关文章:

C: 链接器命令失败,退出代码为 1

c - 删除缓冲区 C 前后 20 个空格

linux - 将 Web 服务器从端口 5000 重定向到本地主机上的端口 80 (Fedora)

c# - 在 Mono 3 (Ubuntu 12.10) 上使用 WinForms

c - 需要帮助结合两个C代码

php - 一段时间后如何扣几张信用卡?

c - 有没有办法增加堆栈大小/递归限制?

c - 访问作为参数传递的字符串会导致堆栈缓冲区溢出

java - 访问谷歌应用引擎上的URL

security - 安全页面上的百度 map 实现