本帖最后由 Chief 于 2013-1-5 22:58 编辑
【文章标题】: 吾爱破解2012CM大赛破文-淡然出尘
【文章作者】: Chief
【作者邮箱】: hi_Chief@163.com
【下载地址】: http://down.52pojie.cn/2012CM/%E ... %E5%87%BA%E5%B0%98/
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【难 度】: 中
--------------------------------------------------------------------------------
【详细过程】
VB程序代码稍微比较多,慢慢玩
双击程序,运行看看,啊?无反应。
现在载入OD---F9运行,额,原来一运行就退出。
怎么办呢?
重载,别运行,搜索UINCODE
来到 0040143C push CrackMe.00408154 (Initial CPU selection)
004086F7 push CrackMe.004086D4 蚴@蛄@
004087B3 push CrackMe.00408790 蝤@蝴@
004087FB push CrackMe.004087D8 蝤@蝈@
00408843 push CrackMe.00408820 蝤@蛴@
00409AA8 push CrackMe.004088E8 \
00409AD5 push CrackMe.004088F0 .exe
00409B2E mov dword ptr ss:[ebp-0x7C],CrackMe.0040 YYYYMMDDHHMMSS
00409B9B push CrackMe.00408924 20120409080810
00409E6A mov dword ptr ss:[ebp-0xE4],CrackMe.0040 0
00409E7E mov dword ptr ss:[ebp-0xF4],CrackMe.0040 9
0040A71C push CrackMe.00408990 未注册
0040A74B mov edx,CrackMe.0040899C OllyDbg.exe
0040A766 mov edx,CrackMe.004089B8 exescope.exe
0040A781 mov edx,CrackMe.004089D8 冰封溪谷.exe
0040A79C mov edx,CrackMe.004089F0 SMARTCHECK.exe
0040A7B7 mov edx,CrackMe.00408A14 吾爱破解.exe
0040A9FF push CrackMe.00408A2C CrackMe By自浩
0040AB20 push CrackMe.00408A5C http://www.52pojie.cn/?fromuid=185372
0040AB2C push CrackMe.00408A4C open
0040AC50 push CrackMe.00408AAC http://www.52pojie.cn/thread-141805-1-1.html
0040AC5C push CrackMe.00408A4C open
0040AE79 push CrackMe.00408B0C 请输入数字和字母的混合字符串!
0040B2EB push CrackMe.004088E8 \
0040B30E push CrackMe.004088F0 .exe
双击 0040A71C push CrackMe.00408990 未注册
往上
来到断首 0040A6A0 > \55 push ebp
0040A6A1 . 8BEC mov ebp,esp
0040A6A3 . 83EC 0C sub esp,0xC
0040A6A6 . 68 86124000 push <jmp.&MSVBVM60.__vbaExceptHandler> ; SE 处理程序安装
0040A6AB . 64:A1 0000000>mov eax,dword ptr fs:[0]
0040A6B1 . 50 push eax
0040A6B2 . 64:8925 00000>mov dword ptr fs:[0],esp
0040A6B9 . 83EC 50 sub esp,0x50
0040A6A0 > \55 push ebp------------------retn掉。
运行,OK窗口出现。如下图
这里要运用VB断点脚本 插件--ODbgscript ---选取 Delphi & VB事件断点查找脚本.osc
运行-来到 004096A6 . /E9 F50F0000 jmp CrackMe.0040A6A0 ; 断在这里
004096AB . |816C24 04 4B0>sub dword ptr ss:[esp+0x4],0x4B
004096B3 . |E9 D8130000 jmp CrackMe.0040AA90
004096B8 . |816C24 04 530>sub dword ptr ss:[esp+0x4],0x53
004096C0 . |E9 FB140000 jmp CrackMe.0040ABC0
004096C5 . |816C24 04 5F0>sub dword ptr ss:[esp+0x4],0x5F
004096CD . |E9 1E160000 jmp CrackMe.0040ACF0
004096D2 . |816C24 04 5F0>sub dword ptr ss:[esp+0x4],0x5F
004096DA . |E9 11170000 jmp CrackMe.0040ADF0
004096DF . |816C24 04 630>sub dword ptr ss:[esp+0x4],0x63
004096E7 . |E9 44180000 jmp CrackMe.0040AF30
004096EC . |816C24 04 4F0>sub dword ptr ss:[esp+0x4],0x4F
004096F4 . |E9 37190000 jmp CrackMe.0040B030
004096F9 . |816C24 04 FFF>sub dword ptr ss:[esp+0x4],0xFFFF
00409701 . |E9 9A190000 jmp CrackMe.0040B0A0
00409706 . |816C24 04 5F0>sub dword ptr ss:[esp+0x4],0x5F
0040970E . |E9 ED190000 jmp CrackMe.0040B100
00409713 . |816C24 04 FFF>sub dword ptr ss:[esp+0x4],0xFFFF
0040971B . |E9 C01A0000 jmp CrackMe.0040B1E0
00409720 . |816C24 04 FFF>sub dword ptr ss:[esp+0x4],0xFFFF
00409728 . |E9 831C0000 jmp CrackMe.0040B3B0
我们要的是按钮事件,现在断点一个一个取消,直到找到按钮事件。 00409699 . /E9 B2050000 jmp CrackMe.00409C50 ; 按钮事件
0040969E . |816C24 04 3F0>sub dword ptr ss:[esp+0x4],0x3F
004096A6 . |E9 F50F0000 jmp CrackMe.0040A6A0 ; 断在这里
004096AB . |816C24 04 4B0>sub dword ptr ss:[esp+0x4],0x4B
004096B3 . |E9 D8130000 jmp CrackMe.0040AA90
004096B8 . |816C24 04 530>sub dword ptr ss:[esp+0x4],0x53
004096C0 . |E9 FB140000 jmp CrackMe.0040ABC0
找到了,F8单步
到了 00409C50 > \55 push ebp
00409C51 . 8BEC mov ebp,esp
00409C53 . 83EC 18 sub esp,0x18
00409C56 . 68 86124000 push <jmp.&MSVBVM60.__vbaExceptHandler> ; SE 处理程序安装
00409C5B . 64:A1 0000000>mov eax,dword ptr fs:[0]
00409C61 . 50 push eax
00409C62 . 64:8925 00000>mov dword ptr fs:[0],esp
00409C69 . B8 40010000 mov eax,0x140
00409C6E . E8 0D76FFFF call <jmp.&MSVBVM60.__vbaChkstk>
00409C73 . 53 push ebx
00409C74 . 56 push esi
00409C75 . 57 push edi
F8单步往下跟.
这里出现我们刚才输的假用户名 00409D38 > \C785 C0FEFFFF>mov dword ptr ss:[ebp-0x140],0x0
00409D42 > 8B85 74FFFFFF mov eax,dword ptr ss:[ebp-0x8C]
00409D48 . 8985 C4FEFFFF mov dword ptr ss:[ebp-0x13C],eax ; 假用户名
00409D4E . C785 74FFFFFF>mov dword ptr ss:[ebp-0x8C],0x0
00409D58 . 8B8D C4FEFFFF mov ecx,dword ptr ss:[ebp-0x13C]
00409D5E . 898D 4CFFFFFF mov dword ptr ss:[ebp-0xB4],ecx
00409D64 . C785 44FFFFFF>mov dword ptr ss:[ebp-0xBC],0x8
00409D6E . 8D95 44FFFFFF lea edx,dword ptr ss:[ebp-0xBC]
00409D74 . 8D4D CC lea ecx,dword ptr ss:[ebp-0x34]
继续F8 00409E0A /0F8F 02010000 jg CrackMe.00409F12 ; 可疑跳转
00409E10 . |C745 FC 06000>mov dword ptr ss:[ebp-0x4],0x6
00409E17 . |C785 4CFFFFFF>mov dword ptr ss:[ebp-0xB4],0x1
00409E21 . |C785 44FFFFFF>mov dword ptr ss:[ebp-0xBC],0x2
00409E2B . |8D85 44FFFFFF lea eax,dword ptr ss:[ebp-0xBC]
可疑的跳转,状态=未实现。00409E0A /0F8F 02010000 jg CrackMe.00409F12
让他往下跳试下,改标志位 S 1改为 S 0 ---跳转实现
单步跟 00409F3B . 52 push edx ; ||var28
00409F3C . 8D85 44FFFFFF lea eax,dword ptr ss:[ebp-0xBC] ; ||
00409F42 . 50 push eax ; ||SaveTo8 = 0012F44C
00409F43 FF15 A0104000 call dword ptr ds:[<&MSVBVM60.__vbaVarMu>; |\__vbaVarMul
00409F49 . 50 push eax ; |var28
00409F4A . 8D8D 34FFFFFF lea ecx,dword ptr ss:[ebp-0xCC] ; |
00409F50 . 51 push ecx ; |SaveTo8
到这里程序退出00409F43 FF15 A0104000 call dword ptr ds:[<&MSVBVM60.__vbaVarMu>; |\__vbaVarMul
重新载入
这次不让他跳试试00409E0A /0F8F 02010000 jg CrackMe.00409F12
到了这里 00409EEA . 8D4D BC lea ecx,dword ptr ss:[ebp-0x44]
00409EED . 51 push ecx
00409EEE . 8D95 44FFFFFF lea edx,dword ptr ss:[ebp-0xBC]
00409EF4 . 52 push edx
00409EF5 . FF15 C0104000 call dword ptr ds:[<&MSVBVM60.__vbaVarCa>; msvbvm60.__vbaVarCat
00409EFB . 8BD0 mov edx,eax
00409EFD . 8D4D AC lea ecx,dword ptr ss:[ebp-0x54]
00409F00 . FF15 0C104000 call dword ptr ds:[<&MSVBVM60.__vbaVarMo>; msvbvm60.__vbaVarMove
00409F06 > C745 FC 0A000>mov dword ptr ss:[ebp-0x4],0xA
00409F0D .^ E9 D8FEFFFF jmp CrackMe.00409DEA
00409F12 > C745 FC 0B000>mov dword ptr ss:[ebp-0x4],0xB
00409F19 . C785 1CFFFFFF>mov dword ptr ss:[ebp-0xE4],0xC
00409F23 . C785 14FFFFFF>mov dword ptr ss:[ebp-0xEC],0x2
00409F2D . 8D45 AC lea eax,dword ptr ss:[ebp-0x54]
00409F30 . 50 push eax ; /var18
往上跳回去了, - -!00409F0D .^ E9 D8FEFFFF jmp CrackMe.00409DEA
貌似计算什么东西。
不管他F8继续---先跑一遍,让他往上跳,第二遍,还是把S 1改成 S 0 算法就不分析了。
跳转实现,F8走,还是到了 00409F3B . 52 push edx ; ||var28
00409F3C . 8D85 44FFFFFF lea eax,dword ptr ss:[ebp-0xBC] ; ||
00409F42 . 50 push eax ; ||SaveTo8
00409F43 FF15 A0104000 call dword ptr ds:[<&MSVBVM60.__vbaVarMu>; |\__vbaVarMul
00409F49 . 50 push eax ; |var28
00409F4A . 8D8D 34FFFFFF lea ecx,dword ptr ss:[ebp-0xCC] ; |
这次没退出了。
00409F43 FF15 A0104000 call dword ptr ds:[<&MSVBVM60.__vbaVarMu>; |\__vbaVarMul
F8继续走,VB代码长,不急慢慢跟
到了 0040A171 . /EB 0A jmp XCrackMe.0040A17D
0040A173 > |C785 B8FEFFFF>mov dword ptr ss:[ebp-0x148],0x0
0040A17D > \8B8D 74FFFFFF mov ecx,dword ptr ss:[ebp-0x8C]
0040A183 . 51 push ecx ; 假码
0040A184 . 8B95 78FFFFFF mov edx,dword ptr ss:[ebp-0x88]
0040A18A . 52 push edx
出现我们刚才输的假码
F8继续,来到 0040A1ED . 83C4 0C add esp,0xC
0040A1F0 . 0FBF95 F0FEFF>movsx edx,word ptr ss:[ebp-0x110]
0040A1F7 . 85D2 test edx,edx
0040A1F9 0F84 1C030000 je CrackMe.0040A51B ; 关键跳
0040A1FF . C745 FC 10000>mov dword ptr ss:[ebp-0x4],0x10
0040A206 . 8B45 08 mov eax,dword ptr ss:[ebp+0x8]
0040A209 . 8B08 mov ecx,dword ptr ds:[eax]
0040A20B . 8B55 08 mov edx,dword ptr ss:[ebp+0x8]
0040A20E . 52 push edx
0040A1F9 0F84 1C030000 je CrackMe.0040A51B -----状态=实现跳转
很大的跳转,应该是关键了,测试下
既然是实现状态,我们让他别跳。 0040A1F9 0F84 1C030000 je CrackMe.0040A51B
Nop掉,运行
哈哈,“您给的确认码是正确的” OK了。
完毕。
yes,天又亮了,各位早安, 睡觉去了。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于Chief, 转载请注明作者并保持文章的完整, 谢谢!
2012年05月01日 6:15:12
|