KaQqi 发表于 2016-11-4 20:24

160cm之008 爆破、追码 by cqr2287

160cm不是这么单一的。前面几个基本都是Delphi,这次来个vb
总算换语言了。vb编写的程序真是贼小的。
作者没改软件自带图标。按惯例,打开软件熟悉注册流程。

这字符串是什么玩意,我能说我看不懂吗。。。
随便输入。

啊哈哈,这软件没有退出!适合玩。

static/image/hrline/2.gif


爆破开始。
载入od,使用f12暂停法。
广告:可参见本人第12和14课。
00401EA3   .FF15 F0304000 call dword ptr ds:[<&MSVBVM50.#rtcMsgBox>;Msvbvm50.rtcMsgBox
00401EA9   .8D95 44FFFFFF lea edx,dword ptr ss:

这是vb函数msgbox。下次下这个断点破解。
向上翻找,回溯。
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:,ecx          ;ntdll.773F68B0
00401E51   . |B8 0A000000   mov eax,0xA
00401E56   . |894D AC       mov dword ptr ss:,ecx          ;ntdll.773F68B0
00401E59   . |BB 08000000   mov ebx,0x8
00401E5E   . |8D95 74FFFFFF lea edx,dword ptr ss:
00401E64   . |8D4D B4       lea ecx,dword ptr ss:
00401E67   . |8945 94       mov dword ptr ss:,eax
00401E6A   . |8945 A4       mov dword ptr ss:,eax
00401E6D   . |C785 7CFFFFFF>mov dword ptr ss:,Andréna.0040>;UNICODE "leider NeiN !"
00401E77   . |899D 74FFFFFF mov dword ptr ss:,ebx
00401E7D   . |FFD7          call edi                                 ;Msvbvm50.__vbaVarDup; <&MSVBVM50.__vbaVarDup>
00401E7F   . |8D55 84       lea edx,dword ptr ss:
00401E82   . |8D4D C4       lea ecx,dword ptr ss:
00401E85   . |C745 8C E01A4>mov dword ptr ss:,Andréna.0040>;UNICODE "Leider Falsch !Schau noch mal genau nach ..."

我们看到了vb典型判断的下面一个部分。据我推测,jmp上面是成功。
回溯看看。
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:,ecx          ;ntdll.773F68B0
00401DB7   . |B8 0A000000   mov eax,0xA
00401DBC   . |894D AC       mov dword ptr ss:,ecx          ;ntdll.773F68B0
00401DBF   . |BB 08000000   mov ebx,0x8
00401DC4   . |8D95 74FFFFFF lea edx,dword ptr ss:
00401DCA   . |8D4D B4       lea ecx,dword ptr ss:
00401DCD   . |8945 94       mov dword ptr ss:,eax
00401DD0   . |8945 A4       mov dword ptr ss:,eax
00401DD3   . |C785 7CFFFFFF>mov dword ptr ss:,Andréna.0040>;UNICODE "SuCCESFul !"
00401DDD   . |899D 74FFFFFF mov dword ptr ss:,ebx
00401DE3   . |FFD7          call edi                                 ;Msvbvm50.__vbaVarDup; <&MSVBVM50.__vbaVarDup>

ok。je是关键跳。Nop即可成功。

哈哈哈哈。

static/image/hrline/2.gif
追码开始。
按照vb程序的惯例,我们在段首下个断点玩玩。
PS:这软件好,成功了还能再次验证。不用重新载入
运行,注册。
断下了f8跟踪。
00401D09   .57            push edi
00401D0A   .8945 FC       mov dword ptr ss:,eax
00401D0D   .897D 08       mov dword ptr ss:,edi
00401D10   .FF53 04       call dword ptr ds:            ;Msvbvm50.BASIC_CLASS_AddRef

路过的第一个call。此时eax被赋值1.
00401D54   .FF92 A0000000 call dword ptr ds:
00401D5A   .3BC6          cmp eax,esi
00401D5C   .7D 12         jge short Andréna.00401D70

这也是可疑的。eax为0.
00401D70   > \8B4D D8       mov ecx,dword ptr ss:
00401D73   .51            push ecx

这两句提取了假码。也就是说,真正判断这里开始。以上call没有用。
00401D74   .68 541A4000   push Andréna.00401A54                  ;UNICODE "SynTaX 2oo1"
00401D79   .FF15 08314000 call dword ptr ds:[<&MSVBVM50.__vbaStrCm>;Msvbvm50.__vbaStrCmp

这就是假码下面的。eax为1.
00401D8B   .FF15 5C314000 call dword ptr ds:[<&MSVBVM50.__vbaFreeS>;Msvbvm50.__vbaFreeStr
00401D91   .8D4D D4       lea ecx,dword ptr ss:

指向假码的指针寄存器。
00401D94   .FF15 60314000 call dword ptr ds:[<&MSVBVM50.__vbaFreeO>;Msvbvm50.__vbaFreeObj
00401D9A   .66:3BFE       cmp di,si

si减去了di,结果为0。
我们从新从提取假码处跟踪。
0012F380   00401A54UNICODE "SynTaX 2oo1"
0012F384   00262C7CUNICODE "cqr2287"
0012F388   00401D7F返回到 Andréna.00401D7F 来自 Msvbvm50.__vbaStrCmp
0012F38C   00401A54UNICODE "SynTaX 2oo1"
0012F390   00262C7CUNICODE "cqr2287"

堆栈出现如下内容。
0F01F8F6 >FF7424 08       push dword ptr ss:            ; Andréna.00401D7F
0F01F8FA    FF7424 08       push dword ptr ss:            ; 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?试试。

好的。

static/image/hrline/2.gif
第一遍跟踪我便跟到了SynTaX 2oo1。但当时没有肯定。
当时是认为这个时候这个字符串是软件的标题
而我没有想到,cm的注册码是个固定字符串。{:301_1007:}
长知识了,cm也有这么验证结果的。
感谢各位的观看


huangn2008 发表于 2016-11-4 20:41

本帖最后由 huangn2008 于 2016-11-4 20:43 编辑

期待楼主完成160个目标{:1_918:}

Very_good 发表于 2016-11-4 21:41

加油吧   慢慢搞
页: [1]
查看完整版本: 160cm之008 爆破、追码 by cqr2287