序列号保护机制:
① 序列号 = F(用户名)
将序列号与变换后的用户名作对比。非常容易被攻破。
② F-1(序列号) = 用户名
将序列号进行逆变换,然后与用户名进行对比。穷举法,求逆算法,输入序列号然后得到用户名从而得到一对正确的输入。
③对等函数检查 F1(用户名) = F2(序列号)
④二元函数 F(用户名,序列号) = 特定值
⑤ 其它
如何攻击:
①利用特定 API ,GetWindowTextA(),GetDlgItemInt(),hmemcpy(仅 win 9x / Me)
②序列号存放在注册表中,使用 RegQueryValueExA;放在 INI 文件中,使用 GetPrivateProfileStringA,GetPrivateProfileIntA,GetProfileA,GetProfileStringA;
放在一般文件中,使用 CreatFileA,_lopen 等函数。
③数据约束性或者密码相邻性。正确的注册码一般会在某个时刻出现在距离用户输入序列号内存地址的 ±90h 处。
④利用消息断点
⑤利用提示信息
⑥利用插件或手动将加密算法提取出来,嵌入高级代码中调用