1、分析环境
- 操作系统:Win10 1809 x64
- 调试工具:Ollydbg
2、运行程序,了解大致的运行过程
3、运行Ollydbg调试程序
- 由于该程序是由汇编所写,可以直接看到main()函数
- 使用F8运行代码,并分析
- 其中
GetDriveTypeA
是获取驱动器类型的API,一般返回3
- 其中
3.1、分析结果简述
- ESI初始值为0,经过3次加法运算得到结果为3
GetDriveTypeA
获得的结果为3,经过2次减法运算得到结果为1-
由上述结果得知,
GetDriveTypeA
经过2次减法运算得到结果为3才能跳转到正确的弹窗,即GetDriveTypeA
的返回值为5 -
通过查询MSDN确定
GetDriveTypeA
的返回值为5的驱动器类型为CD-ROM -
结合弹窗的语句与MSDN可得出如下结论
结论:该程序是判断C盘驱动器是否为CD-ROM
4、破解
4.1、方法一
直接将程序读取的驱动器号改成操作系统的CD-ROM驱动器号。
例如:操作系统CD-ROM的驱动器号为d,直接修改了读取的驱动器号为d,相应的ASCII码为64,更改完毕之后运行程序。
4.2、方法二
修改汇编语句,将条件跳转改成无条件跳转
优点:如果打上补丁,该程序在任何Windows主机上运行都会弹出正确的弹窗
5、运行结果
6、与书中不同之处
- Win7和Win10环境下,MessageBoxA并没有将ESI置为FFFFFFFF。