zoukankan      html  css  js  c++  java
  • 360破解大赛crackme分析--之3DES解密附加数据

    具体的分析这里有。本人仅仅是对这里面有趣的算法进行了一些学习

    分析链接


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

  • 相关阅读:
    Android Studio使用
    VS.NET发送会议邮件程序原码
    C#中渐变色的代码实例,用于自绘菜单
    VS.NET获取某年某月的天数
    AJAX原理简要说明及实例
    ASP.NET下增加定时器功能
    VS.NET发送普通邮件原码
    保存xml到server实例
    VS.NET通过OUTLOOK发邮件
    利用IE打印的一点实例代码
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6762487.html
Copyright © 2011-2022 走看看