编写InsPro Disk 2.0的加密解密扩展
作者:陆麟
转载请征得作者同意.
2003.7.7
InsPro Disk 2.0 已经内置加密解密接口. 加密解密接口定义得十分简单.
SDDISKEX.DLL是个KERNEL MODE的DLL. 被SDDISK.SYS使用. 将SDDISKEX.DLL放置在SYSTEM32\DRIVERS目录中,
SDDISK.SYS就会尝试LOAD它. 并且使用SDDISKEX.DLL的加密解密扩展.
编译SDDISKEX需要有VC6, 2KDDK,SOFTICE DRIVER SUITE 2.7. 用SOFTICE DRIVER SUITE 2.7来启动VC6.
才能正常编译.
点击这里下载SDDISKEX.RAR.
access_check函数用于确认USER是否可以加载InsPro Disk虚拟硬盘.
encrypt在写入文件时被调用
decrypt在读文件时被调用
由于在99%的状况下, 开发者都认为自己的加密算法强度是最大的, 安全性是最高的. 都不需要我这边的加密实现, 因此,在加密解密扩展中我并不提供加密算法.
下面是例子.
/*
* Encrypt interface file
* lu0, 2003.3
*/
#include <ntddk.h>
BOOLEAN __stdcall access_check(char UserName[64],char passwd[64],WCHAR *VitualHDDFileName)
{
return 1;
}
void __stdcall encrypt(
const unsigned char *inBuffer,
unsigned char *outBuffer,
unsigned long cbBuffer,
unsigned char *Key,
void *uniqID,
__int64 file_off,
unsigned short mode
)
{
unsigned long i;
//encrypt is called when write
for (i=0;i<cbBuffer;i++)
{
unsigned u = ((unsigned long)file_off+i)&0xf;
*outBuffer = *inBuffer ^ Key[u];
inBuffer++;
outBuffer++;
}
}
void __stdcall decrypt(
const unsigned char *inBuffer,
unsigned char *outBuffer,
unsigned long cbBuffer,
unsigned char *Key,
void *uniqID,
__int64 file_off,
unsigned short mode
)
{
unsigned long i;
//decrypt is called when read
//
//The better is to use this param to impl various
//encrypt algorighm, that would be nice. ;) --lu0
//
for (i=0;i<cbBuffer;i++)
{
unsigned u = ((unsigned long)file_off+i)&0xf;
*outBuffer = *inBuffer ^ Key[u];
inBuffer++;
outBuffer++;
}
}
如果用于商用目的或者需要定制, 请联系[email protected]购买许可.