selph
selph
Published on 2022-09-01 / 260 Visits
0
0

新160个CrackMe练习:061-TDC-keyfileme

算法难度:⭐⭐⭐

爆破难度:⭐⭐

信息收集

运行情况:

image

查壳与脱壳:

无壳:

image

调试分析

IDA分析,老样子,找到按钮事件:

可以发现,这里调用了一个call,然后根据变量的值来显示不同的内容,这个值应该就是在这个call里设置的

image

进去看看:

首先判断文件大小需要是32字节,然后读取前10字节,从后往前排除存在的空格,然后跳转

image

接下来计算了一下Buffer的长度,对读取到的内容进行累加操作

累加完之后,乘一个数,然后转换成十六进制保存在字符串里

image

然后接下来读取后16字节,依然是从后往前找到非空格

这个keyfile是用空格来填充空位的

image

找到之后拿后10h字节的Buffer和刚刚生成的字符串进行对比,对比成功,返回4到res变量里,这个返回值就是验证成功的意思

image

注册机

注册码生成算法:

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>

int main()
{
    char buffer1[0x10] = "123456789abcdef";
    char buffer2[0x10] = "               ";
	int sum = 0;
	for (int i = 0; i < strlen(buffer1); i++)
		sum += (buffer1[i] + 0xf) ^ 0x20;
	sum *= 0x7a69;
	sprintf(buffer2, "%X", sum);
	std::cout << buffer1 << " " << buffer2;

}

得到的字符串复制到十六进制编辑器里,最后不满32字节的部分用0x20填充

31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 00
32 39 42 30 41 32 42 20 20 20 20 20 20 20 20 20

效果:

image


Comment