算法难度:⭐⭐⭐⭐
爆破难度:⭐⭐⭐
信息收集
运行情况:
查壳与脱壳:
调试分析
老版本delphi看着就烦
构造正确的keyfile
首先是打开文件,读取其中的内容,对比内容是否为这个固定值
然后判断内容的长度,内容的长度为固定值0x17字节
条件满足了就会启用编辑框和注册按钮:
校验算法分析
这个call里有一堆代码不知道在干嘛,可能是编译器自动生成的吧,这里就挑有用的看
首先是这里,这里是个循环,这个ReadChar函数盲猜是读取Name的一个字节,然后保存到局部变量ebp-0D里
然后取出读取的这一个字节,和初值是0的bl进行一系列计算,得到一个值,将这个值累加到si里,对于每个字符都这么操作
最后判断si的值是否大于一个固定值,否则就加上一个固定值
再往后就是生成真码和比较的过程了:
首先将计算出来的累加值si转字符串,然后往第3和第5个字符处插入-符号,然后就是比对和输入是否相同,不同就跳转,相同就提示成功
注册机
注册码生成算法:(CSharp)
string? name = Console.ReadLine();
byte bl = 0;
var si = 0;
for(byte i = 1; i <= name.Length; i++)
{
byte tmp = (byte)name[i-1];
bl -= tmp;
bl += i;
si += bl;
}
while (si < 0x438D) si += 0x45e6;
var serial = string.Format("{0:D}", si);
serial = serial.Insert(2, "-");
serial = serial.Insert(4, "-");
Console.WriteLine(serial);
效果:
总结
分析无意义的代码真是浪费时间!应该从判断条件开始自下往上去分析!