文档章节

CD-check

我爱睡觉
 我爱睡觉
发布于 2017/06/24 17:39
字数 1005
阅读 2
收藏 0

 自己的补充:只要在输入表查找drive即可找到相关函数。

 

 

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是否安装。
也可试着用文件存取设断

 

本文转载自:http://blog.csdn.net/zhangmiaoping23/article/details/8956954

我爱睡觉
粉丝 3
博文 2120
码字总数 0
作品 0
南昌
私信 提问
RedHat6.5上部署Nagios

部署环境:系统,RedHat 6.5;组件,Nagios; 部署前准备:关闭Selinux,和防火墙(/etc/init.d/iptables stop);获取相关软件包。 (包括gd-devel mysql-server openssl-devel xinetd;等) 具...

YLSL2014
2018/07/04
0
0
实战Nagios网络监控(2)—— Nagios+Nrpe监控其他主机

本次实验在上次实验的环境下进行:实战Nagios网络监控(1)——监控本机运行状态和Mysq主机 需要的包:nagios-plugins-2.1.1.tar.gz nrpe-2.15.tar.gz 服务器端:server1.example.com 172.2...

willis_sun
2016/10/26
0
0
SUSE 11g SP3系统服务器NRPE配置

1.创建账号信息 登录为root用户, #su –l 创建nagios账号并设置密码 #/usr/sbin/useradd nagios #passwd nagios 2.安装nagios插件 创建下载文件存放文件夹 #mkdir ~/downloads #cd ~/downl...

espanol
2014/05/20
0
0
监控系统nagios(1)

Nagios 1.1 Nagios简介 Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。[1] Nagios可运行在Linux/Unix平台之上,...

wangyangyang12
2016/11/10
0
0
lanmp的一键安装脚本

创建lanmp一键安装的脚本 思路:1.设置自动安装lamp和lnmp 2.lamp脚本的编译安装 (mysql版本 5.1 或者5.6 二个版本) (apache 版本 2.2版本) (php 版本 5.4版本 5.6版本) 3.lnmp脚本的编译...

lizheng103
2016/12/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【JVM学习】2.Java虚拟机运行时数据区

来源: 公众号: 猿人谷 这里我们先说句题外话,相信大家在面试中经常被问到介绍Java内存模型,我在面试别人时也会经常问这个问题。但是,往往都会令我比较尴尬,我还话音未落,面试者就会“...

物种起源-达尔文
29分钟前
4
0
dart datetime

var date = DateTime.now().toUtc(); //格式化输出 String timestamp = "${date.year.toString()}-${date.month.toString().padLeft(2, '0')}-${date.day.toString().padLeft(2, ......

zdglf
今天
20
0
如何在Linux中复制文档

在办公室里复印文档过去需要专门的员工与机器。如今,复制是电脑用户无需多加思考的任务。在电脑里复制数据是如此微不足道的事,以致于你还没有意识到复制就发生了,例如当拖动文档到外部硬盘...

老孟的Linux私房菜
今天
47
0
SpringBoot 集成MongoDB

一、MongoDB 简介 MongoDB 如今是最流行的 NoSQL 数据库,被广泛应用于各行各业中,很多创业公司数据库选型就直接使用了 MongoDB,但对于大部分公司,使用 MongoDB 的场景是做大规模数据查询...

zw965
今天
49
0
使用 Envoy 和 AdGuard Home 阻挡烦人的广告

> 原文链接:使用 Envoy 和 AdGuard Home 阻挡烦人的广告 通常我们使用网络时,宽带运营商会为我们分配一个 DNS 服务器。这个 DNS 通常是最快的,距离最近的服务器,但会有很多问题,比如: ...

米开朗基杨
今天
54
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部