selph
selph
发布于 2022-08-25 / 183 阅读
0
0

新160个CrackMe练习:052-tc.2

算法难度:⭐⭐⭐⭐

爆破难度:⭐⭐⭐

信息收集

运行情况:

image

查壳与脱壳:

image

调试分析

老版本delphi看着就烦

构造正确的keyfile

首先是打开文件,读取其中的内容,对比内容是否为这个固定值

image

然后判断内容的长度,内容的长度为固定值0x17字节

image

条件满足了就会启用编辑框和注册按钮:

image

校验算法分析

这个call里有一堆代码不知道在干嘛,可能是编译器自动生成的吧,这里就挑有用的看

首先是这里,这里是个循环,这个ReadChar函数盲猜是读取Name的一个字节,然后保存到局部变量ebp-0D里

然后取出读取的这一个字节,和初值是0的bl进行一系列计算,得到一个值,将这个值累加到si里,对于每个字符都这么操作

最后判断si的值是否大于一个固定值,否则就加上一个固定值

image

再往后就是生成真码和比较的过程了:

首先将计算出来的累加值si转字符串,然后往第3和第5个字符处插入-符号,然后就是比对和输入是否相同,不同就跳转,相同就提示成功

image

注册机

注册码生成算法:(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);

效果:

image

总结

分析无意义的代码真是浪费时间!应该从判断条件开始自下往上去分析!


评论