看流星社区

 找回密码
 注册账号
查看: 1995|回复: 0

360破解大赛crackme分析--之3DES解密附加数据

[复制链接]

该用户从未签到

发表于 2017-6-2 11:00:56 | 显示全部楼层 |阅读模式
详细的分析这里有,本人只是对这里面有趣的算法进行了一些学习
分析链接


这次是逆向的使用3DES解密的过程中的内容:
使用微软的crypt库 使用3DES解密程序中的附加数据
代码:
  1. VOID encryptData()
  2. {
  3.         TCHAR szModuleFile[MAX_PATH] = "C:\\Users\\Administrator\\Desktop\\破解技术考题 360\\破解考题.over";
  4.         HANDLE hFile = ::CreateFile(szModuleFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
  5.         if (!hFile)
  6.         {
  7.                 AfxMessageBox("createfile error");
  8.                 return;
  9.         }
  10.         DWORD dwFileSize = 0;
  11.         dwFileSize = ::GetFileSize(hFile, NULL);
  12.         DWORD dwError = ::GetLastError();
  13.         TCHAR *pBuffer = new TCHAR[dwFileSize*2];
  14.         memset(pBuffer, 0, sizeof(pBuffer));
  15.         DWORD dwReaded = 0;
  16.         ::ReadFile(hFile, pBuffer, dwFileSize, &dwReaded, NULL);
  17.         TCHAR pText[] = "dfe963a6";
  18.         //创建/获取一个密码容器CSP
  19.         HCRYPTPROV hProv;
  20.         TCHAR pszContentName[] = "Microsoft Enhanced RSA and AES Cryptographic Provider";
  21.         if (!::CryptAcquireContext(&hProv, NULL, pszContentName, 0x18, 0))
  22.         {
  23.                 DWORD dwError = ::GetLastError();
  24.                 AfxMessageBox("cryptAcquireContext error");
  25.                 return ;
  26.         }
  27.        
  28.         //创建/获取/导入一个密钥
  29.         HCRYPTHASH hHash;
  30.         if (!CryptCreateHash(hProv, 0x8003, 0, 0, &hHash))
  31.         {
  32.                 AfxMessageBox("cryptcreateHash error");
  33.                 return ;
  34.         }
  35.         //使用密钥进行加密/解密
  36.         ::CryptHashData(hHash, (BYTE*)pText, strlen(pText), NULL);
  37.         HCRYPTKEY hKey;
  38.         ::CryptDeriveKey(hProv, 0x660E, hHash, 0x800000, &hKey); //CALG_AES_128 0x660E   0x800000
  39.         ::CryptDecrypt(hKey, 0, TRUE, 0, (BYTE*)pBuffer, &dwFileSize); //0
  40.         ::CryptDestroyKey(hKey);
  41.         ::CryptDestroyHash(hHash);
  42.         ::free(pBuffer);
  43.         ::CloseHandle(hFile);
  44. }
复制代码
测试环境:
1. 使用ffi将crackme中的附加数据导出来,当做这个程序的输入数据使用


2.使用微软的加密库时的设置
在stdafx.h中加入这么几行代码:
  1. #ifndef   _WIN32_WINNT
  2. #define   _WIN32_WINNT   0x0400
  3. #endif
复制代码
3. 最后程序中的pBuffer中就是解密出来的数据


附件下载
http://download.csdn.net/detail/xiaocaiju/7417093
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-16 22:49

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表