我一直在考虑如何保护我的 C/C++
代码免受反汇编和逆向工程的影响。通常我自己不会在我的代码中宽恕这种行为。但是,为了各种人的安全,我一直在研究的当前协议不能被检查或理解。
现在这对我来说是一个新主题,互联网在预防逆向工程方面 并没有真正的足智多谋,而是描述了大量关于 如何逆向工程的信息
到目前为止,我想到的一些事情是:
代码注入(在实际函数调用之前和之后调用虚拟函数)代码混淆(破坏二进制文件的反汇编)编写我自己的启动例程(调试器更难绑定)
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);
}
无意义的分配和释放(堆栈变化很大)
毫无意义的虚拟呼叫和蹦床(反汇编输出中的大量跳跃)
吨铸件(用于混淆拆卸)我的意思是这些是我想到的一些事情,但它们都可以在正确的时间范围内由代码分析师解决和/或弄清楚。我还有其他选择吗?
欢迎分享,转载请注明来源:内存溢出