crypt_dll.cpp
上传用户:nbcables
上传日期:2007-01-11
资源大小:1243k
文件大小:2k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. // crypt_dll.cpp : Defines the entry point for the DLL application.
  2. //
  3. #include "stdafx.h"
  4. #include "crypt_dll.h"
  5. #include "des.h"
  6. #include "keymanager.h"
  7. unsigned char des_key[8];
  8. #define DEFAULT_KEY (unsigned char *)"&@$7/;f`"
  9. DES g_des;
  10. CKeyManager g_key;
  11. int WINAPI CryptInit()
  12. {
  13. return 0;
  14. }
  15. int WINAPI CryptExit()
  16. {
  17. g_key.RemoveAllKey();
  18. return 0;
  19. }
  20. // 连接服务器并从服务器端接收到密钥后的处理
  21. int WINAPI CryptOnConnected(int sd, unsigned char *key, int key_len)
  22. {
  23. g_key.AddKey(sd, key, key_len);
  24. return 0;
  25. }
  26. // 接受客户端请求后的处理,需要此函数填充密钥
  27. int WINAPI CryptOnAccepted(int sd, unsigned char *out_key, int *pkey_len)
  28. {
  29. *pkey_len =g_key.GenKey(out_key);
  30. if(*pkey_len >0)
  31. g_key.AddKey(sd, out_key, *pkey_len);
  32. return *pkey_len;
  33. }
  34. // 连接断开后的处理
  35. int WINAPI CryptOnConnectionClosed(int sd, char *out_key, int *pkey_len)
  36. {
  37. g_key.RemoveKey(sd);
  38. return 0;
  39. }
  40. // 加密数据
  41. int WINAPI CryptData(int sd, char *data, int len, char *data_crypted, int *pcrypted_len)
  42. {
  43. KEY_INFO *pkey;
  44. if(pkey =g_key.GetKey(sd))
  45. {
  46. g_des.encrypt(pkey->key, (unsigned char *)data, (unsigned char *)data_crypted, len/8);
  47. *pcrypted_len =len;
  48. }
  49. else *pcrypted_len =0;
  50. return len;
  51. }
  52. // 解密数据
  53. int WINAPI DecryptData(int sd, char *data, int len, char *data_decrypted, int *pdecrypted_len)
  54. {
  55. KEY_INFO *pkey;
  56. if(pkey =g_key.GetKey(sd))
  57. {
  58. g_des.encrypt(pkey->key, (unsigned char *)data, (unsigned char *)data_decrypted, len/8);
  59. *pdecrypted_len =len;
  60. }
  61. else *pdecrypted_len =0;
  62. return len;
  63. }