160cm不是这么单一的。前面几个基本都是Delphi,这次来个vb
总算换语言了。vb编写的程序真是贼小的。
作者没改软件自带图标。按惯例,打开软件熟悉注册流程。
这字符串是什么玩意,我能说我看不懂吗。。。
随便输入。
啊哈哈,这软件没有退出!适合玩。
爆破开始。
载入od,使用f12暂停法。
广告:可参见本人第12和14课。
[Asm] 纯文本查看 复制代码 00401EA3 . FF15 F0304000 call dword ptr ds:[<&MSVBVM50.#rtcMsgBox>; Msvbvm50.rtcMsgBox
00401EA9 . 8D95 44FFFFFF lea edx,dword ptr ss:[ebp-0xBC]
这是vb函数msgbox。下次下这个断点破解。
向上翻找,回溯。
[Asm] 纯文本查看 复制代码 00401E3E . /E9 95000000 jmp Andréna.00401ED8
00401E43 > |8B3D 48314000 mov edi,dword ptr ds:[<&MSVBVM50.__vbaVa>; Msvbvm50.__vbaVarDup
00401E49 . |B9 04000280 mov ecx,0x80020004
00401E4E . |894D 9C mov dword ptr ss:[ebp-0x64],ecx ; ntdll.773F68B0
00401E51 . |B8 0A000000 mov eax,0xA
00401E56 . |894D AC mov dword ptr ss:[ebp-0x54],ecx ; ntdll.773F68B0
00401E59 . |BB 08000000 mov ebx,0x8
00401E5E . |8D95 74FFFFFF lea edx,dword ptr ss:[ebp-0x8C]
00401E64 . |8D4D B4 lea ecx,dword ptr ss:[ebp-0x4C]
00401E67 . |8945 94 mov dword ptr ss:[ebp-0x6C],eax
00401E6A . |8945 A4 mov dword ptr ss:[ebp-0x5C],eax
00401E6D . |C785 7CFFFFFF>mov dword ptr ss:[ebp-0x84],Andréna.0040>; UNICODE "leider NeiN !"
00401E77 . |899D 74FFFFFF mov dword ptr ss:[ebp-0x8C],ebx
00401E7D . |FFD7 call edi ; Msvbvm50.__vbaVarDup; <&MSVBVM50.__vbaVarDup>
00401E7F . |8D55 84 lea edx,dword ptr ss:[ebp-0x7C]
00401E82 . |8D4D C4 lea ecx,dword ptr ss:[ebp-0x3C]
00401E85 . |C745 8C E01A4>mov dword ptr ss:[ebp-0x74],Andréna.0040>; UNICODE "Leider Falsch ! Schau noch mal genau nach ..."
我们看到了vb典型判断的下面一个部分。据我推测,jmp上面是成功。
回溯看看。
[Asm] 纯文本查看 复制代码 00401D9D . /0F84 A0000000 je Andréna.00401E43
00401DA3 . |FF15 2C314000 call dword ptr ds:[<&MSVBVM50.#rtcBeep_5>; Msvbvm50.rtcBeep
00401DA9 . |8B3D 48314000 mov edi,dword ptr ds:[<&MSVBVM50.__vbaVa>; Msvbvm50.__vbaVarDup
00401DAF . |B9 04000280 mov ecx,0x80020004
00401DB4 . |894D 9C mov dword ptr ss:[ebp-0x64],ecx ; ntdll.773F68B0
00401DB7 . |B8 0A000000 mov eax,0xA
00401DBC . |894D AC mov dword ptr ss:[ebp-0x54],ecx ; ntdll.773F68B0
00401DBF . |BB 08000000 mov ebx,0x8
00401DC4 . |8D95 74FFFFFF lea edx,dword ptr ss:[ebp-0x8C]
00401DCA . |8D4D B4 lea ecx,dword ptr ss:[ebp-0x4C]
00401DCD . |8945 94 mov dword ptr ss:[ebp-0x6C],eax
00401DD0 . |8945 A4 mov dword ptr ss:[ebp-0x5C],eax
00401DD3 . |C785 7CFFFFFF>mov dword ptr ss:[ebp-0x84],Andréna.0040>; UNICODE "SuCCESFul !"
00401DDD . |899D 74FFFFFF mov dword ptr ss:[ebp-0x8C],ebx
00401DE3 . |FFD7 call edi ; Msvbvm50.__vbaVarDup; <&MSVBVM50.__vbaVarDup>
ok。je是关键跳。Nop即可成功。
哈哈哈哈。
追码开始。
按照vb程序的惯例,我们在段首下个断点玩玩。
PS:这软件好,成功了还能再次验证。不用重新载入
运行,注册。
断下了f8跟踪。
[Asm] 纯文本查看 复制代码 00401D09 . 57 push edi
00401D0A . 8945 FC mov dword ptr ss:[ebp-0x4],eax
00401D0D . 897D 08 mov dword ptr ss:[ebp+0x8],edi
00401D10 . FF53 04 call dword ptr ds:[ebx+0x4] ; Msvbvm50.BASIC_CLASS_AddRef
路过的第一个call。此时eax被赋值1.
[Asm] 纯文本查看 复制代码 00401D54 . FF92 A0000000 call dword ptr ds:[edx+0xA0]
00401D5A . 3BC6 cmp eax,esi
00401D5C . 7D 12 jge short Andréna.00401D70
这也是可疑的。eax为0.
[Asm] 纯文本查看 复制代码 00401D70 > \8B4D D8 mov ecx,dword ptr ss:[ebp-0x28]
00401D73 . 51 push ecx
这两句提取了假码。也就是说,真正判断这里开始。以上call没有用。
[Asm] 纯文本查看 复制代码 00401D74 . 68 541A4000 push Andréna.00401A54 ; UNICODE "SynTaX 2oo1"
00401D79 . FF15 08314000 call dword ptr ds:[<&MSVBVM50.__vbaStrCm>; Msvbvm50.__vbaStrCmp
这就是假码下面的。eax为1.
[Asm] 纯文本查看 复制代码 00401D8B . FF15 5C314000 call dword ptr ds:[<&MSVBVM50.__vbaFreeS>; Msvbvm50.__vbaFreeStr
00401D91 . 8D4D D4 lea ecx,dword ptr ss:[ebp-0x2C]
指向假码的指针寄存器。
[Asm] 纯文本查看 复制代码 00401D94 . FF15 60314000 call dword ptr ds:[<&MSVBVM50.__vbaFreeO>; Msvbvm50.__vbaFreeObj
00401D9A . 66:3BFE cmp di,si
si减去了di,结果为0。
我们从新从提取假码处跟踪。
[Asm] 纯文本查看 复制代码 0012F380 00401A54 UNICODE "SynTaX 2oo1"
0012F384 00262C7C UNICODE "cqr2287"
0012F388 00401D7F 返回到 Andréna.00401D7F 来自 Msvbvm50.__vbaStrCmp
0012F38C 00401A54 UNICODE "SynTaX 2oo1"
0012F390 00262C7C UNICODE "cqr2287"
堆栈出现如下内容。
[Asm] 纯文本查看 复制代码 0F01F8F6 > FF7424 08 push dword ptr ss:[esp+0x8] ; Andréna.00401D7F
0F01F8FA FF7424 08 push dword ptr ss:[esp+0x8] ; Andréna.00401D7F
0F01F8FE 6A 00 push 0x0
0F01F900 E8 5E3CFEFF call Msvbvm50.__vbaStrComp
0F01F905 0FBFC0 movsx eax,ax
0F01F908 C2 0800 retn 0x8
关键call。
那么注册码是否为为SynTaX 2oo1?试试。
好的。
第一遍跟踪我便跟到了SynTaX 2oo1。但当时没有肯定。
当时是认为这个时候这个字符串是软件的标题
而我没有想到,cm的注册码是个固定字符串。
长知识了,cm也有这么验证结果的。
感谢各位的观看
|