CM005-逆向分析过程(上篇)
前言
005,都说比较变态,很多人给放过去了,但是我还是决定上了它,既然变态就分两篇,上篇先实际说流程,到底应该怎么上它,下篇会告诉逆向分析的过程和方法
准备
【环境和工具】
win7/xp虚拟机环境
CrackMe005(ajj2.zip)
ollydbg
Dededark
peid
UPXEasyGUI.exe
【学习层次】
这个CM作者声明了,“爆”他是不认可的
解密流程,写key
积累Delphi程序逆向特点经验
实战图文
一.最终效果动图展示

整个流程
注意:建议使用我已经修改过的原版,修改点只有一个字符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.依照方案点击相应图片,注册成功

三、key源码
源码中,我求的是点击次数总和最小的方法,因为其实有很多组合,只求效率最高的方法,源码写的比较臃肿,为的是新手好读懂
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); }
CM005-逆向分析过程(上篇)的更多相关文章
- 20145307陈俊达_安卓逆向分析_Xposed的hook技术研究
20145307陈俊达_安卓逆向分析_Xposed的hook技术研究 引言 其实这份我早就想写了,xposed这个东西我在安卓SDK 4.4.4的时候就在玩了,root后安装架构,起初是为了实现一些屌 ...
- IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习
相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...
- C++反汇编与逆向分析技术揭秘
C++反汇编-继承和多重继承 学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...
- TI(德州仪器) TMS320C674x逆向分析之一
一.声明 作者并不懂嵌入式开发,整个逆向流程都是根据自身逆向经验,一步一步摸索出来,有什么错误请批评指正,或者有更好的方法请不吝赐教.个人写作水平有限,文中会尽量把过程写清楚,有问题或是写的不清楚的地 ...
- 一文了解安卓APP逆向分析与保护机制
"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...
- Android逆向分析(2) APK的打包与安装背后的故事
前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...
- 逆向分析一款国外Blackjack Card Counter软件并附上License生成脚本
没有学过逆向,一时兴起,搞了一下这个小软件,名为“逆向分析”,其实过程非常简单,难登大雅之堂,就当段子看吧.首先介绍一下背景吧.这是一款国外的Blackjack也就是21点算牌软件,我从来不玩牌的,机 ...
- Android逆向分析(2) APK的打包与安装
http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...
- 一个DOS攻击木马的详细分析过程
一个DOS攻击木马的详细分析过程 0×01 起因 网路流量里发现了大量的的1.exe的文件,而且一直在持续,第一感觉就像是一个木马程序,而且每个1.exe的MD5都不一样,对比发现只有几个字节不一样( ...
随机推荐
- 斯诺克台球比赛规则 (Snooker)
斯诺克台球比赛规则 斯诺克(Snooker)的意思是“阻碍.障碍”,所以斯诺克台球有时也被称为障碍台球.此项运动使用的球桌长约3569毫米.宽1778毫米,台面四角以及两长边中心位置各有一个球洞,使用 ...
- Django之cookie&session
cookie Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息 ...
- 【爬坑】运行 Hadoop 的 MapReduce 示例卡住了
1. 问题说明 在以伪分布式模式运行 Hadoop 自带的 MapReduce 示例,卡在了 Running job ,如图所示 2. 解决过程 查看日志没得到有用的信息 再次确认配置信息没有错误信息 ...
- dll动态链接库导出函数方法 -- 静态导出(__declspec前缀导出)
简介 在之前已经笔者已经写过利用.def文件进行dll函数动态导出的文章,那么今天就给大家介绍一下,如何利用**__declspec**函数前缀进行简单的静态函数导出. 要点 大家阅读过动态导出的文章 ...
- MSChart 设置饼图颜色 图例背景色 图例显示位置
chartField.Series.Clear(); chartField.ChartAreas.Clear(); chartField.Legends.C ...
- MySql详解(四)
MySql详解(四) MySql的DML操作 插入: 一.方式一 语法: insert into 表名(字段名,...) values(值,...); 特点: 1.要求值的类型和字段的类型要一致或兼容 ...
- ES6标准入门之变量的解构赋值简单解说
首先我们来看一看解构的概念,在ES6标准下,允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称作解构,简而言之粗糙的理解就是变相赋值. 解构赋值的规则是,只要等号右边的值不是对象或者数组 ...
- ocr jdk
公司有个需求,遍历所有图片,筛选出含有敏感字的图片.这里就需要ocr技术,找了几天,发现了几个不错的ocr jdk. http://cn.ocrsdk.com/ 俄罗斯公司,贵有贵的道理 http:/ ...
- json 压缩中文不转码
$testJSON=array('name'=>'中文字符串','value'=>'test'); echo json_encode($testJSON, JSON_UNESCAPED_U ...
- OpenCV——模板匹配
minMaxLoc函数: void minMaxLoc( const Mat& src, double* minVal, double* maxVal=0, Point* minLoc=0, ...