初步分析
上次我们分析得到第三次校验的绕过方法是:
Image2
的 ID 就是 0x2DC
Image3
的 ID 就是 0x2E0
也就是性相近
- 观察
性相近
图片出现 - 出现时
鼠标从右下角划入
同理我们可以得知下面的逻辑也是划入某图片
推测a4 < 23
&& a5 > 300
也就是x < 23
&& y > 300
可以得知这次要求我们从左下角
划入
当性本善
出来的时候,程序断下来
所以我们得知:
Image2
的 ID 就是 0x2DC
也就是 性本善
总结初步校验
如果要绕过校验,需要满足以下条件:
- 第三次校验已经绕过,可实现
*(a1 + 0x310) == 0x10
性本善
图片Image2
出现,ID 是0x2DC
鼠标从左下角划入
分析该层额外校验
要求*(a1 + 0x30C) != 9
此时我们回忆一下,第一次校验的时候
该位置已经被赋值为 9
,要想满足不等于 9,除非另有别处写入新的数据
分析偏移 0x30C
这里大家要注意,我们并非只能查找右边的 9,还可以查找偏移值
查找右边的 9 没有意义,因为我们要找的是谁改变了 ebx + 0x30C
里面的数据
由此我们得到一个函数
下断调试分析TForm1_Edit2DblClick
当我们在函数头部打下断点,然后双击Edit2
的时候发现断不下来
注:其中 Edit2
是谁我们也可以通过 Darkde4
工具分析得到
分析原因
- 当前
Edit2
编辑框处于一种禁用状态,根本无法捕获双击的消息
,所以也就无法触发下面的代码 - 要想触发,我们就必须解除
Edit2
编辑框禁用状态
的代码
如何找到禁用Edit2
编辑框的代码
同理,也是搜索常量,这次我们可以搜索 ID:0x2F0
通过分析我们发现TForm1_Panel1DblClick
是关键
分析该处代码
此时我们发现如果要想解除禁用状态,比如满足 *(result + 0x308) == 0x29D
找寻 0x29D 写入的位置
发现没有,只有比较
说明存在运算导致 0x308
偏移位置的数据变动
找寻操作 0x308
偏移的位置
我们发现在此处,存在代码对 0x308
偏移的数据进行运算
并且我们发现窗体创建的时候,数据是 0x28E
要想满足初始化值为 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 次
就可以满足按钮解禁
总结破解四次校验
前提
- 观察
性相近
图片出现 - 出现时
鼠标从右下角划入
进阶
鼠标右键点击按钮
5 次
(本次分析得知)–>满足 0x29D 的要求-
双击
Panel1框
,解除Edit2
的禁用状态 - 双击
Edit2
编辑框 –> 满足*(a1 + 0x30C) != 9
-
观察
性本善
图片Image2
出现 - 出现时
鼠标从左下角划入
剩下的问题
实际上,编辑框双击后,要想*(a1 + 0x30C)
被赋值并非易事
在其上面还有四层校验等着我们
且听下回分晓
没有回复内容