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

分析链接

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

360破解大赛crackme分析--之3DES解密附加数据的更多相关文章

  1. 某虚拟定位APP从破解到原理分析

    工具环境ida7.0iphone 6ios 10.2 0x00:基本情况 1. 该app可以修改模拟手机地理位置(gps.基站.WIFI),拥有全局定位.指定应用定位.模拟扫街等功能,只能在已越狱的I ...

  2. iOS 3DES加密 和 java 3DES 解密

    首先进入头文件: #import <CommonCrypto/CommonDigest.h> #import <CommonCrypto/CommonCryptor.h> #i ...

  3. 插件开发之360 DroidPlugin源码分析(五)Service预注册占坑

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52264977 在了解系统的activity,service,broa ...

  4. 插件开发之360 DroidPlugin源码分析(四)Activity预注册占坑

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52258434 在了解系统的activity,service,broa ...

  5. JVM源码分析之Metaspace解密

        概述 metaspace,顾名思义,元数据空间,专门用来存元数据的,它是jdk8里特有的数据结构用来替代perm,这块空间很有自己的特点,前段时间公司这块的问题太多了,主要是因为升级了中间件所 ...

  6. PE文件附加数据感染之Worm.Win32.Agent.ayd病毒分析

    一.基本信息 样本名称:1q8JRgwDeGMofs.exe 病毒名称:Worm.Win32.Agent.ayd 文件大小:165384 字节 文件MD5:7EF5D0028997CB7DD3484A ...

  7. 为什么Wireshark无法解密HTTPS数据

    为什么Wireshark无法解密HTTPS数据 导读 由于需要定位一个问题,在服务器上tcpdump抓取https数据包,然后下载到本地打开wireshark分析.然后我们下载域名私钥配置到wires ...

  8. 以Crypto++实现RSA加解密二进制数据

    网上一大片讲怎么加解密字符串的,找了大半天也没找到讲加解密二进制数据的,于是自己研究了下,分享给大家. 加解密函数: #include <rsa.h> #include <randp ...

  9. 网易郑栋:数据采集与分析的那些事——从数据埋点到AB测试

    本文由  网易云发布. 4月8日晚,DTalk邀请到了网易互联网分析产品.可视化 BI 产品的负责人—郑栋老师,进行了一次关于<网易郑栋:数据采集与分析的那些事第一弹: 数据篇>的主题分享 ...

随机推荐

  1. 单选框input:radio

      单选框 CreateTime--2017年5月15日11:40:04 Author:Marydon 四.单选框 (一)语法 <input type="radio"/> ...

  2. Linux-软件包管理-RPM安装位置\源码包安装位置

    rpm -ql httpd 查看apache包中文件的安装位置 find /etc -name httpd 查找apache程序的启动执行httpd所在位置 cd /etc/rc.d/init.d 切 ...

  3. idea 更换编辑器背景图片

    插件名称是:BackgroundImage, 安装后效果图

  4. 【python下使用OpenCV实现计算机视觉读书笔记1】输入输出

    说明: 该部分内容为<OpenCV Computer Vision with Python>读书笔记. 1.读入文件与保存. import cv2 image=cv2.imread('a. ...

  5. 了解C#文件操作

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  6. 使用Secure Boot后,导致VMware无法启动虚拟机

    最初安装vmware时就报错  Gtk-Message: Failed to load module "canberra-gtk-module": libcanberra-gtk- ...

  7. 边沿检测电路设计verilog

    Abstract 边沿检测电路(edge detection circuit)是个常用的基本电路. Introduction 所谓边沿检测就是对前一个clock状态和目前clock状态的比较,如果是由 ...

  8. OpenCV3+Python3

    OpenCV3计算机视觉Python语言实现笔记 图像处理与OpenCV Python3与OpenCV3.3 图像处理 OpenCV文摘 基于Python3 + OpenCV3.3.1的远程监控程序 ...

  9. JavaScript判断浏览器类型及版本(新增IE11)

    $(function () { var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/rv:( ...

  10. 466. Count Linked List Nodes【Naive】

    Count how many nodes in a linked list. Example Given 1->3->5, return 3. 解法一: /** * Definition ...