逆向破解 | 逆向 | 逆向分析 | CrackMe | Crack | CrackMe5 | CrackMe05

前言

CrackMe005,都说比较变态,很多人给放过去了,但是我还是决定上了它,既然变态就分两篇,上篇先实际说流程,到底应该怎么上它,下篇会告诉逆向分析的过程和方法

准备

【环境和工具】

  • win7/xp虚拟机环境

  • CrackMe005(ajj2.zip)

  • ollydbg

  • Dededark

  • peid

  • UPXEasyGUI.exe(upx专用脱壳器)

【学习层次】

  • 爆破,但是这个CM作者声明了,爆破他是不认可的

  • 解密流程,写注册机

  • 积累Delphi程序逆向特点经验

实战图文

一.最终效果动图展示

二.查壳、脱壳

1.peid查壳

发现是upx壳,如下图

2.脱壳

  • peid通用脱壳可以脱(脱后492K)

  • 手动OD脱可以脱(脱后492K)

  • UPXEasyGUI.exe(upx专用脱壳器)也可以脱,脱后(448K)

  • 建议UPXEasyGUI脱,前两种脱法脱后,反汇编代码有些地方会有一定的错位,会影响逆向分析

  • 具体原因是啥有高人可以指点的话请联系我

脱后如图

二.整个破解流程

注意:建议使用我已经修改过的原版,修改点只有一个字符X盘符改成了C盘符,否则你需要增加X分区或者改盘符,搁不住,所以我修改了程序,当然你也可以自己脱壳后,自己搜索字符串,自己再改盘符字符串

1.复制目录下ok.txt,到C:\ajj.126.c0m\j\o\j\o\ok.txt,这里我给原版的X盘改成C盘了,不然就改分区。

2.这时就应该可以显示出Edit2文本框,但是是禁用状态。

3.右键点击5次注册按钮(注意是右键)。

4.左键双击图框区空白处(不能点着图),Edit2文本框禁用解除。

5.用户名输入ajj

6.Edit2文本框内输入1_345,78后左键双击Edit2输入框中任何位置

7.在图片是“性相近”的时候,鼠标从软件框右下脚移入软件框内。

8.在图片是“性本善”的时候,鼠标从软件框左下角移入软件框内。

9.这时候应该label3显示出数字,是0,1,2,3这四个当中的其中一个。

10.将数字输入我写的注册机,点击生成最终点击方案。

11.依照方案点击相应图片,注册成功

三、注册机源码

源码中,我求的是点击次数总和最小的方法,因为其实有很多组合,只求效率最高的方法,源码写的比较臃肿,为的是新手好读懂

 void CCM002Dlg::OnOK()
{
// TODO: Add extra validation here //CDialog::OnOK(); char szKey[]={};
int n = ;
GetDlgItemText(IDC_EDIT1,szKey,);
if(!strlen(szKey))
{ MessageBox("请按照【前期步骤】获取正确数值后再生成方案!","友情提示");
return;
}
n = GetDlgItemInt(IDC_EDIT1); switch(n){
case :
n=0x3D;
break;
case :
n=0x34;
break;
case :
n=0xDF;
break; default : // 可选的
n=0x41;
} struct image
{
char szname[];
int nNumber ;
int nLef;
int nRight;
};
image aImage[]={}; sprintf(aImage[].szname,"人之初");
aImage[].nNumber = ;
aImage[].nLef = 0x2;
aImage[].nRight = 0x11; sprintf(aImage[].szname,"性本善");
aImage[].nNumber = ;
aImage[].nLef = 0x3;
aImage[].nRight = 0x13; sprintf(aImage[].szname,"性相近");
aImage[].nNumber = ;
aImage[].nLef = 0x5;
aImage[].nRight = 0x17; sprintf(aImage[].szname,"习相远");
aImage[].nNumber = ;
aImage[].nLef = 0x7;
aImage[].nRight = 0x1B;
/************************************************************************/
/* 设计原则,选择出点击次数最少的方案
/* iR作为大数数组下标,iL作为小数数组下标,j大数商,k小数商,求i+j最小值
/************************************************************************/
int nRes = ;
int nIL = ;
int nIR = ;
int nJ = ;
int nK = ;
for (int iL=;iL<;iL++)
{
for (int iR=;iR < ;iR++)
{ for (int j=;j<=;j++)
{
for (int k =;k<=;k++)
{ if ((aImage[iR].nRight*j + aImage[iL].nLef*k == n) && (nRes> j+k))
{
nIL = iL;
nIR = iR;
nJ = j;
nK = k;
nRes = j+k ;
} }
}
} } sprintf(szKey,"在“%s”图片时左键点击图片%d次\r\n\r\n在“%s”图片时右键点击图片%d次\r\n\r\n即可注册成功!",aImage[nIL].szname,nK,aImage[nIR].szname,nJ);
SetDlgItemText(IDC_EDIT2,szKey); }

CrackMe-005全破详解(图文+源码)--上篇的更多相关文章

  1. Java SPI机制实战详解及源码分析

    背景介绍 提起SPI机制,可能很多人不太熟悉,它是由JDK直接提供的,全称为:Service Provider Interface.而在平时的使用过程中也很少遇到,但如果你阅读一些框架的源码时,会发现 ...

  2. 基于双向BiLstm神经网络的中文分词详解及源码

    基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码 ...

  3. 详解 QT 源码之 Qt 事件机制原理

    QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...

  4. Android应用AsyncTask处理机制详解及源码分析

    1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handler异步机制原理(不了解的可以阅读我的<Android异步消息处理机 ...

  5. SpringBoot之DispatcherServlet详解及源码解析

    在使用SpringBoot之后,我们表面上已经无法直接看到DispatcherServlet的使用了.本篇文章,带大家从最初DispatcherServlet的使用开始到SpringBoot源码中Di ...

  6. Spring Boot启动命令参数详解及源码分析

    使用过Spring Boot,我们都知道通过java -jar可以快速启动Spring Boot项目.同时,也可以通过在执行jar -jar时传递参数来进行配置.本文带大家系统的了解一下Spring ...

  7. select用法&原理详解(源码剖析)(转)

    今天遇到了在select()前后fd_set的变化问题,查了好久终于找到一个有用的帖子了,很赞,很详细!!原文链接如下: select用法&原理详解(源码剖析) 我的问题是: 如下图示:在se ...

  8. 【转载】Android应用AsyncTask处理机制详解及源码分析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果] 1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个 ...

  9. 详解HashMap源码解析(下)

    上文详解HashMap源码解析(上)介绍了HashMap整体介绍了一下数据结构,主要属性字段,获取数组的索引下标,以及几个构造方法.本文重点讲解元素的添加.查找.扩容等主要方法. 添加元素 put(K ...

  10. 详解ConCurrentHashMap源码(jdk1.8)

    ConCurrentHashMap是一个支持高并发集合,常用的集合之一,在jdk1.8中ConCurrentHashMap的结构和操作和HashMap都很类似: 数据结构基于数组+链表/红黑树. ge ...

随机推荐

  1. C# Aspose.Cells方式导入Excel文件

    读取Excel 类 我返回的是DataTable 类型 也可以返回DataSet类型 public class XlsFileHelper { public DataTable ImportExcel ...

  2. Hadoop2.7.6_06_mapreduce参数优化

    MapReduce重要配置参数 1. 资源相关参数 //以下参数是在用户自己的mr应用程序中配置就可以生效 () mapreduce.map.memory.mb: 一个Map Task可使用的资源上限 ...

  3. web笔试

    类型判断用到哪些方法? typeof和instanceof 值类型和引用类型的区别? 根据 JavaScript中的变量类型传递方式,又分为值类型和引用类型,在参数传递方式上,值类型是按值传递,引用类 ...

  4. VCS双机+oracle 11gR2+ASM主机名修改

    ----------------------------------------------------------------------------VCS修改主机名---------------- ...

  5. 20145236《网络攻防》Exp4 恶意代码分析

    20145236<网络攻防>Exp4 恶意代码分析 一.基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些 ...

  6. Click to add to Favorites Troubleshooting: High Version Count Issues (Doc ID 296377.1)

    Copyright (c) 2018, Oracle. All rights reserved. Oracle Confidential. Click to add to Favorites Trou ...

  7. vue 路由的基本使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. dijkstra P4779 【模板】单源最短路径(标准版) 洛谷luogu

    题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100→60 Ag→Cu 最终,他因此没能与理想的大 ...

  9. MTALAB——神经网络mae()、mse()、sse()

    mae():平均绝对误差 mse:均方误差 sse:误差平方和

  10. undefined == false 么

    今天碰到个问题,我需要去判断 undefined == false 会返回什么,想当然的以为会返回true,但是结果却返回的是false,这我就有点晕了,不是说undefined.null.0.NaN ...