56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

56.逆向破解分析实战23:160crackme之005(07):超详细破解指南

初步分析

最终决战TForm1_Timer2Timer函数

图片[1]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

我们发现这个位置应该就是决定我们最终战胜这个程序的终极要义

分析 0x3E7

要求不等于 0x3E7,那么肯定是存在一个写入的代码,把这个值修改为了 0x3E7

查找常量 0x3E7 分析


发现在TForm1_Timer2Timer函数内进行比较

图片[2]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

然后在TForm1_Button1Click 函数内进行了赋值

图片[3]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

总结 0x3E7 校验

结合 DarkDe4 工具和上述代码分析,所谓的 Button1 就是这个注册按钮

一旦点击了注册按钮,就会被赋值为 0x3E7

所以得出结论:注册按钮是个坑,绝对不可以点击

图片[4]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

数组到偏移量的修复(重点)

我们发现反编译后,明明是偏移的形式,结果给我们反编译成了数组的形式,非常的不直观,影响我们观察常量,搜索常量

图片[5]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

图片[6]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

解决方案

解决方案还是有很多的,在这里讲一种比较好用省事不那么繁琐的方法

那么此时,分析的方向就变得清晰了起来,就是去研究 0x3180x314 中的数据是如何校验的

图片[7]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

当然了,插句嘴:如果汇编功底好,其实一眼就能看出就在比较 ebx + 0x318 以及 ebx+0x314 里面的数据,还用得着 F5 反编译?

确实用不到,在这里,仅当作如何解决反汇编异常的问题的范例

图片[8]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

探寻 0x314

发现赋值有这么几处

  • 初始化窗口界面的赋值 0xB
  • 鼠标移动的赋值 0x410x3D0x340xDF

图片[9]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

重点看TForm1_FormMouseMove中的赋值,目前只能看出是不同的条件导致的赋值不同

暂时无法得出其他结论

图片[10]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

探寻 0x318

我们发现几乎每一张图片都有关于 esi+0x318 的运算

图片[11]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

挨个看一下

函数TForm1_Image1MouseDown

图片[12]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

图片[13]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

通过下断分析得出:

  1. 当点击人之初时,断下来,说明 Image1 == 人之初
  2. 鼠标左键,a3 值为 0 。 *(a1 + 0x318) += 2;
  3. 鼠标右键,a3 值为 1 。 *(a1 + 0x318) += 0x11

函数TForm1_Image2MouseDown

图片[14]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

同理可得:

  1. 当点击性本善时,断下来,说明 Image2 == 性本善
  2. 鼠标左键,a3 值为 0 。 *(a1 + 0x318) += 3;
  3. 鼠标右键,a3 值为 1 。 *(a1 + 0x318) += 0x13

函数TForm1_Image3MouseDown

图片[15]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

同理可得:

  1. 当点击性相近时,断下来,说明 Image3 == 性相近
  2. 鼠标左键,a3 值为 0 。 *(a1 + 0x318) += 5;
  3. 鼠标右键,a3 值为 1 。 *(a1 + 0x318) += 0x17

函数TForm1_Image4MouseDown

图片[16]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

同理可得:

  1. 当点击习相远时,断下来,说明 Image4 == 习相远
  2. 鼠标左键,a3 值为 0 。 *(a1 + 0x318) += 7;
  3. 鼠标右键,a3 值为 1 。 *(a1 + 0x318) += 0x1B

总结 0x3140x318 线索

1.开天辟地

在窗口创建之初,偏移 0x318 中的数据为 0

当我们点击图片的时候,值就会进行加法运算

图片[17]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

2.移形换位

当鼠标移动函数TForm1_FormMouseMove中的所有校验绕过之后

会根据不同的条件进行赋值,值的核心源头直指 a1 + 0x30C

图片[18]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

图片[19]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

3.追本溯源

a1+0x30C实则是TForm1_Edit2DblClick中的代码

图片[20]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

4.最终比较

图片[21]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

5.绕过校验

我们用 dbg 在这个地址004471A7下断,查看一下已经赋值完毕的 ebx+0x314 的值

图片[22]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

首先绕过前面的校验,然后鼠标划入,发现被赋值的值为 0x3D == 61

图片[23]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

那么这个时候其实就是凑数了

图片 1:人之初

  1. 鼠标左键,7
  2. 鼠标右键,21

图片 2:性本善

  1. 鼠标左键,3
  2. 鼠标右键,19

图片 3:性相近

  1. 鼠标左键,5
  2. 鼠标右键,23

图片 4:习相远

  1. 鼠标左键,7
  2. 鼠标右键,27

那么我们可以随便找一个,总之结果要等于 61

27 * 2 = 54 + 7 = 61

所以我们可以习相远右键 2 次左键一次

破解成功

图片[24]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

总结破解逻辑

1.鼠标右键点击按钮5 次–>满足 0x29D 的要求

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

3.编辑框输入 ajj,密码框可以输入 1_345,78

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

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

6.观察性本善图片 Image2 出现,出现时鼠标从左下角划入

7.观察习相远右键 2 次左键 1 次

番外工作

关于这里的 0x30C 偏移位置的运算,还有待分析

图片[25]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

以及这里凭什么显示的是 1,而不是别的

具体细节,且听下回分晓

图片[26]-56.逆向破解分析实战23:160crackme之005(07):超详细破解指南-汇编语言社区论坛-技术社区-学技术网

 

请登录后发表评论

    没有回复内容