- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
详细的分析这里有,本人只是对这里面有趣的算法进行了一些学习
分析链接
这次是逆向的使用3DES解密的过程中的内容:
使用微软的crypt库 使用3DES解密程序中的附加数据
代码:- VOID encryptData()
- {
- TCHAR szModuleFile[MAX_PATH] = "C:\\Users\\Administrator\\Desktop\\破解技术考题 360\\破解考题.over";
- HANDLE hFile = ::CreateFile(szModuleFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
- if (!hFile)
- {
- AfxMessageBox("createfile error");
- return;
- }
- DWORD dwFileSize = 0;
- dwFileSize = ::GetFileSize(hFile, NULL);
- DWORD dwError = ::GetLastError();
- TCHAR *pBuffer = new TCHAR[dwFileSize*2];
- memset(pBuffer, 0, sizeof(pBuffer));
- DWORD dwReaded = 0;
- ::ReadFile(hFile, pBuffer, dwFileSize, &dwReaded, NULL);
- TCHAR pText[] = "dfe963a6";
- //创建/获取一个密码容器CSP
- HCRYPTPROV hProv;
- TCHAR pszContentName[] = "Microsoft Enhanced RSA and AES Cryptographic Provider";
- if (!::CryptAcquireContext(&hProv, NULL, pszContentName, 0x18, 0))
- {
- DWORD dwError = ::GetLastError();
- AfxMessageBox("cryptAcquireContext error");
- return ;
- }
-
- //创建/获取/导入一个密钥
- HCRYPTHASH hHash;
- if (!CryptCreateHash(hProv, 0x8003, 0, 0, &hHash))
- {
- AfxMessageBox("cryptcreateHash error");
- return ;
- }
- //使用密钥进行加密/解密
- ::CryptHashData(hHash, (BYTE*)pText, strlen(pText), NULL);
- HCRYPTKEY hKey;
- ::CryptDeriveKey(hProv, 0x660E, hHash, 0x800000, &hKey); //CALG_AES_128 0x660E 0x800000
- ::CryptDecrypt(hKey, 0, TRUE, 0, (BYTE*)pBuffer, &dwFileSize); //0
- ::CryptDestroyKey(hKey);
- ::CryptDestroyHash(hHash);
- ::free(pBuffer);
- ::CloseHandle(hFile);
- }
复制代码 测试环境:
1. 使用ffi将crackme中的附加数据导出来,当做这个程序的输入数据使用
2.使用微软的加密库时的设置
在stdafx.h中加入这么几行代码:- #ifndef _WIN32_WINNT
- #define _WIN32_WINNT 0x0400
- #endif
复制代码 3. 最后程序中的pBuffer中就是解密出来的数据
附件下载
http://download.csdn.net/detail/xiaocaiju/7417093 |
|