selph
selph
发布于 2022-07-19 / 228 阅读
0
0

新160个CrackMe练习:012-ACG-crcme1

算法难度:⭐⭐

爆破难度:⭐

信息收集

运行情况:

image

查壳与脱壳:

无壳

image

查字符串:

有很多看不懂的提示语,还有个文件名

image

调试分析

抄起IDA直接干,用户函数就3个,这么简洁这应该是纯汇编写的程序吧(猜的),从start开始分析

image

首先打开一个文件,读取其中的内容,该内容应该长度是12字节:

image

然后就像下面这样,对12个字节的每个字节进行一个运算,逐一校验结果

image

然后接下来就是,如果验证全部通过,就弹窗提示ok,否则就直接启动窗口

暴力破解

把所有判断跳转都nop掉即可

算法分析

序列号运算的核心是异或,异或是可逆的,所以可以反着把序列号生成出来:

#include <iostream>

int main()
{
	int arr[12] = { 0x168,0x160,0x170,0xec,0x13c,0x1cc,0x1f8,0xec,0x164,0x1f8,0x1a0,0x1bc };
	int serial[12] = { 0 };
	for (int i = 0; i < 12; i++)
	{
		serial[i] ^= arr[i];
		serial[i] >>= 2;
		serial[i] = serial[i]&0x000000FF ^ 0x1b;
	}
	for(char var : serial)
	{
		printf("%c",var);
	}
}

计算结果是:ACG The Best

执行结果:

image

总结

很简单无脑的一次算法分析


评论