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

新160个CrackMe练习:051-Keygenning4newbies

算法难度:⭐⭐

爆破难度:⭐

信息收集

运行情况:

image

查壳与脱壳:

无壳

image

调试分析

C++窗口程序:

首先跟进窗口函数

image

然后是一段switch-case分支,或者是if-esle分支:根据消息码进入对应的处理,按钮的处理消息是WM_COMMAND,对应的值就是0x111

image

然后wParam是控件的id号,这里通过xspy发现验证按钮的id号是0x69,跟进这个0x69的跳转

image

这里调用了一个call就跳出了:

image

这个call 应该就是验证处理,前面初始化局部变量和获取控件值就不看了

这里两个红圈就是注册码生成逻辑,用Name计算一个值,然后变成十六进制字符串形式

image

注册机

注册码生成算法:(CSharp)

string? Name = Console.ReadLine();
if(Name!=null && Name.Length is > 3 and < 32)
{
    int ebx=0;
    int eax=0;
    for (int i = 0; i < Name.Length; )
    {
        eax = (int)Name[i++];
        eax ^= i;
        ebx += eax;
    }

    eax *= 6;
    ebx <<= 7;
    eax += ebx;
    Console.WriteLine(string.Format("{0:X}", eax));
}


效果:

image


评论