160CM-022
1. 爆破
首先,拖入PE看一下,VB程序,用VB decompiler打开,可以很容易的看到各种事件对应的代码。
如注册按钮点击事件,根据反汇编的VB代码可以大概推算出执行过程为:先调用注册算法对输入字符串进行分析,然后比较是否正确,正确则显示正确提示并再MTR.dat文件中写入一些信息,错误则显示错误提示。
Form_Load事件,先打开MTR.dat文件读取信息,然后与“trv2156j0e”进行比较,相同则认为已经注册。因此这是一个重启验证程序。
因为可以通过VB decompiler定位事件地址,我们可以很容易的定位注册事件中的关键跳转位置在402DE9,将该行代码NOP掉就可以了。
00402DE9 /0F84 5A010000 je CarLitoZ.00402F49
2. 注册分析
注册码校核部分在rgr_403230
函数部分,本想结合IDA来分析一下,无奈这个函数在IDA中无法反编译成伪代码,只好看反汇编的VB代码。
从VB代码中可以看出,校核过程为通过从一个字符串中用Mid函数取不同位置的字符连接成一个字符串,然后与输入的字符串进行比较。
在OD中跟踪一下可以发现,字符串为"bPe CrackMe v1.0 ",但是实际这个字符串的长度比较短,Mid函数中有一些起始位置100多的运行时就会出错。仔细查看一下数据区,可以发现这个字符串后面都是空格,然后又连着一些其他字符串,作为Unicode字符串,结束符为0000
,显然这整个区域都可以视为一个字符串。
将完整的字符串输入的计算程序中,如下图:
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反汇编,分析过程还是比较简单。重启验证也就直接读取文件字符串比较,也比较简单。