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
就会进行跳转到正确的代码
我们输入正确的序列化试试
成果破解