C++ 源码常量加密,防逆向破解小技巧

C++ 源码常量加密,防逆向破解小技巧,第1张

C++ 源码常量加密,防逆向破解小技巧 写在前面

        做为个一个c++的搬砖猿,我很早之前就有一个想法。企图在c++代码编译时能够部分干预C++的编译过程,比如类似宏一样的行为,或者模板类的行为。在编译时才存在的一些代码或信息。而c++14 则提供了这样的特性。

实际效果

        

 代码如下:

int main()
{

	printf("%srn", ET("1234567890"));


	printf("%srn", ("9876543210"));


	system("pause");
}

        我们可以十分清除地看到,第一个字符串我使用了一个我自定义的宏ET()。而第二个printf我们像平常一样使用字符串常量。

        但是最后编译的程序中可以直接查找到 "9876543210" 这样的常量,而却无法找到"1234567890" 这样的常量,使用该特性可以十分方便地加密一些常量,从而避免一些常见的字符串入手的逆向分析。

        该办法也十分简单,利用类的构造和析构,以及编译时有效的一些变量(编译后以常量存在)即可实现。

后记

        该篇的重点不在于使用宏或模板实现常量加密,而在于使用c++的特性,以及了解编译和机器码生成过程的一些知识,这在开发中可以实现很多意想不到的功能。

        但该特性也存在很大的局限,可能是由于编译时需要模拟代码执行计算出常量,该方法尽量不使用递归或循环,否则程序编译会极大概率失败,且计算次数过多,编译器会放弃生成编译时常量,而让其编译成为正常的目标代码。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5636515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存