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

没有壳,是一个汇编写的程序
打开

输入看看

错误后就退出了

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

这里可以把je修改为 jne 或者 jmp
此为最简单的修改。
我们对软件进行分析,先从此位置向上找入口点
找到入口点是 401056

下面有一个跳转,这个跳过的内容没啥意义,所以我们可以直接把跳转后的目的地址 40106c 设置为入口点
然后我们运行程序并输入 123456 断在这里
然后就可以看到这个函数 GetDlgitemTextA 作用就是获取我们的输入

继续运行,直到我们运行过了这个函数,可以发现在堆栈中已经有我们的这个输入了

然后我们会经历下一个函数

00401153=<jmp.&KERNEL32.GetVolumeInformationA>
GetVolumeInformationA是 Windows API 中的一个函数,用于获取指定磁盘卷(如C盘、D盘)的详细信息,包括文件系统类型、卷标、序列号等。它是 ANSI 字符集版本(对应 Unicode 版本的GetVolumeInformationW)
在这里获取的就是我们磁盘的名字
然后运行过这个函数
可以发现读取的是我们磁盘的名字

然后下一个函数 00401141=<jmp.&KERNEL32.lstrcatA>
lstrcatA是 Windows API 中的一个字符串操作函数,用于将一个字符串(ANSI 版本)追加到另一个字符串的末尾。它是 C 标准库函数strcat的 Windows 实现,但增加了安全性检查(如空指针处理)
运行过这个函数就发现两个字符串被拼接好了

然后下面就是两次循环,每次循环给对应地址的数据加一

循环后的数据

可以发现方框中的数据都被加了2
然后又是2个拼接

然后就是进行一个比较 0040114D=<jmp.&KERNEL32.lstrcmpiA>
对比我们输入的 123456 是不是等于 L2C-5781肚俏E4562-ABEX

把对比的结果传给 eax
然后相等,那么 eax 结果为0,如果 eax 为0 那么 ZF =1,ZF=1 时,JE 就会进行跳转到正确的代码
我们输入正确的序列化试试

成果破解