xiaoyu2032 发表于 2022-7-24 10:29

练习笔记之160Crackme-030

# 160CM-030

## 1. 爆破

  爆破比较简单,搜索关键字符,找到第一个跳转位置`00403370   /0F84 E8000000 je cracking.0040345E`,将这行代码nop掉就可以了。

## 2. 算法分析

  用VB Decompiler反编译,找到关键响应事件代码如下:

```vb
Private Sub Command1_Click() '4030F0
loc_004031BE: var_28 = password.Text1.Text
loc_004031FC: If 1 <= CInt(Len(var_28)) Then                        '小于字符串长度时执行
loc_00403206:   If 1 > 4 Then
loc_0040320D:   End If
loc_00403291:   var_800C = Asc(CStr(Mid(2000, 1, 1)))
loc_004032CD:   var_38 = var_38 & Chr(Asc(CStr(Mid(var_28, 1, 1))) xor ecx)                '字符依次与ecx中的内容异或运算
loc_0040332A:   GoTo loc_004031EF
loc_0040332F: End If
loc_00403370: If (var_38 = "qBQSYdXUe_B\V") Then                                                                        '运算后得到的字符串与"qBQSYdXUe_B\V"要相同
loc_004033CC:   var_8014 = MsgBox("Password correct, hehe, :-)", 0, "Valid", var_78, var_88)
loc_0040343D:   var_8020 = Global.Unload password
loc_0040345E: Else
loc_004034B4:   var_8024 = MsgBox("Password incorrect, please try again ...", 0, "Invalid", var_78, var_88)
loc_004034D8: End If
loc_004034E4: GoTo loc_00403536
loc_00403535: Exit Sub
loc_00403536: ' Referenced from: 004034E4
loc_00403544: GoTo loc_00esi
End Sub
```

  从伪代码来看,基本可以看出是将输入的密码字符串依次进行异或运算,然后得到新的字符串与"qBQSYdXUe_B\V"进行比较。异或运算中有个ecx寄存器中的值从上述伪代码中看不出来源,将“程序分析器和优化”选项取消后,再反汇编,得到如下代码:



  从中可以打开猜测ecx为依次取字符串”2000“中的第i个字符的ASCII码值,i>4时再重复。再OD中跟踪一下,可以确认猜测无误。使用vs2015编写VB注册算法程序如下:

```vb
Module Module1

    Sub Main()
      Dim key As String
      Dim SN As String
      key = "qBQSYdXUe_B\V"
      SN = ""
      Console.WriteLine("key= " + key)
      Dim i As Int32
      Dim j As Int32
      Dim length As Int32
      length = Len(key)
      For i = 1 To length
            j = i Mod 4
            If j = 0 Then j = 4
            SN = SN + Chr(Asc(Mid(key, i, 1)) Xor Asc(Mid("2000", j, 1)))
      Next
      Console.WriteLine("注册码为: " + SN)
      Console.WriteLine("按回车键退出程序!")
      Console.ReadLine()
    End Sub

End Module
```

  运算后得到注册码为`CrackTheWorld`,输入程序输入框,验证正确。



## 3. 总结

  这道题难度也不大,借助反编译后的伪代码,可以很容易的得到算法的大框架,具体细节再借助OD跟踪确认后,就能得到完整的算法过程了。

xiaoyu2032 发表于 2022-7-27 11:50

watiger 发表于 2022-7-26 22:30
有些太省略,看不太懂

你需要从前面的看起,前面的写的详细一些

FirstExecution 发表于 2022-7-24 10:32

EXiaoLu 发表于 2022-7-24 11:25

感谢分享

Altababa 发表于 2022-7-24 11:56

6666666666666666666

xinfw 发表于 2022-7-24 12:22

感谢分享

yu520 发表于 2022-7-24 12:28

厉害,学习,学习

zhihuidemeili 发表于 2022-7-24 15:22

666666666666666666666666666666666

jensenyin 发表于 2022-7-24 15:23

感谢分享

zhangzifu 发表于 2022-7-24 17:13

太棒了,虽然我看不懂...

15028352577 发表于 2022-7-24 18:15

感谢分享
页: [1] 2 3 4 5
查看完整版本: 练习笔记之160Crackme-030