-
-
[原创][分享]逆向破解一个简单的crackme
-
发表于:
2020-9-6 20:05
6586
-
本人师从于15PB,近期由于疫情原因,实地课程尚未开课,所以闲余时间较充分,有空就写写贴子。感谢15PB带领我进入信息安全领域。
废话不多说,开始干~
一、打开软件,熟悉功能
很奇怪,没有注册按钮,随便输入账号密码也不会有反应
二、查壳
发现没有加壳,并且是使用Delphi编写的,Delphi编写的程序可以使用DeDeDark反编译工具查看详细信息
使用DeDeDrak工具查看:
双击模块名:
发现Panel1窗口有两个点击事件,一个是单击事件,一个是双击事件
过程的CKM中可以看到单击事件、双击事件等事件触发的入口点RVA,先保存下来,到时候进入OD的时候可以参考,但是尝试单击或者双击程序的窗口,发现还是没有反应。目前仍然没有太大的思路,先进去od分析看看先吧。
三、使用OD调试程序
右键搜索一下,看看没有没什么敏感字符串
进来果然发现敏感字符串:
双击进入:此时应该查找关键跳转,看看是什么条件下才会跳转到“恭喜恭喜,注册成功”
先向上翻,翻到
push ebp
mov esp,ebp的地方,也就是函数开始的地方,从函数头开始一步一步分析
函数开始的地方:细心的人可能会发现,这个函数的开始地址457FB8就是上面DeDeDrak工具得到的双击事件入口点
继续向下分析,找关键跳转和关键CMP
发现关键跳转:JNZ跳转直接越过“恭喜恭喜,注册成功”,说明如果JNZ成立,那么就验证失败了
尝试暴力破解,验证是不是关键跳转,在JNZ处下断点,修改标志寄存器Z为1
输入账号88888888,密码99999999,单击或者双击灰色窗口
发现果然破解成功:
也就是说如果0x85和[ESI+0X300C]比较成功了,JNZ才会跳转到成功的界面。
进一步分析算法:在上面提到的函数开始位置下断点,单击灰色窗口,OD里面断下来了
经过分析,得到如下注释的分析结果
看起来下面这段框框像是核心算法,但是我们需要关注的是关键代码CMP,只有这个关键CMP比较成功了,下面才会跳转到成功的页面,但是这一堆算法中并没有涉及到[ESI+0x30C]的算法,而关键比较的内容是[ESI+0x30C]和0x3E,这里就很懵逼,上面的一堆循环算法和我们需要的内容并没有半毛钱关系,猜测可能是作者给下的一个坑。目前的任务还是要关注[ESI+0x30C]是怎么赋值的,这样才知道他是怎么完成核心算法的。
关键CMP和跳转
但是问题来了,怎么定位到[ESI+0X30C]这个位置呢?怎么查看[ESI+0X30C]这块内存是怎么变化的呢?我们知道,[ESI+0X30C]这个位置一定是会变化的,当我们输入了正确的账号密码,他就会被赋值为0x85,此时,验证就会通过。但是目前没有办法定位到[ESI+0X30C]这块内存,那么我们可以尝试定位一下0x85:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-11-29 12:49
被三一米田编辑
,原因: