来自看雪学院
明码泄漏最有名的利用就是+ORC提出的数据约束性的秘诀(Data_constraint),其依据参数
或局部变量通常都是存储在堆栈中的,而软件作者一般都使用局部变量存放临时计算出来的
注册码,以比较真假,使得它们的位置很接近.
像"序列号"=F(用户名)算法计算出来的序列号是以明文形式在内存中出现的,很容易
在内存中找到它,从而获得注册码.
虽然有时算法控制的好,但稍不留意还会造成明码泄漏,这样的例子很多,本期话题就讨论如
何避免明码泄漏.
1.我想就是把序列号分步算,分步验证,就算泄漏也不会同时全部泄漏.再就是算法中故意出
来很多假的明码,迷惑破解者
2.F(序列号)==F(用户名)
F(序列号)==用户名
比如对序列号采用一种算法处理,生成tempSn,然后对用户名采用另外一种算法处理,生成
tempName,如果tempSn ==tempName
这些算法可以采用对称密码学算法或者公钥密码学算法实现
3.编程的时候写个字符串加密类继承处理所有处理的明文的字符串类,并且修改编译器的头文
件,将所有定义字符串和字符的关键字改名,并用具有加密性质的宏替代.
4.如果真的需要储存计算出来的数据,以不想直接存放到stack或heap,可以考虑用
linke list把每一个字节分散储存
typedef struct tagDATA
{
char data;
struct tagDATA*next;
}DATA;
每一个新建的结构都用malloc或VirtualAlloc(可以指明位置)来取得空间
浙公网安备 33010602011771号