文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → 常见软件保护技术之CD-check

常见软件保护技术之CD-check

时间:2004/10/15 0:51:00来源:本站整理作者:蓝点我要评论(0)

 

6、CD-check  



  最简单也最常见的光盘保护就是程序在启动时判断光驱中的光盘上是否存在特定的文件,如果不存在则认为用户没有正版光盘,拒绝运行。在程序运行的过程当中一般不再检查光盘的存在与否。Windows下的具体实现一般是这样的:先用GetLogicalDriveStrings( )或GetLogicalDrives( )得到系统中安装的所有驱动器的列表,然后再用GetDriveType( )检查每一个驱动器,如果是光驱则用CreateFileA( )或FindFirstFileA( )等函数检查特定的文件存在与否,并可能进一步地检查文件的属性、大小、内容等。 这种光盘检查是比较容易被破解的,解密者只要利用上述函数设断点找到程序启动时检查光驱的地方,修改判断指令就可以跳过光盘检查。


(1)可将游戏(或其它程序)的光盘拿出,运行游戏,将出现一些错误提示,如: Please insert the - CD, or: You need the CD to play the - . 利用这提示可在W32DASM中利用串式数据参考功能查找相应的代码进行分析。


(2)相关函数


1、GetDrivetype(a) 判断一个磁盘驱动器的类型













UINT GetDriveType(

LPCTSTR lpRootPathName // String,包含了驱动器根目录路径的一个字串
);


返回值

0

驱动器不能识别

1

指定的目录不存在

2

DriveRemoveable

3

A Fixed Disk (HardDrive)

4

Remote Drive(Network)

5

Cd-Rom驱动器

6

RamDisk

如果是普通的程序,你可将EAX由5改成3即可。


注意:有些程序可能检测光盘根目录相关文件,CD的卷标也可能被检测。


2、GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母








这函数没有参数


返回值
这个结构中的二进制位标志着存在哪些驱动器。其中,位0设为1表示驱动器A:存在于系统中;位1设为1表示存在B:驱动器;以次类推

3、GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径








DWORD GetLogicalDriveStrings(


DWORD nBufferLength, // 字串的长度
LPTSTR lpBuffer   // 用于装载逻辑驱动器名称的字串。每个名字都用一个NULL字符分隔,在最后一个名             字后面用两个NULL表示中止(空中止)
);


返回值
装载到lpBuffer的字符数量(排除空中止字符)。如缓冲区的长度不够,不能容下路径,则返回值就变成要求的缓冲区大小。零表示失败。会设置GetLastError

4、GetFileAttributesA 判断指定文件的属性






DWORD GetFileAttributes(


LPCTSTR lpFileName //指定欲获取属性的一个文件的名字
);


5、GetFileSize 判断文件长度








DWORD GetFileSize(


HANDLE hFile, // 文件的句柄
LPDWORD lpFileSizeHigh, // 指定一个长整数,用于装载一个64位文件长度的头32位。如这个长度没有超过               2^32字节,则该参数可以设为NULL(变成ByVal)
);


返回值
返回文件长度。&HFFFFFFFF表示出错。注意如lpFileSizeHigh不为NULL,且结果为&HFFFFFFFF,那么必须调用GetLastError,判断是否实际发生了一个错误,因为这是一个有效的结果

6、GetLastError 针对之前调用的api函数,用这个函数取得扩展错误信息
















返回值
由api函数决定。请参考api32.txt文件,其中列出了一系列错误常数;都以ERROR_前缀起头。常用的错误代码见下表
ERROR_INVALID_HANDLE 无效的句柄作为一个参数传递
ERROR_CALL_NOT_IMPLEMENTED 在win 95下调用专为win nt设计的win32 api函数
ERROR_INVALID_PARAMETER 函数中有个参数不正确

7、ReadFile 从文件中读出数据


具体参考KEYFILE一节。


8、其它一些CDROM信息


中断2F是mscdex中断,可用bpint 2f, al=0 ah=15检测Mmscdex是否安装。
也可试着用文件存取设断


    
    
     
    
    
     

相关阅读 Mac访问Windows共享文件夹Windows 7正版系统验证方法windows 8.1系统版本号查看方法Windows 8.1系统电话激活时无法输入微软返回代码解决方法Windows 8如何调整屏幕分辨率windows8.1磁盘占用100%解决方法Mac双系统如何删除Boot Camp安装的Windows分区Apple教你如何在Mac 上运行 Windows

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程