he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3237回复:14

有没有办法拦截“获取硬盘序列号的操作”?

楼主#
更多 发布于:2003-03-12 13:47
请问各位老大:

    有没有办法拦截“获取硬盘序列号的操作”?

包括拦截:获取硬盘控制器序列号 和 硬盘分区序列号的操作

感激不尽,
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-14 13:36
没人知道吗?看来这个问题真难啊
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-14 19:38
你说的这2个序列号,是不是scsi的内容?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-18 12:15
不是SCSI的,IDE的,硬盘出厂时一般有一个不可变的序列号,第二个是指硬盘分区时产生的序列号
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
amylokn
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2003-10-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-18 13:28
硬盘分区时产生的序列号可以通过HOKK API的办法来截取。硬盘出厂时的序列号一般在驱动程序中出现,好象没有标准API接口,想截获它的操作恐怕比较难。
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-18 13:45
刚才这位朋友说的用HOOK API的方式来截获,能说具体些吗?是FS_...中的哪一个?还有我想得到分区格式(如FAT32)的接口?应用哪一个HOOK?
另外,关于那个硬盘出厂号,我已有办法解决了,可以用HOOK读取硬盘端口的方式来解决
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
amylokn
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2003-10-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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?
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-19 13:36
VToolsD中有一个VIOPort类其中有一个handle可以过滤IO 操作。
另请问那个API怎样HOOK,HOOK中我没那发现FS_....与之对应的功能号
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
Yss
Yss
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2005-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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;

}

he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-20 09:07
我想知道的是怎样HOOK GetVolumeInformation
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
10楼#
发布于:2003-03-20 09:37
呵呵!那个函数也是没有用的啊!可以通过读写分区的第一扇区就可以得到这个分区序列号了
amylokn
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2003-10-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-03-20 10:04
GetVolumeInformation为什么没有用?
我是参照网友说的方法,在RING0里找到API函数入口,用自己的函数替换相应的API函数。
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-03-20 12:48
那个API入口是什么啊?可以HOOK到吗?
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-03-20 12:53
读第一扇区的方法我知道,但不符和需要,我是想扑获\"获取硬盘序列号的操作\",而不是想获取硬盘序列号
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
he_x_p
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2005-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-03-25 13:04
2k/NT下的实现方法我找到了,不知是否可以通过拦截SMART_RCV_DRIVE_DATA的方法来实现?我想可以,不过还没试过
乘着梦的翅膀, 借助黎明时柔和的阳光, 化着一只自由自在的冲天鸟, 在有梦的地方潇洒地飞翔......
游客

返回顶部