算法难度:⭐⭐
爆破难度:⭐
信息收集
运行情况:
查壳与脱壳:
无壳,MFC程序
字符串:
提示字符串
调试分析
静态分析从字符串入手或者从函数调用的交叉引用入手比较方便,可以查MessageBox函数的调用,也可以查提示信息字符串的交叉引用,这里从后者入手(方便),这个字符串大概率会出现在校验函数里
首先进行两个操作,判断编辑框输入的长度,用户名和序列号得是大于5,然后保存到局部变量里CString
接下来保存Name和Serial,分别对这两个值进行了一个运算:
再往下就是strcmp了:两个计算后的结果相同,则跳转到成功分支
注册机
#include <iostream>
int main()
{
char name[20] = "selph1";
char serial[20] = { 0 };
int Len = strlen(name);
for (int i = 0; name[i]; i++) serial[i] = name[i] ^ (i + 1);
for (int i = 0; serial[i]; i++) serial[i] = serial[i] ^ (i + 10);
std::cout << serial;
}
效果:
总结
感觉已经看这种反汇编越来越快了