xiaoyu2032 发表于 2022-6-25 20:29

练习笔记之160Crackme-022

# 160CM-022

## 1. 爆破

  首先,拖入PE看一下,VB程序,用VB decompiler打开,可以很容易的看到各种事件对应的代码。

  如注册按钮点击事件,根据反汇编的VB代码可以大概推算出执行过程为:先调用注册算法对输入字符串进行分析,然后比较是否正确,正确则显示正确提示并再MTR.dat文件中写入一些信息,错误则显示错误提示。



  Form_Load事件,先打开MTR.dat文件读取信息,然后与“trv2156j0e”进行比较,相同则认为已经注册。因此这是一个重启验证程序。



  因为可以通过VB decompiler定位事件地址,我们可以很容易的定位注册事件中的关键跳转位置在402DE9,将该行代码NOP掉就可以了。

```asm
00402DE9   /0F84 5A010000 je CarLitoZ.00402F49
```

## 2. 注册分析

  注册码校核部分在`rgr_403230`函数部分,本想结合IDA来分析一下,无奈这个函数在IDA中无法反编译成伪代码,只好看反汇编的VB代码。

  从VB代码中可以看出,校核过程为通过从一个字符串中用Mid函数取不同位置的字符连接成一个字符串,然后与输入的字符串进行比较。



  在OD中跟踪一下可以发现,字符串为"bPe CrackMe   v1.0                              ",但是实际这个字符串的长度比较短,Mid函数中有一些起始位置100多的运行时就会出错。仔细查看一下数据区,可以发现这个字符串后面都是空格,然后又连着一些其他字符串,作为Unicode字符串,结束符为`0000`,显然这整个区域都可以视为一个字符串。



  将完整的字符串输入的计算程序中,如下图:

``` vb
Module Module1

    Sub Main()
      Dim String1 As String
      Dim code As String
      String1 = "bPe CrackMe   v1.0                                                                                                                           This CrackMe it's to trainer your VB cracking ability"
      code = Mid(String1, 6, 1) + Mid(String1, 9, 1) + Mid(String1, 143, 1) + Mid(String1, 16, 1) + Mid(String1, 161, 1) + Mid(String1, 171, 1) + Mid(String1, 166, 1) + Mid(String1, 168, 1)
      MsgBox("注册码为:" + code)
    End Sub

End Module
"bPe CrackMe   v1.0                              "
```

  运行结果为:rkh1oyie

  将`rkh1oyie`输入到注册框中,注册,成功!





## 3. 总结

  这个程序的注册码是运行时再计算出来进行比较,虽然比直接固定字符串明码要麻烦一点,但是有VB反汇编,分析过程还是比较简单。重启验证也就直接读取文件字符串比较,也比较简单。

士喂知己者屎 发表于 2022-6-26 10:14

感谢分享

zwtstc 发表于 2022-6-26 10:18

学到了,感谢

iyysbbs 发表于 2022-6-27 17:24

感谢分享,记录收藏,以后学习

CWGUO 发表于 2022-7-10 08:34

感谢分享!
页: [1]
查看完整版本: 练习笔记之160Crackme-022