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

19 篇文章 1 订阅
7 篇文章 0 订阅

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

分析链接


这次是逆向的使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值