gpt4 book ai didi

c++ - 内存中函数的校验和

转载 作者:搜寻专家 更新时间:2023-10-31 00:21:39 25 4
gpt4 key购买 nike

我正在为一个程序做一种反黑客的东西,我希望能够创建一个函数字节的校验和,看看它是否被修改了。我知道如何计算校验和,但我如何获得我应该校验和的字节数?有没有办法获取我的函数的大小?

最佳答案

甚至不要尝试。你不能假设一个函数在内存中是连续的:它可能有起始地址低于入口点的基本 block ;它可以与其他函数共享尾随的基本 block ;它可能包含散布的数据或对齐字节,也可能完全消失,具体取决于调用站点(由于编译器决定内联函数)。

您的代码无法知道生成函数的大小。想一想:大小完全取决于编译器发出的内容,并且取决于各种编译器设置和标志(考虑优化、大量内联的发布版本与调试版本或使用像 SSE 这样的增强指令集与不使用它们).

此外,正如已经指出的那样,这样的校验和检查对于黑客来说是微不足道的 - 只是您必须反转的另一个分支。

最后,作为好奇者的练习,因为潜在的恶意黑客也会使用它,我建议通过 IDA Pro 反汇编程序锁定您的二进制文件。这将使您预期的反黑客缓解措施中的许多问题变得显而易见......

如果您真的想继续沿着这条路走下去,我建议您使用 anti reversing resources或对您的代码运行后处理步骤
a)通过插入连接它们的跳转将您的所有功能链接在一起,这些跳转将永远不会被采用。隐藏不透明谓词后面的分支。这将使反汇编难以阅读/理解,甚至会破坏一些反汇编程序进行静态流分析,因为由此产生的巨大函数大小。
b) 通过单个大分支函数重定向所有函数调用。这会对您的代码产生性能影响,但也会使调用图完全无法使用/不可读。

关于c++ - 内存中函数的校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com