学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

116

积分

0

好友

25

主题
发表于 2020-9-8 19:51:59 | 查看: 5913| 回复: 0
  一、打开软件,熟悉功能

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  很奇怪,没有注册按钮,随便输入账号密码也不会有反应
  二、查壳

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  发现没有加壳,并且是使用Delphi编写的,Delphi编写的程序可以使用DeDeDark反编译工具查看详细信息
  使用DeDeDrak工具查看:

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  双击模块名:

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  发现Panel1窗口有两个点击事件,一个是单击事件,一个是双击事件
  过程的CKM中可以看到单击事件、双击事件等事件触发的入口点RVA,先保存下来,到时候进入OD的时候可以参考,但是尝试单击或者双击程序的窗口,发现还是没有反应。目前仍然没有太大的思路,先进去od分析看看先吧。

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  三、使用OD调试程序

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  右键搜索一下,看看没有没什么敏感字符串
  进来果然发现敏感字符串:

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  双击进入:此时应该查找关键跳转,看看是什么条件下才会跳转到“恭喜恭喜,注册成功”

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  先向上翻,翻到
  push ebp
  mov esp,ebp的地方,也就是函数开始的地方,从函数头开始一步一步分析
  函数开始的地方:细心的人可能会发现,这个函数的开始地址457FB8就是上面DeDeDrak工具得到的双击事件入口点

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  继续向下分析,找关键跳转和关键CMP
  发现关键跳转:JNZ跳转直接越过“恭喜恭喜,注册成功”,说明如果JNZ成立,那么就验证失败了

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  尝试暴力破解,验证是不是关键跳转,在JNZ处下断点,修改标志寄存器Z为1
  输入账号88888888,密码99999999,单击或者双击灰色窗口

逆向破解一个简单的crackme

逆向破解一个简单的crackme

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  发现果然破解成功:

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  也就是说如果0x85和[ESI+0X300C]比较成功了,JNZ才会跳转到成功的界面
  进一步分析算法:在上面提到的函数开始位置下断点,单击灰色窗口,OD里面断下来了

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  经过分析,得到如下注释的分析结果

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  看起来下面这段框框像是核心算法,但是我们需要关注的是关键代码CMP,只有这个关键CMP比较成功了,下面才会跳转到成功的页面,但是这一堆算法中并没有涉及到[ESI+0x30C]的算法,而关键比较的内容是[ESI+0x30C]和0x3E,这里就很懵逼,上面的一堆循环算法和我们需要的内容并没有半毛钱关系,猜测可能是作者给下的一个坑。目前的任务还是要关注[ESI+0x30C]是怎么赋值的,这样才知道他是怎么完成核心算法的。

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  关键CMP和跳转

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  但是问题来了,怎么定位到[ESI+0X30C]这个位置呢?怎么查看[ESI+0X30C]这块内存是怎么变化的呢?我们知道,[ESI+0X30C]这个位置一定是会变化的,当我们输入了正确的账号密码,他就会被赋值为0x85,此时,验证就会通过。但是目前没有办法定位到[ESI+0X30C]这块内存,那么我们可以尝试定位一下0x85:

逆向破解一个简单的crackme

逆向破解一个简单的crackme

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  找到一个将0x85赋值给一块内存的指令,双击跟进去查看

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  发现下图:

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  也就是说要想成功给[ESI+0X30C]赋值0x85的话,那么CMP DWORD PTR DS:[ESI+0x30C],0x3E这条指令必须要比对成功,同理,右键查找所有常量0x3E

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  发现:

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  双击跟进去查看:

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  0x3E要想成功赋值到[EBX+0X30C]的话,JNZ必须不能跳转。
  向上翻,找到
  push ebp
  mov ebp,esp
  也就是函数的起始位置,下断点(其他断点清理掉,只留下这一个断点),尝试分析这段函数
  下完断点之后,发现不管是单击还是双击都没有反应,很奇怪,按理说不应该,理一下上面分析的逻辑:
  ①比对[ESI+0X30C]和0x85,只有比对成功了才会跳转到成功的界面
  ②查找[ESI+0X30C]是怎么被赋值成功0x85的
  ③只有[ESI+300C]和0x3E比对成功后才会将0x85赋值给[ESI+0X30C]
  ④0x3E赋值给[ESI+300C]的前一条指令JNZ必须不能跳转
  按理说应该没问题的,如果单击或者双击不会触发的话,那程序又怎么验证呢我们输入的账号密码呢?但是为什么不会断下来呢?
  尝试重新启动程序,点击重新运行

逆向破解一个简单的crackme

逆向破解一个简单的crackme

  一样,输入账号88888888注册码99999999

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  此时发现,当注册码输入的时候,OD就断下来了,由此判断这个程序的功能是只要输入了注册码,马上就触发响应事件,细心的人也会发现,这个函数的入口点457C40就是DeDeDark工具获取的chkcode入口点。
  由此解决了断点的问题,继续向下分析

逆向破解一个简单的crackme

逆向破解一个简单的crackme

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  由此判断,整个程序的正确注册码是:黑头Sun Bird+字符串(账号长度+5)+dseloffc-012-OK+字符串(账号)
  我们输入的账号是:88888888,注册码为:黑头Sun Bird13dseloffc-012-OK88888888
  验证一下:黑头Sun Bird13dseloffc-012-OK88888888

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  验证一下账号为1111能否成功:
  账号:1111
  注册码:黑头Sun Bird9dseloffc-012-OK1111

逆向破解一个简单的crackme

逆向破解一个简单的crackme
  验证成功,说明分析是正确的。
  注册机的写法就不写上来了,无非就是获取输入的账号,再获取账号长度,账号长度+5,再拼接起来
  这个程序有个坑:如果在单击事件处下了断点,那么双击灰色窗口也不会进入双击响应事件,会被单击响应事件截取了,所以设置断点的时候,需要将多余的断点清理掉,需要在哪里断就设置在哪里的断点。
  总结:
  ①分析是否有加壳,是什么语言编写的
  ②若是Delphi语言编写的,可以使用DeDeDrak分析,有助于我们OD分析
  ③当无从下手的时候,可以从尝试搜索字符串、搜索CreateWindow、MessageBox、GetDlgItemTwxt、GetWindowText等常用函数方法,DeDeDark中的事件入口点等下断点寻找突破口,本篇内容是从搜索字符串突破。
  ④进入函数后,寻找关键点,比如关键跳转、关键对比等,想方设法的定位到核心函数或核心指令
  ⑤有些时候可能会遇上混淆的代码,看不懂的可以先跳过,重心侧重于核心代码
游客,如果您要查看本帖隐藏内容请回复


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-4-24 17:54 , Processed in 0.096888 second(s), 43 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表