CrackMe005-下篇 | 逆向破解分析 | 160个CrackMe(视频+图文)深度解析系列
作者:逆向驿站
微信公众号:逆向驿站
知乎:逆向驿站

CrackMe005,上篇说了具体方法,下篇来发逆向分析过程,看看老夫是如何得到上篇的具体方法的!
准备
【环境和工具】
win7/xp虚拟机环境
CrackMe005(ajj2.zip)
ollydbg
Dededark
peid
UPXEasyGUI.exe(upx专用脱壳器)
【学习层次】
爆破,但是这个CM作者声明了,爆破他是不认可的
解密流程,写注册机
积累Delphi程序逆向特点经验
详解视频
搞清Delphi控件ID在反汇编代码中的特点,其实逻辑就清晰多了
https://v.qq.com/x/page/x0830kl51en.html
实战图文
一.DedeDark梳理事件、控件信息
二.动态分析
1.根据字符串定位总判断位置
字符串“注册了”,“厉害厉害真佩服”入手,定位发现是timer2事件函数,五个判断不停的判断,如图
可以看到判断跟6个值有关,分别是[ebx+304]、[ebx+308]、[ebx+310]、[ebx+318]、[ebx+314]、[ebx+31C],我们下文所有就对其简称做304、308、310、318、314、31C
2.逐个判断层层分析
我们从简单往复杂,并结合他们之间内在的逻辑先后顺序,去逐个分析,顺序分别是31C、304、308、310、314和318,其中最难的是310,方法是常量跟踪法,即在OD中点击 查找→所有常量 ,看看都那些地方对这些值有操作
31C
总判断目标:31C值,不能等于0x3E7
相关事件函数:Button1Click
最终逆向分析结论:Buton1Click事件不能被触发,否则31C就会被赋值0x3E7,即不能点击注册按钮,这里需要注意click事件和mousedown事件,click必须是一个按下和抬起的全过程,而且鼠标位置都在按钮控件范围内,而mousedwon事件按下就是
具体逆向分析过程如下
所有常量查找结果,如下
反汇编代码如下
呵呵就一行,确实简单吧
304
总判断目标:304值,不能等于0xC34
相关事件函数:FormCreat
最终逆向分析结论:FormCreat生成表单的事件函数中,会对一个固定路径检查是否有合规内容的合规文件,有则,显示出隐藏的Edit2控件
具体逆向分析过程如下
所有常量查找结果,如下
反汇编代码如下
注意:我这里已经把,CrackMe开发者要求的X盘符改为了C盘符,为的是方便
308
总判断目标:308值,不能等于0x230D
相关事件函数:Button1MouseDown、Panel1DblClick
最终逆向分析结论:308初始值是由FormCreat函数初始化为0x28E,在Button1MouseDown事件中,右键一次则308值增加0x3,最终目标是0x29D,因为等于0x29D后,Panel1DblClick事件就可以解禁Edit2控件,则0x29D减去0x28E再除以0x3最后结果等于5,即右键点击注册按钮5次,再去双击panel1控件没有图的地方,就可以解禁Edit2控件
具体逆向分析过程如下
所有常量查找结果,如下
反汇编代码如下
310 中嵌套 30C,最复杂的地方
总判断目标:310值,必须等于0xF94
相关事件函数:FormMouseMove、Edit2DblClick
最终逆向分析结论:310的值要想最终被赋值0xF94,必须完成三重判断,第一个是当控件ID是0xE20时,即是image3"性相近"的时候,FormMouseMove捕捉的XY坐标都足够大,即右下脚,满足则310被赋值0x10,第二个是当控件ID是0x2DC时,即image2"性本善"的时候,FormMouseMove捕捉的X坐标足够小、Y坐标足够大,第三个是,30C不能等于初始值0x9, 30C被赋值的条件是Edit2中的字符串长度是8位,且第二位是"_",第6位是"," ,我们写1_345,78是符合要求的,同时要求用户名长度是3的整数倍,然后左键双击Edit2控件,即可给30C赋值,具体赋值结果又跟你的磁盘剩余空间有关。当上面这一系列嵌套判断都合规后,则完成310赋值0xF94,同时若是用户名是"ajj",则显示隐藏控件ID是0x2FC的Label3,显示值是30C
具体逆向分析过程如下
310所有常量查找结果,如下
310反汇编代码如下
发现嵌套30C,那么继续常量查找30C,如下
30C反汇编代码如下
这里其实是这个crackme最难的地方了,其实逻辑并不复杂,需要耐性和记录给理清晰即可
314和318
总判断目标:314的值等于318的值
相关事件函数:image1~4MouseDown
最终逆向分析结论:其实314的值在上一个流程中已经赋值完毕,314的值取决于30C的值,30C分别是0、1、2、3的时候,314分别是0x41、0x3D、0x34、0xDF,而318的值,则是点击1~4幅图片,区分左右键,分别自增不同的数值,具体如下方图片,最终要求318的值等于314的值
具体逆向分析过程如下
所有常量314查找结果,如下
314反汇编代码如下
318所有常量查找结果,如图
至此,如下图timer2所有的总判断全部过关,所以timer2每次触发,都将走注册成功的流程,是不是感觉很刺激,跃跃欲试的,去网盘中下载,去折磨自己的吧
最后,喜欢这里的请关注并推荐给你身边的朋友吧(渗透测试、逆向破解、病毒分析、信息安全等)
文章中涉及软件、课件、源码等均在网盘,为避免网盘链接失效,公众号中回复:网盘

相关文章
标签:逆向|破解|反汇编|olldbg|渗透测试|病毒分析|网络安全|区块链
本期标签:dededark|delphi反汇编|crackme|crackme5|crackme05
CrackMe005-下篇 | 逆向破解分析 | 160个CrackMe(视频+图文)深度解析系列的更多相关文章
- 逆向破解之160个CrackMe —— 017
CrackMe —— 017 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 010-011
CrackMe —— 010 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 008-009
CrackMe —— 008 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 001(上)
CrackMe--001 前置知识介绍: 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合,一共160个待逆向破解的程序 CrackMe:一些公开给别人尝试破解的小程序,制 ...
- 逆向破解之160个CrackMe —— 001
CrackMe —— 001 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 002-003
CrackMe —— 002 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 004-005
CrackMe —— 004 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 013
CrackMe —— 013 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 014
CrackMe —— 014 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
随机推荐
- 百度纯CSS生成菜单
首页我们打看dreamweaver或其它编辑器,创建一个名为nav的导航菜单 <div class="nav"> <ul> <li><a ...
- Linux 内存池【转】
内存池(Memery Pool)技术是在真正使用内存之前,先申请分配一定数量的.大小相等(一般情况下)的内存块留作备用.当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存 ...
- HCNA网络技术命令
1.display version 显示系统软件版本及硬件信息 2.system-view 切换到系统视图 3.quit 切换回用户视图 4.return 从任意非用户视图退回到用户视图 5.sysn ...
- 动态、静态编译以及MD、MDd、MT、MTd编译
本文转自:https://blog.csdn.net/u012273127/article/details/71419499 一.问题的引出 最近在VS2012中新建了一个MFC的工程,在自己电脑上运 ...
- git merge 步骤
这两天用git比较多,自己学习的过程踩了不少误区,特意记录下来. 当多人合作开发使用git作为代码管理仓库时,要注意自己的更新不能冲掉别人的更新,因为自己一开始不了解的时候就出现了这种情况.首先一定要 ...
- Properties集合_list方法与store方法
Properties集合和流对象结合的功能 list()方法: import java.util.Properties; public class PropertiesDemo { public st ...
- Django之ORM查询
ORM 映射关系: 表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象图书管理系统的增删改查:代码如下:views ...
- QT 12 QTimage转换Mat
QImage cvMat2QImage(const cv::Mat& mat) { // 8-bits unsigned, NO. OF CHANNELS = 1 if(mat.type() ...
- smartpass
1.smartpass 是用户注册后,产生的用户名密码 与每个摄像头的用户名密码不一致 2.每个设备初始化登录密码为admin admin,如果需要修改,则在进入该设备IP地址,设置——>用户管 ...
- P1006 传纸条-洛谷luogu-dp动态规划
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运 ...