编写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]购买许可.