【发布时间】:2017-07-19 19:23:28
【问题描述】:
我想编写一些简单的防篡改机制,在运行时计算某个函数(或基本块)的校验和,并将其与固定的预计算值进行比较。如果校验和匹配,那么一切都很好;否则程序终止。
我可以在运行时轻松计算校验和,但我不知道如何计算固定值进行比较。
我想我必须在编译后对二进制文件进行一些后期处理,因为在编译时不可能知道校验和(对吗?)。
但是如何在二进制代码中找到与我的函数(或基本块)相对应的代码点?我可以使用一些十六进制编辑器手动执行此操作,但我想自动化该过程。预先计算校验和后,我需要修改二进制文件以包含它 - 但这再次需要能够在二进制文件中找到正确的位置。
对解决方案有什么建议吗?
【问题讨论】:
-
在我看来你会过得很糟糕。在 C++ 中编译函数的方法不止一种,因此没有预定义的方法来预计算期望值。也许解释型语言更适合您的任务?
-
谢谢,但这就是为什么我建议进行一些后期处理。
-
@Shuzheng 你到底想达到什么目的?也许有比在可执行/共享库中这样做更好的方法。
-
我想实现防篡改机制。
标签: c++ security binary x86 obfuscation