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:43 编辑
期待楼主完成160个目标{:1_918:} 加油吧 慢慢搞
页:
[1]