算法难度:⭐⭐
爆破难度:⭐
信息收集
运行情况:
查壳与脱壳:
无壳
调试分析
C++窗口程序:
首先跟进窗口函数
然后是一段switch-case分支,或者是if-esle分支:根据消息码进入对应的处理,按钮的处理消息是WM_COMMAND,对应的值就是0x111
然后wParam是控件的id号,这里通过xspy发现验证按钮的id号是0x69,跟进这个0x69的跳转
这里调用了一个call就跳出了:
这个call 应该就是验证处理,前面初始化局部变量和获取控件值就不看了
这里两个红圈就是注册码生成逻辑,用Name计算一个值,然后变成十六进制字符串形式
注册机
注册码生成算法:(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));
}
效果: