关于虚拟光驱检测的问题,它一直困扰着我!!(200分)

  • 主题发起人 主题发起人 dREAMtHEATER
  • 开始时间 开始时间
D

dREAMtHEATER

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有很多光盘做了加密技术,无法拷贝其中的一些文件,需通
过光盘上的某个执行文件才能访问相关数据,但我们有时可以通过做
虚拟光驱的方式来将光盘拷入硬盘,我现在想问,有没有方法通过加
入代码到这个执行文件中,检测正在处理的的数据是来自于物理光驱
还是通过虚拟光驱获得的,这样可以进一步防止非法用户对光盘的复
制,我需要Delphi代码或者ASM代码。另一种可行方式是检测光驱的
speed,因为硬盘转速远远大于光驱,我们可以设计函数来检测speed
,从而知道是硬盘还是光驱,但我不知道这部分代码如何实现。
最后再介绍一下自己吧,初学Delphi是98年的事了,但那时因为
种种原因没有继续深入学习,后来又接触了Win32ASM,对Windows底
层的东西了解了很多,在此基础上我疯狂地迷恋上Cracking,99年时
因为工作不忙,把时间全花在crack共享软件上了,并在当年写了13
篇cracking tutor(可到中文yahoo搜索引擎输入“dREAMtHEATER”
来查阅我的文章),玩了一年多突然感觉这不是我前进的方向,遂放
弃了cracking,重新回到编程这条路上,我开始用Win32ASM写程序,
写出的程序是那么短小精悍,但可想而知是多么废功夫,全部是底层
ASM代码加WinAPI,写着写着这些代码,我感觉写程序太累了,这时
候我又想到了我曾经学过的Delohi,有了重新拾起的愿望,于是真的
这样做了,感觉现在学她不再是98年最初学时那样吃力了,因为ASM
和windows编程基础已经打得很牢了,但我也时时发现因为ASM学多了
在脑子里总是出现地址呀什么的,反而有时把简单的代码想复杂了,
看来学太底层的东西也不好 :) 我现在还继续在代码迷雾中摸索前进
,希望有一天我也成为Delphi高手。
望不吝赐教!

dREAMtHEATER
2001.09.15
 
给你一个函数,(可以区分真实光驱和虚拟光驱):
Function IsCDROM(Drv : Char):BOOLEAN;
Var
CDR : string;
cnt : byte;
Count,First : word;
begin
Result := false;
CDR := '';
asm
mov ax, 1500h
xor bx, bx
int $2f
les di, COUNT
mov es:[di], bx
les di, FIRST
mov es:[di], cx
end;
if Count > 0 then
for cnt := 0 to (Count-1) do
CDR := CDR + char(First + Byte('A') + cnt);
Result := (Pos(upcase(Drv),CDR) > 0);
end;
 
接受答案了.
 
后退
顶部