本帖最后由 xiaoyu2032 于 2022-7-14 17:08 编辑
160CM-026
1. 爆破
爆破比较简单,搜索关键字符很容易找到关键跳转,将4036EB的代码nop掉就可以了。
2. 算法分析
由于这是个VB编译的程序,因此用VB Decompiler进行反编译,可以找到主事件函数为Command1_Click_402B10。
反汇编后的代码不是很理想,但是也没有其他更好的办法了,IDA根本出不来伪代码。不确定的地方只能在OD中单步跟踪一下,基本上就能将算法修正过来了。
编写注册算法程序如下:
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找到他们的计算过程,对伪代码中的算法进行修正。
|