znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
阅读:990回复:2

移动存储安全

楼主#
更多 发布于:2007-05-10 13:42
  作者:南京邮电大学 吴登荣

下载源代码

摘要:实现对移动存储设备的加密,保护信息隐蔽,防止隐私泄露。

关键字:移动存储设备加密安全

  当你的U盘,移动硬盘遗失了,被盗了,或者是遗忘在公共场所,里面的资料就会完全被别人窥探,如果涉及一些隐私,机密,那后果是很严重的。本课题就是在这样一个情况下产生的。这里剖析的只是一个最初的演示原型,详细设计,以及一些细节可以参考源代码。源代码在WinXP,VC6.0编译通过。

1、访问注册表读取计算机上的移动存储设备

在注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum
下面可以看到计算机当前的状态,这里可以看到所有的存储设备的情况,包括计算机的硬盘,通过情况下,名称为0的是计算机硬盘,所以在列出的选择设备时,会把名称为0的屏蔽,不然太危险,一旦造成系统的破坏,后果会很麻烦。对注册表的读写:

HKEY hkey;
char sz[256];
DWORD dwtype,sl = 256;
for(int i=1;i<8;i++)
{
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Disk\\Enum",\
        NULL, KEY_ALL_ACCESS, &hkey)==ERROR_SUCCESS)
    {
        CString id;
        id.Format("%d",i);
        if(RegQueryValueEx(hkey,id,NULL,&dwtype,(LPBYTE)sz,&sl)==ERROR_SUCCESS)
        {
            CString str=(CString)sz;
            m_select.AddString(sz);
        }
    }
}
RegCloseKey(hkey);

2、对磁盘的扇区的操作
  Windows 操作系统在很大程度上采取了访问安全保护机制(例如,在Windows操作系统下不能直接访问物理内存、不能使用各种DOS、BIOS中断等等),其实Windows在采取“实保护”措施的同时也提供了另外的一种有别于在DOS下访问硬件设备的方法,即把所有的硬件设备全部看做“文件”,并允许按照对文件的读写方式来对其进行数据存取访问。对于磁盘扇区的读写,可以通过C++的CreateFile()函数来实现。由MSDN可查询到该函数原型:

HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile );

由于访问的是事实上已经存在的磁盘扇区,因此只能以OPEN_EXISTING标志设置dwCreationDisposition参数指出将要打开已经存在的文件(设备)。至于其他参数的使用与操作普通文件时的用法相同。
使用的时候,如果需要定位到某一个具体的扇区,可以使用SetFilePointer()函数:DWORD SetFilePointer(HANDLE hFile,LONG lDistanceToMove,PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod);
  在定位到要访问的扇区开始位置后就可以通过ReadFile()或WriteFile()函数实施相应的读写访问了,具体操作与文件读写并没有什么太大的差别。最后,在完成访问操作后以CloseHandle()关闭文件句柄释放资源,从而完成一次完整的磁盘扇区数据访问操作。

int ReadDisk(CString driver,unsigned char *Buf,long addr)
{
    HANDLE hDevice;
    BOOL bResult;
    DWORD bytesread;
    
    hDevice=CreateFile(driver,GENERIC_READ|GENERIC_WRITE,
        FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
    if(hDevice==INVALID_HANDLE_VALUE)
    {
        AfxMessageBox("Error!");
        return 0;
    }
    if(addr!=0)
    {
        SetFilePointer(hDevice,512*addr,NULL,NULL);
    }
    
    bResult=ReadFile(hDevice,Buf,512,&bytesread,NULL);
    if((bResult==FALSE)||(bytesread<512))
    {
        AfxMessageBox("Error!");
        return 0;
    }
    CloseHandle(hDevice);
    return 1;
}

3、用RC4加密算法对磁盘加密。/* RC4加密,KEY是密钥,此处Key[]="MobileStorageSecurity",后期可以用户输入的密码作为密钥 */
RC4_KEY rc4_key;
build_rc4_key(Key,strlen((char*)Key),&rc4_key);
rc4_handler(MBRBuf,strlen((char*)MBRBuf),&rc4_key);
4、U盘插入计算机时的自动感知

LRESULT CRawDiskDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    if ( WM_DEVICECHANGE == message && FALSE == bCopy )
    {
        //刷新设备列表
    }
    return CDialog::WindowProc(message, wParam, lParam);
}

后期改进
这样就必须要求在电脑上有这个程序,所以在后期采用同样的原理,将这个程序放在U盘里,在加密的时候实现对自身的屏蔽,这样大大提高程序的易用性。
可以让用户输入密码,将密码作为密钥去加密和解密。
这个只是对一个磁盘最初的512字节加密,后期可以通过对扇区的定位和计算,对目录表及数据加密。


作者信息:

南京邮电大学计算机学院(College of Computer, Nanjing University of Posts & Telecommunications)
吴登荣(WuDengrong)
----------------------------------------------------------
地址:江苏省南京市新模范马路66号
邮编:210003
电话:86-25-85867350
手机:13770689881
电邮:Jeffrey.nupt@gmail.com
----------------------------------------------------------
Address: No.66 Xinmofan Road Gulou District, Nanjing China
Zip: 210003
Tel: 86-25-85867350
Mobile: 13770689881
Email: Jeffrey.nupt@gmail.com
----------------------------------------------------------
附件名称/大小 下载次数 最后更新
Jeffrey_mss.rar (16KB)  29 2007-05-10 13:42
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
xtmzl
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2017-01-24
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望141点
  • 贡献值0点
  • 好评度55点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-05-10 14:59
这样做使用起来就复杂了.
透明加密更简单.
HOHO
strpic
驱动小牛
驱动小牛
  • 注册日期2006-11-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望238点
  • 贡献值0点
  • 好评度156点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-13 14:48
这个用起来才不复杂,但安全性很不好,用winhex看一看。。。。
游客

返回顶部