1.abexcm5

crackme author : abex
tutorial author : HaQue
Type : Serial
level : easy

1. 查壳

Pasted image 20250407213719
没有壳,是一个汇编写的程序

2. 运行情况

打开
Pasted image 20250407213815
输入看看
Pasted image 20250407213827
错误后就退出了

3. 分析

3.1. 查看字符串

Pasted image 20250407214016
我们按照顺序去查看
发现这里就是一个跳转,跳转就是正确的
Pasted image 20250407214156

3.2. 方法一:修改je跳转逻辑

这里可以把je修改为 jne 或者 jmp

此为最简单的修改。

3.3. 方法二:获取正确序列号

我们对软件进行分析,先从此位置向上找入口点
找到入口点是 401056
Pasted image 20250407220110
下面有一个跳转,这个跳过的内容没啥意义,所以我们可以直接把跳转后的目的地址 40106c 设置为入口点

然后我们运行程序并输入 123456 断在这里
然后就可以看到这个函数 GetDlgitemTextA 作用就是获取我们的输入
Pasted image 20250407220444
继续运行,直到我们运行过了这个函数,可以发现在堆栈中已经有我们的这个输入了
Pasted image 20250407220630
然后我们会经历下一个函数
Pasted image 20250407220734
00401153=<jmp.&KERNEL32.GetVolumeInformationA>

GetVolumeInformationA 是 Windows API 中的一个函数,用于获取指定磁盘卷(如C盘、D盘)的详细信息,包括文件系统类型、卷标、序列号等。它是 ANSI 字符集版本(对应 Unicode 版本的 GetVolumeInformationW

在这里获取的就是我们磁盘的名字
然后运行过这个函数
可以发现读取的是我们磁盘的名字
Pasted image 20250407221431

然后下一个函数 00401141=<jmp.&KERNEL32.lstrcatA>

lstrcatA 是 Windows API 中的一个字符串操作函数,用于将一个字符串(ANSI 版本)追加到另一个字符串的末尾。它是 C 标准库函数 strcat 的 Windows 实现,但增加了安全性检查(如空指针处理)

运行过这个函数就发现两个字符串被拼接好了
Pasted image 20250407221812
然后下面就是两次循环,每次循环给对应地址的数据加一
Pasted image 20250407221925
循环后的数据
Pasted image 20250407222004
可以发现方框中的数据都被加了2

然后又是2个拼接
Pasted image 20250407222349

然后就是进行一个比较 0040114D=<jmp.&KERNEL32.lstrcmpiA>
对比我们输入的 123456 是不是等于 L2C-5781肚俏E4562-ABEX
Pasted image 20250407222522
把对比的结果传给 eax
然后相等,那么 eax 结果为0,如果 eax 为0 那么 ZF =1,ZF=1 时,JE 就会进行跳转到正确的代码

我们输入正确的序列化试试
Pasted image 20250407223230
成果破解