算法难度:⭐⭐
爆破难度:⭐
信息收集
运行情况:
查壳与脱壳:
调试分析
虽然上面写的Delphi程序,然而IDR并不能识别,使用DD去反编译倒是成功了,可能版本Delphi太低吧
找到按钮函数:
逻辑很简单:获取Serial,获取Name,对Serial计算一个值,对Name计算一个值,然后进行比对
对Serial的计算:
首先判断第一个字符是否合法,不合法就跳转
然后是一个循环,分析发现,又分析了一遍_atoi函数
这个计算的本质就是把Serial字符串转换成数字
对Name的计算:
依然很简单,累乘每一个字节,得到最后的累乘值
注册机
注册码生成算法:
#include <iostream>
int main()
{
char name[100] = { 0 };
char serial[100] = { 0 };
int checknum = 1;
// Name计算出校验值
std::cin >> name;
for (int i = 0; i < strlen(name);i++) {
checknum *= name[i];
}
checknum &= 0x0FFFFFFF;
// 校验值反推Serial
printf("%d",checknum);
}
效果: