xiaoyu2032 发表于 2022-7-14 17:07

练习笔记之160Crackme-026

本帖最后由 xiaoyu2032 于 2022-7-14 17:08 编辑

# 160CM-026

## 1. 爆破

  爆破比较简单,搜索关键字符很容易找到关键跳转,将4036EB的代码nop掉就可以了。



## 2. 算法分析

  由于这是个VB编译的程序,因此用VB Decompiler进行反编译,可以找到主事件函数为Command1_Click_402B10。



  反汇编后的代码不是很理想,但是也没有其他更好的办法了,IDA根本出不来伪代码。不确定的地方只能在OD中单步跟踪一下,基本上就能将算法修正过来了。

  编写注册算法程序如下:

```vb
Module Module1
    Sub Main()
      Dim name As String
      Dim String1 As String
      Dim String2 As String
      Dim String3 As String
      Dim String4 As String
      Console.WriteLine("请输入用户名:")
      name = Console.ReadLine()         
      Dim temp As Double
      Dim sum As Int32
      Dim i As Int32
      Dim length As Int32
      length = Len(name)
      For i = 1 To (length)
            temp = ((432.4 * Asc(Mid(name, i, 1))) * 17.79) / Hex(21)            'hex(21)=15
      Next
      sum = Int(temp)                                                          '注意是向下取整
      String1 = CStr(sum + Asc(Mid(name, 1, 1)))
      String2 = CStr(Hex(sum - Asc(Mid(name, 1, 1)) * 25))
      String3 = CStr(Hex(sum))
      String4 = CStr(Asc(Mid(name, 1, 1)) * length - 27)
      'MsgBox("注册码为:" + String1 + String2 + String3 + String4 + CStr(length) + "-CM")
      Console.WriteLine("注册码为: " + String1 + String2 + String3 + String4 + CStr(length) + "-CM")
      Console.WriteLine("按回车键退出程序!")
      Console.ReadLine()
    End Sub
End Module
```

  输入计算的结果,验证成功!



## 3. 总结

  算法虽然比较简单,但是由于主事件函数中的代码很长,分析起来还是比较费时间的。由于有反编译的伪代码,因此主要就是跟踪两个算式的计算过程。

第一个算式,其实就是跟踪for循环的计算过程。第二个算式,主要就看下图中的几个字符串连接的变量,结合伪代码和OD找到他们的计算过程,对伪代码中的算法进行修正。

wang9264 发表于 2022-7-14 20:04

牛啊,赞赞赞赞赞赞赞赞赞赞赞赞

lr957 发表于 2022-7-14 21:03

技术贴,值得学习。

dty285767 发表于 2022-7-14 23:25

没事来学习下

xy0225 发表于 2022-7-15 00:06

谢谢分享

后飞的笨鸟 发表于 2022-7-15 10:20

厉害,66666666666

2733369 发表于 2022-7-15 10:29

来学习下

afak 发表于 2022-7-15 12:31

嗯,好厉害。

13714550928 发表于 2022-7-15 14:35


技术贴,值得学习。

p紫气东来 发表于 2022-7-15 20:06

学习下的了
页: [1] 2 3
查看完整版本: 练习笔记之160Crackme-026