我一直在考虑如何保护我的C/C++代码免受反汇编和逆向工程的影响.通常情况下,我自己在代码中永远不会宽恕这种行为;然而,为了不同人群的安全,我正在制定的现行协议永远不能被判断或理解.
现在这对我来说是一个新的课题,互联网对prevention against reverse engineering人来说并不是真正的足智多谋,而是描述了关于how to reverse engineer的大量信息.
到目前为止,我想到的一些事情是:
- 代码注入(在实际函数调用之前和之后调用伪函数)
- 代码混淆( destruct 二进制文件的反汇编)
-
编写自己的启动 routine (调试器更难绑定)
void startup(); int _start() { startup( ); exit (0) } void startup() { /* code here */ }
调试器的运行时判断(如果检测到则强制退出)
-
多功能蹦床
void trampoline(void (*fnptr)(), bool ping = false) { if(ping) fnptr(); else trampoline(fnptr, true); }
无意义的分配和解除分配(堆栈变化很大)
- 无意义的虚拟呼叫和蹦床(分解输出中的大量 skip )
- 数吨铸件(用于模糊拆卸)
我的意思是,这些都是我想过的事情,但是只要有合适的时间框架,代码分析师都可以解决和/或解决这些问题.我还有别的 Select 吗?