哈哈,我找到解了。
CrackMe算法分析:
1、用户名:不能有2种以上的重复字符。长度范围8 - 12
2、Code:转换成整数必须大于某指定的值。
以上两条保证算法的容错性。
算法大致流程:
1、用户名转大写,然后排序。例如:dcba1234 -> 1234ABCD
2、用Code做Key对上述字符串作移位密码运算:
常量:a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13
以1234ABCD作为例子:用户名长度 = 8
新串顺序:
Code = Code % a9
字符一: '1234ABCD'[Code / a8], Code = Code % a8 假设为 'A'
字符二:'1234BCD'[Code / a7], Code = Code % a7 假设为 'C'
字符三:'1234BD'[Code / a6], Code = Code % a6 假设为 '4'
字符四:'123BD'[Code / a5], Code = Code % a5 假设为 '2'
字符五:'13BD'[Code / a4], Code = Code % a4 假设为 'D'
字符六:'13B'[Code / a3], Code = Code % a3 假设为'1'
字符七:'3B'[Code / a2], Code = Code % a2假设为'3'
字符八:'B'[Code / a1], Code = Code % a1假设为'B'
那么一位密码后的结果:'AC42D13B'
该结果与原用户名:'DCBA1234'做比较。
求解过程:
理解了上述过程,就很容易得到解了:找到排序后的串中个字符的移位值,根据常数反算Code,由于做了模数运算,而且是移位运算,所以存在多对多的解。
附上Delphi注册机: