TOM-Skype附加功能模块skmsg.dll解析

发布: 2011-12-14 17:58

这个skmsg.dll模块用于。。。。。。

1. VC .DEF文件内容:

IBRARY      "skmsg.dll"

EXPORTS
    SkmsgStartup
    SkmsgShutdown
    SkmsgRegisterEvent
    SkmsgUnregisterEvent
    SkmsgPostMessage

2. 导出函数的原型:
BOOL __stdcall SkmsgStartup(const char * pszSkypeId, const char * pszSkypeVersion, const char * pszMsgSvr = NULL);
void __stdcall SkmsgShutdown();
BOOL __stdcall SkmsgRegisterEvent(SKMSGNOTIFY pNotify, unsigned short msgType);
BOOL __stdcall SkmsgUnregisterEvent(SKMSGNOTIFY pNotify);

BOOL __stdcall SkmsgPostMessage(const char * pszToId, unsigned short msgType, unsigned short msgLen, const unsigned char *pMsg);
void __stdcall RequestMissionMsg();

通过这个,我们可以

3. 导出函数说明:
    SkmsgStartup: 在skype登陆成功后调用,初始化该dll模块中的全局变量的值。如skype账号名,skype版本号。
                           第三个参数pszMsgSvr一个服务器地址,格式必须为host:port。
                           返回FALSE,也就是该dll模块初始化失败的情况有,已经初始化过,服务器地址格式错误,连接服务器错误,发送登陆通知出错。
                           该函数还创建弹窗线程。

   SkmsgShutdown: 在skype退出登陆时调用,停止对该模块的调用。
                           所做处理,退出线程,发送skype登出通知,停止计时器,清理内存。

   SkmsgPostMessage: 向服务器发送一条消息,消息内容有CRC4验证。
                            第一个pszToId其实没有用,一直给传递的值都是当前登陆的skype id。
 
4. 客户端与服务器间通信协议
    使用简单的二进制流协议,该二进制流是对原数据使用CRC4加密取得。
    使用协议头,协议尾来标识一条消息。
    
    格式:  |MSG_HEAD|PROTO_VERSION|0|rand_digit|REQ_NO|skype_id_len|skype_id|skype_version_len|skype_version|msgid|MSG_TAIL|
    字节:  |1               |1                         |1|2             |1          |1           |skype_id_len|1            |skype_version_len|4         | 1|

     CRC4加密,只加密从rand_digit到msgid中间的数据,协议头、尾、版本号不在加密之列。
     该加密使用简单可逆的按位异或实现,并没有使用加密key,加密结果操持原来的长度。

    


原文: http://qtchina.tk/?q=node/624

Powered by zexport