闲谈:今天闲着没事,翻看以前的教程 发现一个VB小程序 无任何提示框 于是兴趣来了 也许有人录过此教程 对于我等小白来说 正是练手的时候到了 (吾爱汇编论坛1周年2000个最新逆向视频教程(50G)-第4部分按钮事件 -vb无提示框的一般逆向分析思路)这位兄弟没有完成
[目标软件】: Crackme 课件里有 我就不提供了
Microsoft Visual Basic 5.0 / 6.0 [Debug] 无壳
bp __vbaStrCmp 比较字符串是否相等
bp __vbaStrComp 比较字符串是否相等
bp __vbaFreeStr 对付VB程序重启验证
介绍三种方法直达本心
图1:
刚打开这个Crackme 红线标识的地方 等下就知道了
拖进OD
输入:xuepojie 123456789 987654321
图2:
点击无任何提示
搜搜字符串UINCODE
图3:
只看到GOOD BOY 字样,点击进入
图:4:
往上拉找到段首 F2下段
004027C0 > \55 push ebp //段首 F2下段
004027C1 . 8BEC mov ebp,esp
004027C3 . 83EC 0C sub esp,0xC
004027C6 . 68 26114000 push <jmp.&MSVBVM60.__vbaExceptHandler> ; SE 处理程序安装
004027CB . 64:A1 0000000>mov eax,dword ptr fs:[0]
(此为方法一)
===========================邪恶的分割线===================================
重载程序下断点:
bp __vbaStrCmp 比较字符串是否相等
bp __vbaStrComp 比较字符串是否相等
也可以点击E图标 在点击所在位置就会出现这个软件所需要的函数
图5:
断在这里 F9运行起来
图6:
点击YES之后断下来了 F8单步往下走
图7:
00402A3F . FFD7 call edi ; 关键CALL; <&MSVBVM60.__vbaStrCmp>
00402A41 . 85C0 test eax,eax
00402A43 . 0F85 34010000 jnz Crackme.00402B7D ; 关键跳
(此为方法二)
===========================邪恶的分割线===================================
VB万能断点: OD载入后,CTRL+B, ()81 6C 24 1. 然后,就在下面的JMP处F2下断,下完后CTRL+L,如果还有,就继续下断点. 2. 下完断点后,运行程序,点击相应的按纽,OD就会断下来了: 图8:
(此为方法三) ================================================ 方法四的话就需要相应的FZ工具把VB的按钮标题修改一下,我就不阐述了 自己搜索论坛 百度 ===========================邪恶的分割线=================================== 004027C0 > \55 push ebp //还记得这里吗??? (段首) 004027C1 . 8BEC mov ebp,esp 004027C3 . 83EC 0C sub esp,0xC 004027C6 . 68 26114000 push <jmp.&MSVBVM60.__vbaExceptHandler> ; SE 处理程序安装
追码开始: 004027C0 > \55 push ebp 段首下段 重载程序 输入xueoujie 123456789 987654321 F8单步往下走开始分析 图9:
下面分析我就不上图了 节约空间 00402885 . FFD6 call esi ; <&MSVBVM60.__vbaStrMove> 00402887 . 8D4D C4 lea ecx,dword ptr ss:[ebp-0x3C] //读取我们的输入的:987654321 0040288A . FF15 C0104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj ===========================邪恶的分割线=================================== 004028EE . FFD6 call esi 004028F0 . 8D4D C4 lea ecx,dword ptr ss:[ebp-0x3C] //读取我们输入的:xuepojie 004028F3 . FF15 C0104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj ===========================邪恶的分割线=================================== 0040295B . FFD6 call esi 0040295D . 8D4D C4 lea ecx,dword ptr ss:[ebp-0x3C] //读取我们输入的:123456789 00402960 . FF15 C0104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj ===========================邪恶的分割线=================================== 图10:
00402A39 . 52 push edx //push edx edx=987654321 00402A3A . 68 E0214000 push Crackme.004021E0 ; Shooter 在push个 作者设定的 Shooter 00402A3F . FFD7 call edi ; 关键CALL; <&MSVBVM60.__vbaStrCmp> 关于算法的 我没去看 00402A41 . 85C0 test eax,eax //这里进行比较 不相等则跳 相等则不跳 00402A43 . 0F85 34010000 jnz Crackme.00402B7D ; 关键跳 走到这里 堆栈出现了Shooter和我们的987654321进行比较 那我们重新输入Shooter,把987654321替换Shooter 看看会是什么样的情况 图11:
00402A39 . 52 push edx 00402A3A . 68 E0214000 push Crackme.004021E0 ; Shooter 00402A3F . FFD7 call edi ; 关键CALL; <&MSVBVM60.__vbaStrCmp> 00402A41 . 85C0 test eax,eax 00402A43 . 0F85 34010000 jnz Crackme.00402B7D ; 关键跳 //这里不跳了
图12:
堆栈窗口出现SCT-jie8xue和我们输入的xuepojie比较 那我们把xuepojie替换SCT-jie8xue 看看会是什么样的情况 图13:
寄存器窗口和堆栈窗口出现SCT-xue11SCT和我们输入的123456789比较 那我们把123456789替换SCT-xue11SCT 看看会是什么样的情况 图14:
哈哈 成功了 把xuepojie 替换成 SCT-jie8xue 把123456789替换SCT-xue11SCT 把987654321替换 Shooter 注意:其中有一个是错误的话就会程序终止 无法运行 ===========================邪恶的分割线=================================== 爆破方法: 00402A3F . FFD7 call edi ; 关键CALL; <&MSVBVM60.__vbaStrCmp> 00402A41 . 85C0 test eax,eax 00402A43 0F85 34010000 jnz Crackme.00402B7D ; 关键跳 把JNZ该NOP 只改这一处的话程序无法运行 ===========================邪恶的分割线=================================== 00402B34 /74 41 je XCrackme.00402B77 //这里NOP 不改则退出 00402B36 . |A1 10304000 mov eax,dword ptr ds:[0x403010] ; @g_ 00402B3B . |85C0 test eax,eax 00402B3D . |75 10 jnz XCrackme.00402B4F 00402B3F . |68 10304000 push Crackme.00403010 ; @g_ 00402B44 . |68 DC184000 push Crackme.004018DC 00402B49 . |FF15 80104000 call dword ptr ds:[<&MSVBVM60.__vbaNew2>>; MSVBVM60.__vbaNew2 00402B4F > |8B35 10304000 mov esi,dword ptr ds:[0x403010] ; @g_ 00402B55 . |8B06 mov eax,dword ptr ds:[esi] 00402B57 . |68 F4214000 push Crackme.004021F4 ; GOOD BOY 00402B5C . |56 push esi 00402B5D . |FF50 54 call dword ptr ds:[eax+0x54] 00402B60 . |DBE2 fclex 00402B62 . |85C0 test eax,eax 00402B64 . |7D 17 jge XCrackme.00402B7D 00402B66 . |6A 54 push 0x54 00402B68 . |68 BC1D4000 push Crackme.00401DBC 00402B6D . |56 push esi 00402B6E . |50 push eax 00402B6F . |FF15 30104000 call dword ptr ds:[<&MSVBVM60.__vbaHresu>; MSVBVM60.__vbaHresultCheckObj 00402B75 . |EB 06 jmp XCrackme.00402B7D 00402B77 > \FF15 1C104000 call dword ptr ds:[<&MSVBVM60.__vbaEnd>] ; MSVBVM60.__vbaEnd // VB退出函数 完美附图: 希望能对你有所帮助,如果排的有误,请大家见谅,不喜勿喷 祝愿吾爱汇编论坛红红火火, 时间不早了 ,晚安
|