53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

53.逆向破解分析实战20:160crackme之005(04):分析四次校验

初步分析

上次我们分析得到第三次校验的绕过方法是:

Image2 的 ID 就是 0x2DC

Image3 的 ID 就是 0x2E0也就是性相近

  1. 观察性相近图片出现
  2. 出现时鼠标从右下角划入

图片[1]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

同理我们可以得知下面的逻辑也是划入某图片

推测a4 < 23 && a5 > 300也就是x < 23 && y > 300

可以得知这次要求我们从左下角划入

性本善出来的时候,程序断下来

图片[2]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

所以我们得知:

Image2 的 ID 就是 0x2DC也就是 性本善

总结初步校验

如果要绕过校验,需要满足以下条件:

  1. 第三次校验已经绕过,可实现*(a1 + 0x310) == 0x10
  2. 性本善图片 Image2 出现,ID 是 0x2DC
  3. 鼠标从左下角划入

图片[3]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

分析该层额外校验

要求*(a1 + 0x30C) != 9

此时我们回忆一下,第一次校验的时候

该位置已经被赋值为 9,要想满足不等于 9,除非另有别处写入新的数据

图片[4]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

分析偏移 0x30C

这里大家要注意,我们并非只能查找右边的 9,还可以查找偏移值

查找右边的 9 没有意义,因为我们要找的是谁改变了 ebx + 0x30C里面的数据

图片[5]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

由此我们得到一个函数

图片[6]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

图片[7]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

图片[8]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

下断调试分析TForm1_Edit2DblClick

图片[9]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

图片[10]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

当我们在函数头部打下断点,然后双击Edit2 的时候发现断不下来

注:其中 Edit2 是谁我们也可以通过 Darkde4 工具分析得到

图片[11]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

分析原因

  1. 当前 Edit2 编辑框处于一种禁用状态,根本无法捕获双击的消息,所以也就无法触发下面的代码
  2. 要想触发,我们就必须解除 Edit2编辑框禁用状态的代码

图片[12]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

如何找到禁用Edit2编辑框的代码

同理,也是搜索常量,这次我们可以搜索 ID:0x2F0

图片[13]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

通过分析我们发现TForm1_Panel1DblClick是关键

图片[14]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

图片[15]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

分析该处代码

此时我们发现如果要想解除禁用状态,比如满足 *(result + 0x308) == 0x29D

图片[16]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

找寻 0x29D 写入的位置

发现没有,只有比较

说明存在运算导致 0x308 偏移位置的数据变动

图片[17]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

找寻操作 0x308 偏移的位置

我们发现在此处,存在代码对 0x308 偏移的数据进行运算

并且我们发现窗体创建的时候,数据是 0x28E

图片[18]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

要想满足初始化值为 0x28E 增加为 0x29D,且每次增加 3

共计需要增加 :

0x28E + 3 = 0x291

0x291 + 3 = 0x294

0x294 + 3 = 0x297

0x297 + 3 = 0x29A

0x29A + 3 = 0x29D

得知总共需要增加 5 次

同时我们知道add dword ptr [eax+308h], 3代码是在TForm1_Button1MouseDown 函数中的,并且结合我们160crackme之005(02):分析二次校验的分析,所以我们要鼠标右键点击按钮5 次就可以满足按钮解禁

图片[19]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

总结破解四次校验

前提

  1. 观察性相近图片出现
  2. 出现时鼠标从右下角划入

进阶

  1. 鼠标右键点击按钮5 次 (本次分析得知)–>满足 0x29D 的要求
  2. 图片[20]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

     

    双击 Panel1框,解除 Edit2 的禁用状态

  3. 双击 Edit2 编辑框 –> 满足*(a1 + 0x30C) != 9

    图片[21]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

  4.  

    观察性本善图片 Image2 出现

  5. 出现时鼠标从左下角划入
     

剩下的问题

实际上,编辑框双击后,要想*(a1 + 0x30C)被赋值并非易事

在其上面还有四层校验等着我们

且听下回分晓

图片[22]-53.逆向破解分析实战20:160crackme之005(04):分析四次校验-汇编语言社区论坛-技术社区-学技术网

 

请登录后发表评论

    没有回复内容