CM简介
从文件信息获得到编程语言:MS Visual Basic 5.0-6.0 EXE (1999-07-25)
题目难度:⭐⭐
使用VB Decomplier 反编译
找到OK按钮的事件

人肉反编译
Private Sub OK_Click() '402310
Dim var_24 As TextBox
Dim var_B0 As TextBox
var_C0 = CrackMe.RegSerial 'Ignore this
Set var_2C = CrackMe.RegSerial // 序列号
var_B0 = var_2C
var_C4 = CrackMe.Text1 'Ignore this
Set var_24 = var_2C // 序列号
var_18 = Text1.Text // 姓名
call var_C4(Me, Me, Me, edi, Me, var_24)
var_1C = Text1.Text
Len(var_1C) = Len(var_1C) * 97531 //长度*97531
Len(var_1C) = Len(var_1C) + Asc(var_18) 长度 + 姓名的ASCII码
***************************
此时名称为a
a的ascii码: 97
也就是1*97531+97=97628
***************************
call var_4040E0(Len(var_1C))
var_20 = var_4040E0(Len(var_1C))
Text1.Text = var_20
var_18 = Serial.Text
call var_C0(Me, Me)
var_1C = Serial.Text
var_20 = "AKA-" & var_1C
esi = (var_18 = var_20) + 1
************************************************
真正的序列号为var_20
输入的序列号为var_18
看样子是esi寄存器赋值操作,=应该是全等判断的意思
************************************************
If (var_18 = var_20) + 1 = 0 Then GoTo loc_004025E5
var_34 = "You Get It" & "vbCrLf" & "KeyGen It Now"
GoTo loc_0040263B
'Referenced from: 0040258B
var_34 = "You Get Wrong" & "vbCrLf" & "Try Again"
'Referenced from: 004025E3
GoTo loc_0040269E
Exit Sub
'Referenced from: 00402652
Exit Sub
End Sub

x96dbg
查字符串还是比较简单的。

在提示错误的地方打个断点

发现上面有个jmp 继续往上拉,发现成功的标志

断点打到判断位置

把判断nop掉是可以通过的

当运行到这里的时候,把ZF置零,也是可以的。
je 指令看的是ZF,ZF0不跳,1跳


当然,为了PWN,再往上打打断点,可以看到正确的序列号



评论 0
还没有评论,来说点什么吧。