selph
selph
Published on 2022-08-09 / 209 Visits
0
0

新160个CrackMe练习:032-Bengaly-Crackme2

算法难度:⭐⭐

爆破难度:⭐

信息收集

运行情况:

没有任何label,就2个框框输入和check

image

查壳与脱壳:

UPX壳,ESP定律即可

image

调试分析

是个手写窗口过程的程序,从头到尾跟进,这里就是调用自写函数

image

跟进以后,很明显的看到了窗口过程函数:

image

直接跟进到窗口过程里:发现,验证弹窗的过程正好就写在这里:

刚开始是先获取用户输入:

image

获取完成输入之后,对用户名进行一个处理,然后对序列号进行一个处理,就进行对比,如果相同,则跳转

用户名处理过程:

  1. 取一个字节
  2. 求平方,结果加到esi
  3. 右移这个字节1位,结果加到esi
  4. esi减去这个字节
  5. 然后循环处理每一个字节,最终结果在esi

image

对于序列号的处理,这个call实际上就是_atoi函数(已经不止一次逆这个函数了…)

image

直接就是反着操作一波,就可以还原序列号了

注册机

注册码生成算法:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

int main()
{
	char name[100] = { 0 };
	char serial[100] = { 0 };
	int len = 0;
	int check = 0;

	std::cin >> name;
	len = strlen(name);

	for (int i = 0; name[i]; i++)
	{
		char tmp = name[i];
		check += tmp * tmp;
		check += tmp >> 1;
		check -= tmp;
	}

	_itoa(check, serial, 10);
	std::cout << serial << std::endl;

	return 0;
}

结果:

image


Comment