關於匯編的INT13 bios中斷在delphi中怎麼實現???

时间:2023-02-04 16:05:43
哪位大蝦知道: 關於匯編的 INT13 bios 中斷在delphi中怎麼實現??? 
   或者有什麼更好辦法:防止一台電腦多次安裝一個試用軟件?? 當然是盡可能...

20 个解决方案

#1


win9x/nt下不支持int13。
好象可以通过int21 的7503号功能来完成读写磁盘的工作,可以查一查。

#2


to:BigBen(江南草) 
   int21的7503號功能我查不到,怎麼實現的可以給一個例子嗎???
   我的EMail:ljy_17@163.com 先謝過了!

#3


关注

#4


修改注册表,留下安装的次数,每次安装都检查,或者弄一个什么文件,安装的时候察看一下,如果没有,就说明这是第一次安装,都过已经有了,说明安装过了,这样的文件,名字奇怪一点,可以弄成什么.dll弄到系统文件夹中,然后每次开机的时候都让User32.dll加载,让User32.dll加载的方法是改注册表,这是个标准的方法,不会引起其他人的注意。这个Dll加载了,就会禁止删除,或者着注册一个服务,当然这也不让一般的用户注意。

#5


To: BlueTrees(蜗牛) 
  你講到的…让User32.dll加载,让User32.dll加载的方法是改注册表…怎麼做?能具體一點嗎?

如果可以的話我想知道INT13在delphi怎麼實現!

#6


修改注册表(当然要隐蔽)或者深度隐藏记录文件!
其它方法根本就没有用,有太多的方法破解了。

#7


asm
  ...
  你的汇编代码
  ...
end;

#8


TO: fenzi_123(Fenzi) 
  注冊表太不全安!可以備份注冊表!也可用工具監視!
TO: fenzi_123(Fenzi) 
  INT13中斷不能真接調用!

help me!
help me!
help me!

#9


同意,强烈关注这个问题

#10


1、nt下可以用createfile来操作磁盘读写,指定文件名为'\\.\x:'就可以了。.
2、win9x下读写磁盘,需要通过dos功能调用,int13/25/26都可以,但都有局限---不支持fat32(int13好象只对软盘有效),在win9x下新加了int21的7305h号调用,支持fat/12/16/32格式的磁盘的读写。
在win32中调用dos功能,需要通过vwin32.vxd(即先createfile得到此vxd的handle),使用deviceiocontrol向vwin32.vxd发控制码,deviceiocontrol的第三和第五个参数就是寄存器的设定。
int21的7305h的约定如下:
ax:7305h;
bx:指向一diskio结构;
cx:-1;
dl:驱动器号,1=a,3=c;
si:bit0=0为读,=1时为写,bit13到15另有意义。

diskio结构:
struct ds
 dwStartSector dd;
 wSectorCount dw;
 lpBuffer dd;
ends

deviceiocontrol的第一个参数设为vwin32_dioc_dos_driveinfo,具体的可查msdn。

对于你的第二个问题,我想,你是想在硬盘的特定地方(比如某些扇区的内零头里)写入你的标记,这是可行的,然后在程序中检测或更新此设定就可了。

#11


TO: BigBen(江南草)
 能給出具體的例子嗎!比如以下的代碼中win9x\winnt下怎麼實現!
 以下代碼主要是寫c盤的0,0,1扇区! 
 我是想在0,0,2扇区寫入標志!因為0,0,2扇区是備用的!
代碼在後面!

#12


data segment
 d db 800 dup(0)
 a db 'yours disk ends!$'
 b db 'yours disk ok!$'
 c db 'sorry!$'
data ends
code segment
assume cs:code,es:data,ds:data
org 100h
start:
  mov ax,data
  mov es,ax
  mov ds,ax
  mov ax,0201h
  mov bx,offset d
  mov cx,0001h
  mov dx,0180h
  int 13h
  cmp ah,0
  jnz k
  mov si,01feh
  mov bp,0aa55h
  xor es:[si],bp
  mov ax,0301h
  mov bx,offset d
  mov cx,0001h
  mov dx,0180h
  int 13h
  k: 
  mov dx,offset c
  cmp ah,0
  jnz kkk
  cmp es:[si],bp
  jz kk
  mov dx,offset a
  jmp kkk
  kk:
  mov dx,offset b
  kkk:
  mov ah,09h
  int 21h
  mov ax,4c00h
  int 21h
  CODE ENDS
  END START

#13


混合使用汇编的时候能用OUT和IN语句吗?

#14


混合使用汇编的时候,在98下能用OUT和IN语句,在nt下不可以用OUT和IN语句!

#15


兄弟們正題啊!
請關注!

#16


DeviceIOControl(hvxd,vwin32_dioc_dos_driveinfo,inregs,nCntIn,outregs,nCntOut);

hvxd用createfile创建vwin32.vxd得到。
vwin32_dioc_dos_driveinfo 定义为6,
inregs/outregs输入输出的寄存器组,只要填输入的inregs,按int21的7305h约定填就行了。

具体的可查呀。。。我有汇编的源码,但懒得找了。msdn上也有c的。

#17


TO: BigBen(江南草)
  網上有沒有更詳細一個資料?
  汇编的源码就不要了!在汇编下我也可以實現!隻是windows不
  能直接訪問硬件!

#18


我提!

#19


你要做硬盘保护对吧!但路走错了。

在RING3级上是不可能实现的!

#20


TO: smhpnuaa(农奴翻身感谢党)
 ring 3 to ring 0 我有匯編的程序!不過隻能在win9x下!
 請教一下ring 3 to ring 0後應該怎麼做啊???

#1


win9x/nt下不支持int13。
好象可以通过int21 的7503号功能来完成读写磁盘的工作,可以查一查。

#2


to:BigBen(江南草) 
   int21的7503號功能我查不到,怎麼實現的可以給一個例子嗎???
   我的EMail:ljy_17@163.com 先謝過了!

#3


关注

#4


修改注册表,留下安装的次数,每次安装都检查,或者弄一个什么文件,安装的时候察看一下,如果没有,就说明这是第一次安装,都过已经有了,说明安装过了,这样的文件,名字奇怪一点,可以弄成什么.dll弄到系统文件夹中,然后每次开机的时候都让User32.dll加载,让User32.dll加载的方法是改注册表,这是个标准的方法,不会引起其他人的注意。这个Dll加载了,就会禁止删除,或者着注册一个服务,当然这也不让一般的用户注意。

#5


To: BlueTrees(蜗牛) 
  你講到的…让User32.dll加载,让User32.dll加载的方法是改注册表…怎麼做?能具體一點嗎?

如果可以的話我想知道INT13在delphi怎麼實現!

#6


修改注册表(当然要隐蔽)或者深度隐藏记录文件!
其它方法根本就没有用,有太多的方法破解了。

#7


asm
  ...
  你的汇编代码
  ...
end;

#8


TO: fenzi_123(Fenzi) 
  注冊表太不全安!可以備份注冊表!也可用工具監視!
TO: fenzi_123(Fenzi) 
  INT13中斷不能真接調用!

help me!
help me!
help me!

#9


同意,强烈关注这个问题

#10


1、nt下可以用createfile来操作磁盘读写,指定文件名为'\\.\x:'就可以了。.
2、win9x下读写磁盘,需要通过dos功能调用,int13/25/26都可以,但都有局限---不支持fat32(int13好象只对软盘有效),在win9x下新加了int21的7305h号调用,支持fat/12/16/32格式的磁盘的读写。
在win32中调用dos功能,需要通过vwin32.vxd(即先createfile得到此vxd的handle),使用deviceiocontrol向vwin32.vxd发控制码,deviceiocontrol的第三和第五个参数就是寄存器的设定。
int21的7305h的约定如下:
ax:7305h;
bx:指向一diskio结构;
cx:-1;
dl:驱动器号,1=a,3=c;
si:bit0=0为读,=1时为写,bit13到15另有意义。

diskio结构:
struct ds
 dwStartSector dd;
 wSectorCount dw;
 lpBuffer dd;
ends

deviceiocontrol的第一个参数设为vwin32_dioc_dos_driveinfo,具体的可查msdn。

对于你的第二个问题,我想,你是想在硬盘的特定地方(比如某些扇区的内零头里)写入你的标记,这是可行的,然后在程序中检测或更新此设定就可了。

#11


TO: BigBen(江南草)
 能給出具體的例子嗎!比如以下的代碼中win9x\winnt下怎麼實現!
 以下代碼主要是寫c盤的0,0,1扇区! 
 我是想在0,0,2扇区寫入標志!因為0,0,2扇区是備用的!
代碼在後面!

#12


data segment
 d db 800 dup(0)
 a db 'yours disk ends!$'
 b db 'yours disk ok!$'
 c db 'sorry!$'
data ends
code segment
assume cs:code,es:data,ds:data
org 100h
start:
  mov ax,data
  mov es,ax
  mov ds,ax
  mov ax,0201h
  mov bx,offset d
  mov cx,0001h
  mov dx,0180h
  int 13h
  cmp ah,0
  jnz k
  mov si,01feh
  mov bp,0aa55h
  xor es:[si],bp
  mov ax,0301h
  mov bx,offset d
  mov cx,0001h
  mov dx,0180h
  int 13h
  k: 
  mov dx,offset c
  cmp ah,0
  jnz kkk
  cmp es:[si],bp
  jz kk
  mov dx,offset a
  jmp kkk
  kk:
  mov dx,offset b
  kkk:
  mov ah,09h
  int 21h
  mov ax,4c00h
  int 21h
  CODE ENDS
  END START

#13


混合使用汇编的时候能用OUT和IN语句吗?

#14


混合使用汇编的时候,在98下能用OUT和IN语句,在nt下不可以用OUT和IN语句!

#15


兄弟們正題啊!
請關注!

#16


DeviceIOControl(hvxd,vwin32_dioc_dos_driveinfo,inregs,nCntIn,outregs,nCntOut);

hvxd用createfile创建vwin32.vxd得到。
vwin32_dioc_dos_driveinfo 定义为6,
inregs/outregs输入输出的寄存器组,只要填输入的inregs,按int21的7305h约定填就行了。

具体的可查呀。。。我有汇编的源码,但懒得找了。msdn上也有c的。

#17


TO: BigBen(江南草)
  網上有沒有更詳細一個資料?
  汇编的源码就不要了!在汇编下我也可以實現!隻是windows不
  能直接訪問硬件!

#18


我提!

#19


你要做硬盘保护对吧!但路走错了。

在RING3级上是不可能实现的!

#20


TO: smhpnuaa(农奴翻身感谢党)
 ring 3 to ring 0 我有匯編的程序!不過隻能在win9x下!
 請教一下ring 3 to ring 0後應該怎麼做啊???

#21