【文章标题】: SENSE4加密锁浅析之基础篇
【文章作者】: yaoyuan[CCG]
【下载地址】: 自己搜索下载
【保护方式】: SENSE4加密锁
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
关于SENSE4加密锁,论坛上资料还比较少,简单写一下这个锁的破解思路,欢迎一起交流。
SENSEIV锁通常的调用方式如下:
第一步:枚举设备,分配空间
DWORD WINAPI S4Enum
(
OUT SENSE4_CONTEXT *pS4CtxList,
IN OUT DWORD *pdwCtxListSize
);
枚举系统连接了多少个设备,这一步不用判断返回值,第一个参数输入NULL如果得到的设备上下文内存数量为0
或者不为sizeof(SENSE4_CONTEXT)的倍数,说明没有找到设备或者列举设备出错。根据返回的设备个数,分配
空间给程序使用
s4CtxList = (SENSE4_CONTEXT *)malloc(dwSize);
s4CtxList结构如下:
typedef struct
{
DWORD dwIndex; /** device index; index begins at zero*/
DWORD dwVersion; /** device version*/
S4HANDLE hLock; /** device handle*/
BYTE reserve[12]; /** reserved*/
BYTE bAtr[MAX_ATR_LEN]; /** ATR*/
BYTE bID[MAX_ID_LEN]; /** device ID*/
DWORD dwAtrLen; /** ATR length*/
}SENSE4_CONTEXT,*PSENSE4_CONTEXT;
第二步:再次枚举设备,连接设备
//根据分配的空间,再次枚举设备,这次要判断函数返回值。
S4Enum(s4CtxList,&dwSize)
S4OpenEx(&s4CtxList[0], &S4_OpenInfo)
S4_OpenInfo结构如下:
typedef struct _S4OPENINFO
{
DWORD dwS4OpenInfoSize; /* size of the structure*/
DWORD dwShareMode; /* share mode*/
} S4OPENINFO;
第三步,获取设备信息:
DWORD WINAPI S4Control
(
IN SENSE4_CONTEXT *pS4Ctx,
IN DWORD dwCtlCode,
IN VOID *pInBuffer,
IN DWORD dwInBufferLen,
OUT VOID *pOutBuffer,
IN DWORD dwOutBufferLen,
OUT DWORD *pdwBytesReturned
);
#define S4_LED_UP 0x00000004 /** LED up*/
#define S4_LED_DOWN 0x00000008 /** LED down*/
#define S4_LED_WINK 0x00000028 /** LED wink*/
#define S4_GET_DEVICE_TYPE 0x00000025 /** get the device type*/
#define S4_GET_SERIAL_NUMBER 0X00000026 /** get the device serial number*/
#define S4_GET_VM_TYPE 0X00000027 /** get the virtual machine type*/
#define S4_GET_DEVICE_USABLE_SPACE 0x00000029 /** get the total space of the device*/
#define S4_SET_DEVICE_ID 0x0000002a /** set the device ID*/
#define S4_RESET_DEVICE 0x00000002 /** reset the device*/
#define S4_DF_AVAILABLE_SPACE 0x00000031 /** get the free space of current directory*/
#define S4_EF_INFO 0x00000032 /** get specified file information in current directory*/
#define S4_SET_USB_MODE 0x00000041 /** set the device as a normal usb device*/
#define S4_SET_HID_MODE 0x00000042 /** set the device as a HID device*/
#define S4_GET_CUSTOMER_NAME 0x0000002b /** get the customer number*/
#define S4_GET_MANUFACTURE_DATE 0x0000002c /** get the manufacture date of the device*/
#define S4_GET_CURRENT_TIME 0x0000002d /** get the current time of the clock device*/
第四步,更改目录,校验用户pin码,执行锁内程序得到返回值
DWORD WINAPI S4ChangeDir
(
IN SENSE4_CONTEXT *pS4Ctx,
IN LPCSTR lpszPath
);
DWORD WINAPI S4VerifyPin
(
IN SENSE4_CONTEXT *pS4Ctx,
IN BYTE *pbPin,
IN DWORD dwPinLen,
IN DWORD dwPinType
);
DWORD WINAPI S4ExecuteEx
(
IN SENSE4_CONTEXT *pS4Ctx,
IN LPCSTR lpszFileID,
IN DWORD dwFlag,
IN VOID *pInBuffer,
IN DWORD dwInbufferSize,
OUT VOID *pOutBuffer,
IN DWORD dwOutBufferSize,
OUT DWORD *pdwBytesReturned
);
最后处理返回值,关闭设备:
DWORD WINAPI S4Close
(
IN SENSE4_CONTEXT *pS4Ctx
);
实战篇中我们将以某国产软件的模块验证程序Products.exe为例来分析具体加密过程及处理方法。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年01月29日 11:32:39