逆向学习crackme160题-012-ACG-crcme1 的 write up

012-ACG-crcme1 的 write up

我是原站作者

  1. 程序执行加查壳

    输入name和注册码,然后弹出错误信息,视为关键提示字符串,Info查看软件相关信息。无壳。

    image-20221011111241792

2. 分析

拖入OD,然后搜索字符串如下图:

image-20221011171905133

跟踪进去如下图:

image-20221011172022765

显然,第一个提示框应该就是成功提示框了,在他之前的跳转一定就是关键跳转。

然后我们看如下的关键函数部分了:

image-20221011182324180

解释:第一个GetDlgItemTextA是获取输入的name长度到eax,内容保存到00402106,第二个是读取输入的注册码内容存入0040212E。然后就是有关name的计算处理。

还有有关注册码的计算方式如下图:
image-20221011183616599

但是后面我发现,前面的分析好像错了,主要是我猜错了成功提示。主要还是看到info,有关文件的信息,如下图:

image-20221015145948927

解释:可以看到有很多的乱码,所以这并不是一格正规的英文程序,所以包括我前面找的字符串也是很多乱码,并不正确。在这里我们还是能看到有一个关键的提示“KEY-FILE”

而且在退出程序的时候出现烦人的NAG,这个就是很多收费软件都会有的弹窗,如下图:所以接下来我们先来学习如何破解NAG:

image-20221015150643972

首先在OD中智能搜索字符串如下图,选择最后一个跟踪:

image-20221015151114668

下断点后只执行到这,如下图:

!

image-20221015151203987

在堆栈中右键——>反汇编窗口中跟随:

image-20221015151403698

然后我们就可以看到他调用函数得地方:

image-20221015151541744

最后我们要破解这个弹窗不让他显示的话就可以修改cmp对比的数字,或者jnz指令。

后面我们在来进行算法的分析

IDA查找字符串如下图:

image-20221015150324433

解释:我们可以在最下面看到一个类似key文件的文件名。跟踪

然后就可以看到关键的算法如下:

image-20221015152424631

解释:从40106E开始后面都是注册码区文件内容的单个字符的异或运算了。rol为左移运算

最后异或的结果要等于0,否则就会跳转。

然后依次得到12个密钥是:【0x168,0x160,0x170,0x0EC,0x13C,0x1CC,0x1F8,0x0EC,0x164,0x1F8,0x1A0,0x1BC】

3. 注册机的编写

#include <stdio.h>
#include <string.h>
int main()
{
	int serial[12] = { 0 };
	int arr[12] = {0x168,0x160,0x170,0x0EC,0x13C,0x1CC,0x1F8,0x0EC,0x164,0x1F8,0x1A0,0x1BC };
	char key[13] = { 0 };
	for (int i = 0; i < 12; i++)
	{
		serial[i] = arr[i] ^ 0;
		serial[i] >>= 2;
		serial[i] = serial[i] ^ 0x1B;
		key[i] = serial[i];
	}
	printf("serial: %s\n",key);
	system("pause");
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是乙太呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值