原文链接
CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码)

crackme006,依然是delphi的,而且没壳子,条线比较清晰,算法也不难,非常适合新入门的来练习.
快过年了,Crackme系列年前就停更在006吧,祝大家新年666 ,年后继续

###准备

【环境和工具】

  • win7/xp虚拟机环境

  • CrackMe006(aLoNg3x.1.exe)

  • ollydbg

  • Dededark

【学习层次】

  • 逆向分析程序验证流程逻辑

  • 解密算法,写注册机

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

实战图文

最终效果展示

程序验证流程逻辑图

动态分析

1.程序观察

旁边既然有个help,我们当然要看了,四个弹框,有实际信息价值的是头两个,如图


大体意思是,这个crackme的最终目标是隐藏ok和cancella按钮来观看完整的Ringzero logo。

2.控件ID,事件函数信息
依然老规矩,既然是delphi的程序,我们就先用dededark给控件信息和事件函数信息搜集出来

3.控件ID常量搜索法,打开入手点
程序开始是ok按钮是禁用状态,cancella按钮是可以点击的,那么我们就从cancella入手,两个方向,你可以去找cancellaclick事件的函数入手,也可以从cancella控件ID入手,我这里选择后者,因为最终目的是cancella要被隐藏起来,无论如何一定会用到控件ID

查找→所有常量→2D0(cancella按钮控件ID),结果如下

一共有四个地方用到了这个控件ID,我们分别跟入查看哪个是我们想找的隐藏这个控件的反汇编代码,从上至下依次如下




找到了入手点,我们开始上下阅读函数块,发现这正是cancellaclick事件函数

4.分析Cancellaclick中算法
在Cancellaclick函数入口处下断点,然后用户名输入123456,注册码输入654321,然后开始动态调试分析,F8步过分析如下图

F7跟如算法call仔细分析,如下图

这种不是摘要hash的,是直接可以逆推计算出注册码,根据以上算法的反汇编分析,写出逆推注册码的源码,如下

 char szName1[128] = {0};char szCode[128] ={0} ;char szRes[256] ={0} ;int nKey = 0 ;int nlen = 0;int nTemp = 0 ;GetDlgItemText(IDC_EDIT1,szName1,128);nlen = strlen(szName1);if (nlen<=5 || nlen >10 || szName1[0] == 0x30){MessageBox("请输入6-10字符长度的字符串,而且第一位不能是0!","逆向驿站提示您");return ;}/************************************************************************//* cancella点击事件算法,可隐藏cancella按钮,根据输入name推code          *//************************************************************************/nKey = ((int)szName1[4])%7+2 ;nTemp = nKey ;//阶乘for (int i=1;i<nTemp;i++){nKey = nKey * i;}nTemp = nKey ;nKey = 0 ;//求和for (int j =0;j<nlen ;j++){nKey = nKey + nTemp * ((int)szName1[j]);}//得出正确codenKey = nKey - 0x7a69 ;//nKey值就是code应该输入的值

例如我们输入的用户名是123456,逆推注册码计算如下

  • “123456"的第五个字符是"5”,asc码是53,即十六进制0x35

  • 除以7余数是4,再加2是6

  • 6的阶乘是6 * 5* 4* 3 *2 *1,等于720 ,即十六进制的0x2D0

  • 123456每个字符的asc码相加是0x31+0x32+0x33+0x34+0x35+0x36,结果是0x135

  • 0x135 乘以0x2D0是0x36510

  • 0x36510比注册码的十六进制形态大0x7A69

  • 即注册码是0x36510-0x7A69 = 0x2EAA7 ,即十进制是191143

算出了注册码,我们来测试一下,如下动图

Cancella按钮消失

5.分析OK按钮中算法
有了如上的过程作为经验,我们"依葫芦画瓢",来进行ok按钮中的算法分析,依然是okClick事件入口下断,F8动态分析,结果如下

F7跟如算法call仔细分析,如下图

分析后发现,这个算法是根据已经算出的注册码,再次要求用户名合规,算法并不难,而且很敏感的看到0x41,0x41对应的asc字符是大写字母A,而0x41加上的数字的取值范围是0-0x19,即十进制0-25,那一看就知道,就是26个大写字母范围内了,这时候你可以变态的暴力枚举也行,当然这个也是可以逆推出来,我们还是选择逆推吧。源码如下

 /************************************************************************//* ok点击事件算法,可隐藏ok按钮,根据code推name                          *//************************************************************************/sprintf(szCode,"%d",nKey);nlen =strlen(szCode);szName1[nlen]='\0';//循环处理后,szName1就是要求的namefor (int k =nlen-1;k>=0;k--){szName1[k] = ((int)szCode[k] * (int)szCode[k] * (k+1))%0x19+0x41;}sprintf(szRes,"1.请在code处输入%d,然后点击cancella按钮\r\n\r\n", nKey);sprintf(szRes+strlen(szRes),"2.cancella按钮消失后,请在name处输入%s,然后点击ok按钮\r\n\r\n", szName1);sprintf(szRes+strlen(szRes),"3.ok按钮消失,注册成功");SetDlgItemText(IDC_EDIT2,szRes);

我们刚输入的注册码是191143,逆推出用户名应该是"BXDEUG",验证如下动图

OK按钮消失,至此全部搞定, 是不是感觉不难,去网盘中下载,试试吧

补充知识点

再CancellaClick事件算法中,有个阶乘计算,函数内部反汇编代码如下,可以作为知识点积累,下次看到这个第一时间就能反应过来,提高效率,逆向的老手往往是这种知识碎片很多,而且脑部搜索算法很精准

最后,喜欢这里的请推荐给你身边的朋友吧(渗透测试、逆向破解、病毒分析、信息安全等)

文章中涉及软件、课件、源码等均在网盘,为避免网盘链接失效,公众号中回复:网盘

欢迎关注微信公众号:逆向驿站

相关文章

● CrackMe-005精解(下)

● CrackMe-005精解(上)

● CrackMe-004精解

● CrackMe-003精解

● CrackMe-002精解

● CrackMe-001精解

本期标签:dededark|delphi反汇编|crackme|crackme6|crackme06

Crackme006 - 全新160个CrackMe深度解析系列(图文+视频+注册机源码)相关推荐

  1. CrackMe007 | 难度适当提高 |160个CrackMe深度解析(图文+视频+注册机源码)

    作者:逆向驿站 微信公众号:逆向驿站 知乎:逆向驿站 crackme007,是006的升级版,程序开发者给出的难度是3星,可能是迷惑有点多?个人觉得条线还是比较清晰,难度也不大,依然适合新手 准备 [ ...

  2. Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)

    知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...

  3. CrackMe006 | 160个crackme精解系列(图文+视频+注册机源码)

    作者:逆向驿站 微信公众号:逆向驿站 知乎:逆向驿站 crackme006,依然是delphi的,而且没壳子,条线比较清晰,算法也不难,非常适合新入门的来练习. 快过年了,Crackme系列年前就停更 ...

  4. 视频+图文+注册+机源码 | 160个CrackMe深度解析合集 | 逆向破解入门

    全部合集的获取请关注微信公众号:逆向驿站 回复:160 即可获得其余合集 以下是示例文章 160个CrackMe深度解析合集-001 提倡"刨根问底",拒绝"浅尝辄止&q ...

  5. 《深度解析Java游戏服务器开发》源码

    不知什么原因,出售的<深度解析Java游戏服务器开发>一书中,没有给出源码,这里补上,源码已经上传至github: https://github.com/hjcenry/JavaServe ...

  6. 深度解析leaf分布式id生成服务源码(号段模式)

    原创不易,转载请注明出处 文章目录 前言 1.实现原理推演 1.1 基于mysql最简单分布式ID实现 1.2 flickr分布式id解决方案 1.3 号段+mysql 2.源码剖析 2.1初始化 2 ...

  7. 9 月直播课预告 | CODING DevOps 深度解析系列上线啦

    9 月直播课抢先看 CODING DevOps 9 月直播课闪亮登场!本次线上直播课由 CODING 联合专业咨询与培训公司 - 青蓝咨询,于 9 月 22 日 - 24 日为同学们带来 CODING ...

  8. 深度解析 H.265 视频解决方案

    深度解析 H.265 视频解决方案 参考文章: (1)深度解析 H.265 视频解决方案 (2)https://www.cnblogs.com/upyun/p/6963611.html 备忘一下.

  9. 深度分析Java的ClassLoader机制(源码级别)

    转载自 深度分析Java的ClassLoader机制(源码级别) Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取 ...

最新文章

  1. java开怎么能不知道Netty几个核心类呢?
  2. Asp.net 后台添加CSS、JS、Meta标签
  3. 操作多个表_8_不等值连接
  4. c#基础知识第十一节
  5. 合并两个已经排好序的不等长的数组
  6. python3字符串处理,高效切片
  7. 【Linux入门学习之】Linux连接文件:硬连接和软连接
  8. 局域网内通过代理服务器上网的详细设置
  9. rtl8811au黑苹果10.15_荣耀MagicBook I5黑苹果折腾记(超详细教程与排坑)
  10. python+Django+test 测试数据库生成报错
  11. AdapterView相关
  12. 计算机毕业设计之 [含论文+答辩PPT+任务书+中期检查表+源码等]S2SH动漫论坛[包运行成功]
  13. 【java基础】三目表达式
  14. hive相关的example
  15. 【故事】跟零计算机基础的房东女儿讲了一下午的中间人劫持京东事件后,她感激涕零,决定给我免除房租(上)...
  16. SaaSBase:什么是Teambition?
  17. 关于手机信号强度单位db和dBm
  18. 沙箱支付宝------简单实现支付
  19. 上半年计算机二级试题,2016上半年计算机二级模拟题及答案
  20. 2022年度安徽省职业院校技能大赛中职组“网络搭建与应用”赛项竞赛试题

热门文章

  1. springboot+thymeleaf实现公司文件的签字+盖章系统
  2. 高考倒计时php,高考倒计时100天逆袭计划表
  3. 集成电路测试简介(2)
  4. 7月视灯视频号榜单:更替率59.4%,央视新闻居首;萌宠、美妆市场空白,母婴、旅行前景广阔;视频号直播多项更新强化社交和私域价值
  5. 机器学习 --《机器学习》(周志华)第一、二章
  6. JDK、IDEA等安装详解
  7. Linux中Redis的安装过程
  8. go测试之Convey+monkey+coverage组合
  9. go语言测试框架Convey+Monkey的使用
  10. atom可以编程c语言吗,Atom使用心得