【逆向分析】星际争霸1998 - 绕过密码验证

前言

此文用于学习分享,请勿用做非法用途。发布到此,仅供阅读参考,如有侵权,请通知我,我会删掉。

1. 文件信息

项目内容
文件名INSTALL.exe
文件大小573 MB (601,389,682 Bytes)
Hash(MD5)c35c2dabc8843e1a443fb2183066fdeb
编译器Microsoft Visual C/C++(5.0)[-]
作用安装软件
运行情况正常

2. 分析环境

项目分析环境
OSWindows 11 家庭中文版
CPU11th Gen Intel® Core™ i7-11800H @ 2.30GHz 2.30 GHz
RAM16.0 GB (15.7 GB 可用)
项目分析工具
x32dbg2022-10-03_21-46
Detect It Easyv3.06

3. 分析摘要

可以绕过密码验证的方式有很多种,此文以分析密码算法并且通过密码验证为重点进行分析。

  1. 输入了正确密码
    在这里插入图片描述
[图片1] 输入正确密码的流程
  1. 输入了错误的密码
    在这里插入图片描述
[图片2] 输入错误密码后的流程

4. 详细分析

Ⅰ Install过程

从安装过程开始进行说明。将ISO文件解压之后,打开INSTALL.exe文件之后出现设置窗口,点击INSTALL按钮,同意条款之后会出现下面这个画面。首先让我们输入ID和13位CD-key。
图片3

[图片3] 输入用户名与密码窗口

接下来在用户名处输入’aaaa’,密码处输入’1111 11111 1111’之后,程序会弹出以下窗口。
在这里插入图片描述

[图片4] 密码验证错误窗口

Ⅱ 密码算法分析(1)

使用x32dbg打开文件对算法进行分析,在同意条款窗口弹出之后将程序停止,分析内部函数是如何工作的。继续运行在输入CD-key并且点击’OK’之后,发现程序存在install.402D30函数,该函数使用时会向堆栈中放入错误文本,之后调用MessageBoxA函数创建密码错误窗口。猜测是输入密码之后利用某种算法计算出了错误的值才导致这个函数被启用。
在这里插入图片描述

[图片5] install.402D30, MessageBoxA 函数


以找到算法代码为目标,重新运行程序。我们在0040F8DE处可以发现比较CD-key的算法,仔细观察算法可以发现此算法主要由两部分构成。第一个部分是通过对CD-key进行计算后得出某个结果并且保存,第二个部分是将运算的结果和某个值进行比较。
在这里插入图片描述

[图片6] 加密算法 - 对CD-key进行计算


仔细分析第一部分的代码的话,可以发现这是一个类似do-while文,对密码进行循环计算。首先,将eax,edx寄存器初始化。然后进入循环,将输入CD-key按照输入的顺序一个一个载入算法,判断这个数字是否是0或者9。下面是把加密算法用C语言实现的代码。由于输入的CD-key是以数列的方式储存的,edx寄存器在这里起到了记录循环次数的目的,同时也起到了数列索引的作用,在每次循环结束的时候都会加一。计算的结果存在于eax之中。
在这里插入图片描述

[图片7] C语言实现加密算法


对13位构成的CD-key的前12位进行计算,并且将结果存于eax中。比如,输入’1111 11111 1111’的情况,第一次循环的结果是eax=A,再循环一次的结果是eax=1F。
在这里插入图片描述

[图片8] 运算两次之后的结果

Ⅲ 密码算法分析(2)

经过12次循环之后的结果会准备进行比较。算法先将ecx用’A’初始化,然后对eax寄存器使用div命令,除法的余数会和CD-key最后一位进行比较。具体的步骤是使用div命令,对eax寄存器里的结果除以’A’,结果存于eax而余数存于edx中。然后将edx的余数加30之后,和CD-key的最后一位数的ASCII数字进行比较,相同的话就会进入软件安装窗口。
在这里插入图片描述

[图片9] 确认算法结果

总结一下,这个是对前12位CD-key进行计算,计算出的结果和最后一位数字进行比较的算法。在输入’1111 11111 1111’的情况下想要绕过保护机制,只需要将最后一位数字改成3。也就是变成’1111 11111 1113’,就可以进入安装界面。
在这里插入图片描述

[图片10] 安装界面

此文用于学习分享,请勿用做非法用途。发布到此,仅供阅读参考,如有侵权,请通知我,我会删掉。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值