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

来源:互联网 发布:c语言入门的书 编辑:程序博客网 时间:2024/04/30 23:01

详细的分析这里有,本人只是对这里面有趣的算法进行了一些学习

分析链接


这次是逆向的使用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"; //创建/获取一个密码容器CSPHCRYPTPROV 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

0 0
原创粉丝点击