阅读:3237回复:14
有没有办法拦截“获取硬盘序列号的操作”?
请问各位老大:
有没有办法拦截“获取硬盘序列号的操作”? 包括拦截:获取硬盘控制器序列号 和 硬盘分区序列号的操作 感激不尽, |
|
|
沙发#
发布于:2003-03-14 13:36
没人知道吗?看来这个问题真难啊
|
|
|
板凳#
发布于:2003-03-14 19:38
你说的这2个序列号,是不是scsi的内容?
|
|
|
地板#
发布于:2003-03-18 12:15
不是SCSI的,IDE的,硬盘出厂时一般有一个不可变的序列号,第二个是指硬盘分区时产生的序列号
|
|
|
地下室#
发布于:2003-03-18 13:28
硬盘分区时产生的序列号可以通过HOKK API的办法来截取。硬盘出厂时的序列号一般在驱动程序中出现,好象没有标准API接口,想截获它的操作恐怕比较难。
|
|
5楼#
发布于:2003-03-18 13:45
刚才这位朋友说的用HOOK API的方式来截获,能说具体些吗?是FS_...中的哪一个?还有我想得到分区格式(如FAT32)的接口?应用哪一个HOOK?
另外,关于那个硬盘出厂号,我已有办法解决了,可以用HOOK读取硬盘端口的方式来解决 |
|
|
6楼#
发布于:2003-03-18 13:55
Kernel32中有一个API函数GetVolumeInformation,它可以直接获得硬盘序列号,HOOK它就可以了。
BOOL GetVolumeInformation( LPCTSTR lpRootPathName, // 硬盘的路径 LPTSTR lpVolumeNameBuffer, // 硬盘的卷标 DWORD nVolumeNameSize, // 卷标的字符串长度 LPDWORD lpVolumeSerialNumber, // 硬盘的序列号 LPDWORD lpMaximumComponentLength, // 最大的文件长度 LPDWORD lpFileSystemFlags, // 文件系统的一此标志 LPTSTR lpFileSystemNameBuffer, // 存储所在盘符的分区类型的长指针变量 DWORD nFileSystemNameSize // 分区类型的长指针变量所指向的字符串长度 ); 如果上述函数成功就返回一个非0值。 另请教,IO的读写怎么HOOK? |
|
7楼#
发布于:2003-03-19 13:36
VToolsD中有一个VIOPort类其中有一个handle可以过滤IO 操作。
另请问那个API怎样HOOK,HOOK中我没那发现FS_....与之对应的功能号 |
|
|
8楼#
发布于:2003-03-19 14:13
char* msg=\"提示:\"; char* cap=\"\\n记得给点分我!\\n\\n\"; #define PORT_SamHD 0x1f2 class SamHD:public VIOPort { public: SamHD():VIOPort(PORT_SamHD){}; DWORD handler(VMHANDLE hVM,DWORD port,CLIENT_STRUCT* pRegs,DWORD iotype,DWORD outdata); }; BOOL SamHDDevice::OnSysDynamicDeviceInit() { sam=new (SamHD); if(sam){ sam->hook(); sam->globalEnable(); } else{ return FALSE; } return TRUE; } DWORD SamHD::handler(VMHANDLE hVM,DWORD port,CLIENT_STRUCT* pRegs,DWORD iotype,DWORD outdata) { //static WORD count=0; //static DWORD buffer[10]; //static BYTE inppt=0; BYTE r=0; //count++; switch(iotype) { case BYTE_INPUT: _asm { in al, 1F2h mov r,al } return r; case BYTE_OUTPUT: case WORD_OUTPUT: case DWORD_OUTPUT: SHELL_Message(hVM,MB_OK,cap,msg,0,0,0); break; default: break; } return 0; } |
|
9楼#
发布于:2003-03-20 09:07
我想知道的是怎样HOOK GetVolumeInformation
|
|
|
10楼#
发布于:2003-03-20 09:37
呵呵!那个函数也是没有用的啊!可以通过读写分区的第一扇区就可以得到这个分区序列号了
|
|
11楼#
发布于:2003-03-20 10:04
GetVolumeInformation为什么没有用?
我是参照网友说的方法,在RING0里找到API函数入口,用自己的函数替换相应的API函数。 |
|
12楼#
发布于:2003-03-20 12:48
那个API入口是什么啊?可以HOOK到吗?
|
|
|
13楼#
发布于:2003-03-20 12:53
读第一扇区的方法我知道,但不符和需要,我是想扑获\"获取硬盘序列号的操作\",而不是想获取硬盘序列号
|
|
|
14楼#
发布于:2003-03-25 13:04
2k/NT下的实现方法我找到了,不知是否可以通过拦截SMART_RCV_DRIVE_DATA的方法来实现?我想可以,不过还没试过
|
|
|