前言
此文用于学习分享,请勿用做非法用途。发布到此,仅供阅读参考,如有侵权,请通知我,我会删掉。
1. 文件信息
项目 | 内容 |
---|---|
文件名 | INSTALL.exe |
文件大小 | 573 MB (601,389,682 Bytes) |
Hash(MD5) | c35c2dabc8843e1a443fb2183066fdeb |
编译器 | Microsoft Visual C/C++(5.0)[-] |
作用 | 安装软件 |
运行情况 | 正常 |
2. 分析环境
项目 | 分析环境 |
---|---|
OS | Windows 11 家庭中文版 |
CPU | 11th Gen Intel® Core™ i7-11800H @ 2.30GHz 2.30 GHz |
RAM | 16.0 GB (15.7 GB 可用) |
项目 | 分析工具 |
---|---|
x32dbg | 2022-10-03_21-46 |
Detect It Easy | v3.06 |
3. 分析摘要
可以绕过密码验证的方式有很多种,此文以分析密码算法并且通过密码验证为重点进行分析。
- 输入了正确密码
- 输入了错误的密码
4. 详细分析
Ⅰ Install过程
从安装过程开始进行说明。将ISO文件解压之后,打开INSTALL.exe文件之后出现设置窗口,点击INSTALL按钮,同意条款之后会出现下面这个画面。首先让我们输入ID和13位CD-key。
接下来在用户名处输入’aaaa’,密码处输入’1111 11111 1111’之后,程序会弹出以下窗口。
Ⅱ 密码算法分析(1)
使用x32dbg打开文件对算法进行分析,在同意条款窗口弹出之后将程序停止,分析内部函数是如何工作的。继续运行在输入CD-key并且点击’OK’之后,发现程序存在install.402D30函数,该函数使用时会向堆栈中放入错误文本,之后调用MessageBoxA函数创建密码错误窗口。猜测是输入密码之后利用某种算法计算出了错误的值才导致这个函数被启用。
以找到算法代码为目标,重新运行程序。我们在0040F8DE处可以发现比较CD-key的算法,仔细观察算法可以发现此算法主要由两部分构成。第一个部分是通过对CD-key进行计算后得出某个结果并且保存,第二个部分是将运算的结果和某个值进行比较。
仔细分析第一部分的代码的话,可以发现这是一个类似do-while文,对密码进行循环计算。首先,将eax,edx寄存器初始化。然后进入循环,将输入CD-key按照输入的顺序一个一个载入算法,判断这个数字是否是0或者9。下面是把加密算法用C语言实现的代码。由于输入的CD-key是以数列的方式储存的,edx寄存器在这里起到了记录循环次数的目的,同时也起到了数列索引的作用,在每次循环结束的时候都会加一。计算的结果存在于eax之中。
对13位构成的CD-key的前12位进行计算,并且将结果存于eax中。比如,输入’1111 11111 1111’的情况,第一次循环的结果是eax=A,再循环一次的结果是eax=1F。
Ⅲ 密码算法分析(2)
经过12次循环之后的结果会准备进行比较。算法先将ecx用’A’初始化,然后对eax寄存器使用div命令,除法的余数会和CD-key最后一位进行比较。具体的步骤是使用div命令,对eax寄存器里的结果除以’A’,结果存于eax而余数存于edx中。然后将edx的余数加30之后,和CD-key的最后一位数的ASCII数字进行比较,相同的话就会进入软件安装窗口。
总结一下,这个是对前12位CD-key进行计算,计算出的结果和最后一位数字进行比较的算法。在输入’1111 11111 1111’的情况下想要绕过保护机制,只需要将最后一位数字改成3。也就是变成’1111 11111 1113’,就可以进入安装界面。