本文的例子选自与加密解密第3版:链接:https://pan.baidu.com/s/1w8sKIa15tHjBYo5KBZWtfw 密码:2hmn
有一些软件为了防止用户在获得正版软件后,将正版软件拷贝在多台主机上,采用了CD-Check技术,只有将商家配套的光盘插在光驱中,才能正常运行软件
Windows下有一些函数用来帮助实现CD-Check这一技术:
1、先用GetLogicalDriveStrings函数找出所有根驱动器路径
2、再用GetDriveType函数检测要验证的文件是否在光驱里
3、最后用CreateFileA函数打开检测文件
基本就是这么个流程
我们的思路是,我们没有光盘里的检测文件,我们的CreateFileA肯定是失败的,试试看能不能强制跳过
用OD打开例子CD_Check.exe
找上文说的三个函数,找到了后两个,跳转过去
可以看到文件在光驱里压入了,但我们没插光盘,使用CreateFileA函数后,文件应该是打不开的才对
我蛮看下去,看到一个跳转语句,底下还有“Error”,"NO CD"等字符串,怀疑这里跳转语句是转到成功打开文件后的地址处
我们验证一下是不是,我们跳转到401485查看一下
没问题,验证了我们的猜想
那我们就把之前的跳转语句从判断跳转改为强制跳转:jmp 401485
改完之后就OK了,CD-Check技术简单科普一下