selph
selph
发布于 2022-07-21 / 226 阅读
0
0

新160个CrackMe练习:023-TraceMe

算法难度:⭐⭐

爆破难度:⭐

信息收集

运行情况:

看标语,这是个来自看雪论坛的CM

image

查壳与脱壳:

C++的GUI程序,无壳

image

调试分析

程序一进去就是WinMain,这里的这个参数是窗口过程,从这里找内容:

image

窗口过程函数里,往下面拉一点就能看到获取控件内容的API,分别获取Name和Serial,然后调用了函数sub_401340,这应该就是校验函数了

image

校验函数分析:这里有一个硬编码的字节数组,从索引0开始,每轮循环+1,遍历用户名的索引从3开始,每轮循环+1

每次索引到一个用户名中的值和一个硬编码字节数组的值,然后相乘,

把每轮的结果加起来,转换成字符串与输入的序列号进行对比,相同则表示校验成功

image

注册码生成算法:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

int main()
{
    char name[10] = "selph";
    char arr[8] = { 0xC, 0xA, 0x13, 0x9, 0xC, 0xB, 0xA, 0x8 };
	char serial[20] = { 0 };
	int sum = 0;

	for (int i = 3,j=0; name[i]; i++,j++)
	{
		if (j > 7)j = 0;
		sum += name[i] * arr[j];
	}
	sprintf(serial, "%ld", sum);
	std::cout << serial;
}

结果:

image


评论