对于这个VB的程序,可以通过 VB 的反汇编的过程得到关键算法的位置
004026FC . 816C24 04 43000000 SUB DWORD PTR SS:[ESP+4],43
00402704 . E9 BB000000 JMP 1.004027C4
关键算法的位置:00402704
-----------------------------------
接着来到这里:
004027C4 > \55 PUSH EBP
004027C5 . 8BEC MOV EBP,ESP
004027C7 . 83EC 14 SUB ESP,14
004027CA . 68 66114000 PUSH <JMP.&MSVBVM60.__vbaExceptHandler> ; SE handler installation
004027CF . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004027D5 . 50 PUSH EAX
-------------------------------
之后是对是否输入对程序框中的内容进行校验,如果没有就完了。。。
00402910 . 3BC6 CMP EAX,ESI
00402912 . 7D 11 JGE SHORT 1.00402925
00402914 . 68 A0000000 PUSH 0A0
00402919 . 68 341B4000 PUSH 1.00401B34
0040291E . 53 PUSH EBX
0040291F . 50 PUSH EAX
00402920 . E8 37E9FFFF CALL <JMP.&MSVBVM60.__vbaHresultCheckObj>
---------------------------------
读入了name:
0040293A . E8 11E9FFFF CALL <JMP.&MSVBVM60.#712>
0040293F . 8BD0 MOV EDX,EAX
00402941 . 8D8D 30FFFFFF LEA ECX,DWORD PTR SS:[EBP-D0]
---------------------------------
之后就是一段漫长的过程。。。
004030A6 . E8 8DE1FFFF CALL <JMP.&MSVBVM60.__vbaFreeObj>
004030AB . 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
004030AE . 50 PUSH EAX
004030AF . 8D45 C4 LEA EAX,DWORD PTR SS:[EBP-3C]
004030B2 . 50 PUSH EAX
004030B3 . 8D85 1CFFFFFF LEA EAX,DWORD PTR SS:[EBP-E4]
004030B9 . 50 PUSH EAX
这是一个关键的点:
004030BA . E8 73E1FFFF CALL <JMP.&MSVBVM60.__vbaVarPow> ; 调用注册错误的
让我们进去看看:
73497704 M> FF7424 04 PUSH DWORD PTR SS:[ESP+4]
73497708 FF7424 0C PUSH DWORD PTR SS:[ESP+C]
7349770C FF7424 14 PUSH DWORD PTR SS:[ESP+14]
73497710 FF15 00EF4973 CALL DWORD PTR DS:[7349EF00] ; OLEAUT32.VarPow
73497716 85C0 TEST EAX,EAX
73497718 EB 0C JMP SHORT MSVBVM60.73497726
必须要将上面的改为跳转,不然就出错了,我已经改好了。。。
7349771A 50 PUSH EAX
7349771B E8 D445FCFF CALL MSVBVM60.7345BCF4
73497720 50 PUSH EAX
73497721 E8 6069FCFF CALL MSVBVM60.7345E086
73497726 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
之后又是一段漫长 的 F8
-----------------------------------
当程序来到这一段时,也就是离成功不远了。。。
004033C2 . /74 3B JE SHORT 1.004033FF
004033C4 . |8D85 50FFFFFF LEA EAX,DWORD PTR SS:[EBP-B0]
004033CA . |50 PUSH EAX
004033CB . |8D85 60FFFFFF LEA EAX,DWORD PTR SS:[EBP-A0]
004033D1 . |50 PUSH EAX
004033D2 . |8D85 1CFFFFFF LEA EAX,DWORD PTR SS:[EBP-E4]
004033D8 . |50 PUSH EAX
004033D9 . |E8 54DEFFFF CALL <JMP.&MSVBVM60.__vbaVarPow>
004033DE . |8BD0 MOV EDX,EAX
004033E0 . |8D8D 60FFFFFF LEA ECX,DWORD PTR SS:[EBP-A0]
004033E6 . |E8 5FDEFFFF CALL <JMP.&MSVBVM60.__vbaVarMove>
004033EB . |8D85 60FFFFFF LEA EAX,DWORD PTR SS:[EBP-A0]
004033F1 . |50 PUSH EAX
004033F2 . |E8 38020000 CALL 1.0040362F ; 调用成功的函数
004033F7 . |3BC6 CMP EAX,ESI
004033F9 . |E9 9B000000 JMP 1.00403499
-------------------
004033F2 . |E8 38020000 CALL 1.0040362F ; 调用成功的函数
就是上边的这个函数,找到他了,我们进去看看。。。
---------------------
00403B6F . 3995 7CFFFFFF CMP DWORD PTR SS:[EBP-84],EDX
00403B75 0F8E 9A000000 JLE 1.00403C15
这里又进行了判断,刚开始,我以为搞定了,没想到作者在这还判断了一下。。。
nop 它就可以了
00403B7B . B9 04000280 MOV ECX,80020004
00403B80 . 898D CCFEFFFF MOV DWORD PTR SS:[EBP-134],ECX ; MSVBVM60.73470002
00403B86 . 6A 0A PUSH 0A
-------------------------
00403BDD . 57 PUSH EDI
00403BDE . 8D85 F4FEFFFF LEA EAX,DWORD PTR SS:[EBP-10C]
00403BE4 . 50 PUSH EAX
00403BE5 . E8 18D6FFFF CALL <JMP.&MSVBVM60.#595>
00403BEA . 8D85 C4FEFFFF LEA EAX,DWORD PTR SS:[EBP-13C]
00403BF0 . 50 PUSH EAX
00403BF1 . 8D85 D4FEFFFF LEA EAX,DWORD PTR SS:[EBP-12C]
00403BE5 . E8 18D6FFFF CALL <JMP.&MSVBVM60.#595>
成功了。。。。
由于上了一个下午的课,现在才把破文发上,可惜还是爆破的。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课