文章目录

  • 查壳
  • 导入符号
  • 分析程序
  • 分析Cancella按钮点击事件
    • 分析关键函数
    • 写出注册机
    • 验证结果
  • 分析ok按钮点击事件
    • 分析关键函数
    • 写出注册机
    • 校验结果

查壳

同样也是用Delphi写的,没有壳。

导入符号

将程序载入到IDA,添加所有的Delphi的签名,然后导出为map文件,在OD中加载map文件,强大的签名库可以减少后面的分析时间。

分析程序

接下来分析一下这个程序,OK那个按钮被禁用了,这是什么套路?

旁边还有个help,不过都是英文的,上翻译。



好,大概了解了。我们的目的就是要让那两个按钮变成隐藏的。

再拖到Darkde4里面查看一下按钮事件和窗口

从控件窗口可以看到在下面这个控件里有一个OK按钮 有一个Cancella按钮,还有一个图片。我们的目的应该就是让那个图片显示出来。

事件按钮有如下几个响应事件,每个响应事件都有对应的RVA:

  • 代码变换事件
  • OK按钮点击事件
  • 用户名变换事件
  • Cancella按钮点击事件
  • About按钮的点击事件

那么既然要让这两个按钮变的不可见,就从Cancella这个按钮的点击事件开始分析

分析Cancella按钮点击事件

找到Cancella按钮点击事件对应的RVA0x442EA8,随便输入一个账号密码,下断分析。

首先会获取输入的密码,然后将密码转为十进制数。接着获取用户名,然后是一个关键函数,这个函数如果返回值为1,那么就不跳转,按钮就会消失。接下来分析下这个关键函数。

分析关键函数

这里直接贴出IDA的分析结果,如果想要详细的过程可以去看我的udd文件。首先对用户名的做取模运算之后求阶乘,然后将每个用户名的ASCII乘以阶乘相加,最后把结果减去输入的密码,如果等于31337就返回1,否则返回零。也就是说,我们只要复制上面的过程,然后将结果减去31337,就能得到正确的密钥。

写出注册机

//计算第二个按钮Cancella所需要的密码
int CalcKey1()
{int key = 0;int nTemp = 0;int num = 0;      char username[20] = { 0 };printf("请输入用户名,长度必须在六位以上:");scanf_s("%s", username, 20);//检查长度if (strlen(username)<=5){printf("用户名长度不满足 请重新输入");return 0;}//求阶乘num = ((int)username[4]) % 7 + 2;nTemp = num;for (int i=1;i< nTemp;i++){num *= i;}nTemp = num;int result = 0;//求用户名的ASCII和乘以阶乘for (int i=0;i<strlen(username);i++){result += nTemp * username[i];}//取出正确的密码key = result - 0x7A69;printf("%d\n", key);}

验证结果

输入计算的结果,点击 我们可以看到右边的按钮消失了,并且左边的OK按钮也解除了禁用状态。

分析ok按钮点击事件

接下来来到的位置,来分析OK按钮的点击事件。

还是同样的套路,有一个关键的算法函数,这个函数返回1,按钮就消失,否则不成功。

分析关键函数

整个关键函数校验如下,首先取出密码的最后一位,然后做平方运算,接着乘以当前的密码长度,也就是index,然后对0x19取模,最后加上0x41然后保存结果,每个结果对应一位用户名。

写出注册机

接下来还原算法写出注册机

//计算第一个按钮OK所需要的密码
int CalcKey2()
{char key[20] = { 0 };char username[20] = { 0 };printf("请输入注册码,长度必须在六位以上:");//输入密码scanf_s("%s", key, 20);//检查长度if (strlen(key) <= 5){printf("密码长度不满足 请重新输入");return 0;}for (int i= strlen(key)-1;i!=-1;i--){username[i] = (key[i] * key[i] * (i + 1)) % 0x19 + 0x41;}printf("%s", username);
}

校验结果

输入序列号,然后自动生成用户名,可以看到OK按钮也跟着消失了。

需要相关文件的可以到我的Github下载:https://github.com/TonyChen56/160-Crackme

160个Crackme006相关推荐

  1. [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  2. [系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

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

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

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

    原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰,算法也不难,非常 ...

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

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

  6. 硬盘温度70度正常吗_70多岁老年人原来血压160,现在130正常吗?医生为你分析实情...

    70多岁的老年人,原来有高血压,高压160左右,现在是130左右,正常吗?这个问题问的太过笼统,我们只好通过这个问题,来分享一些老年高血压患者血压控制的一些知识点,希望能够对老年人的高血压控制,能够有 ...

  7. 微软语音扩展全球语言支持,发布160个新声音

    导语:全世界有数千种语言,最具语言天赋的人也只能说数十种,普通人能够学会两三种语言已属不易.然而,在科技日新月异的今天,具备自然语言对话能力的AI已经能够掌握上百种语言,扩展人类自身能力,为不同场景的 ...

  8. 5分钟带你读「大清」微积分!160多年前清朝数学家撰写文言文版高等数学

     视学算法报道   编辑:小咸鱼 好困 [新智元导读]你有见过160多年前清朝数学家写的微积分书吗?这可能是最难懂的高数教材了,堪称天书!近日,网上流传着一本清朝的微积分课本,其中的所有数学表达式都是 ...

  9. 机器学习160个常见问题.pdf

    来自公众号:机器学习算法与Python实战 原文链接:https://hackernoon.com/160-data-science-interview-questions-415s3y2a (Ale ...

最新文章

  1. 记java关键词_Java关键词及含义
  2. mysql设计规范和原则
  3. docker 安装zookeeper集群
  4. 基于ssm的学生成绩管理系统
  5. JavaScript和ABAP的MD5计算源代码
  6. java简单的事务单元_junit 单元测试事务自动回滚(亲测有效)
  7. DB 数据同步到数据仓库的架构与实践
  8. Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告
  9. java JDBC入门及案例演示
  10. 使用react-native做一个简单的应用-01项目介绍
  11. 生活随笔:你会狗眼看人低吗?
  12. 软件工程与计算II-5-需求基础
  13. 2021年塔城某施工项目招标公告
  14. 『原创经典』标准日本语初级笔记完整版(1)
  15. MOSFET知识小结
  16. 外卖产品(饿了么、美团外卖、百度外卖)竞品分析
  17. ireport导出pdf记录
  18. SAP那些事-理论篇-15-SAP顾问的三重境界
  19. 异形布局 canvas画龙
  20. mkdir: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initia

热门文章

  1. 成功解决没有tf.nn.rnn_cell属性
  2. 成功解决tensorflow\contrib\learn\python\learn\datasets\base._internal_retry.locals.wrap.locals.wrapp
  3. Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))
  4. TF之LSTM:利用LSTM算法对mnist手写数字图片数据集(TF函数自带)训练、评估(偶尔100%准确度,交叉熵验证)
  5. 决策树-缺失值和连续值处理及属性划分
  6. Git 提交 .gitignore文件
  7. 【提权思路】绕过SecureRDP限制远程连接
  8. Python3-笔记-E-001-库-随机数random
  9. 超市账单管理------之获取总记录数
  10. python3.4.3将汉字转换为大写拼音首字母