word文档批量处理大师爆破爆破
6056 点击·0 回帖
![]() | ![]() | |
![]() | 作 者: zhxfl 说 明:做出了完整的破解,发在这里供新手练手。本主题只供研究只用。 VB的程序,下比较断点bpx __vbaStrCmp(在cmd框执行) 一边撤销断点(f2)一边执行,直到运行到这里 0061E341 /75 11 jnz Xword文档.0061E354 0061E343 . |C745 FC 83000>mov dword ptr ss:[ebp-0x4],0x83 0061E34A . |E8 91120000 call word文档.0061F5E0 0061E34F . |E9 20010000 jmp word文档.0061E474 0061E354 > C745 FC 85000>mov dword ptr ss:[ebp-0x4],0x85 这里有一个call word文档,凡是跳过这种call(这个call的内容是本代码模块的,而不是其他模块的函数)的,这个call必须跟进进去看看,进去之后,只看注释(关注是否有任何比较字符串的函数或者某些很长的字符串存在)如: ![]() 按<C>按钮,回到这里,把jnz语句nop掉,进入call分析 0061E341 90 nop 0061E342 90 nop 0061E343 . C745 FC 83000>mov dword ptr ss:[ebp-0x4],0x83 0061E34A . E8 91120000 call word文档.0061F5E0 0061E34F . E9 20010000 jmp word文档.0061E474 这里有一个跳转,跨度很大,而且包好字符串比较,所以直接nop掉 0061F64A 90 nop 0061F64B 90 nop 0061F64C 90 nop 0061F64D 90 nop 0061F64E 90 nop 0061F64F 90 nop 0061F650 . 8B0D 44C06300 mov ecx,dword ptr ds:[0x63C044] 0061F656 . 51 push ecx ; /String => "" 0061F657 . FF15 38104000 call dword ptr ds:[<;MSVBVM60.__vbaL>; __vbaLenBstr 0061F65D . 0FBFD6 movsx edx,si 0061F660 . 2BC2 sub eax,edx 0061F662 . 8B15 44C06300 mov edx,dword ptr ds:[0x63C044] 0061F668 . 0F80 D5020000 jo word文档.0061F943 一直跟到这里 0061F8B2 . FF15 68114000 call dword ptr ds:[<;MSVBVM60.__vbaS>; MSVBVM60.__vbaStrCmp 这时候堆栈里面是这样的(跟踪的时候要一直看着堆栈里面的信息),这个是MD5校验,因为代码被改了,所以就不相等。 0012FB74 0016880C UNICODE "76EE701A9534D90A220D8A76C69DFF67" 0012FB78 0016894C UNICODE "CFCD208495D565EF66E7DFF9F98764DA" 所以nop掉这里的跳转,使得MD5校验失败 0061F8BA 90 nop 0061F8BB 90 nop 0061F8BC 8B15 44C06300 mov edx,dword ptr ds:[0x63C044] 0061F8C2 66:C705 48C06>mov word ptr ds:[0x63C048],0xFFFF 接着就可以跑出这个函数了。继续不断F9,一边F2撤销断点,知道出现如下对话框,可以看到成功注册了,不过仍然有功能限制。 ![]() 这里又经过刚才那个函数,nop掉,直接进入 005EBBB5 . FF15 68114000 call dword ptr ds:[<;MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp 005EBBBB . F7D8 neg eax 005EBBBD . 1BC0 sbb eax,eax 005EBBBF . 40 inc eax 005EBBC0 . 0BF0 or esi,eax 005EBBC2 . 85F6 test esi,esi 005EBBC4 90 nop 005EBBC5 90 nop 005EBBC6 . C745 FC 7F000>mov dword ptr ss:[ebp-0x4],0x7F 005EBBCD . E8 0E3A0300 call word文档.0061F5E0 005EBBD2 . EB 10 jmp Xword文档.005EBBE4 005EBBD4 > C745 FC 81000>mov dword ptr ss:[ebp-0x4],0x81 005EBBDB . 66:C705 48C06>mov word ptr ds:[0x63C048],0x0 005EBBE4 > C745 FC 83000>mov dword ptr ss:[ebp-0x4],0x83 点击软件的个个按钮,检查是否有功能限制。很快可以发现仍然有功能限制,这时候可以尝试搜索字符串“本功能只提供个注册用户使用”,这里使用unicode搜索引擎,很快可以发现这个字符串。 ![]() ![]() 进入该代码附近,往上找跳转指令(然后对这些跳转下断点),如下这个指令,下端之后重新触发这个功能限制。 005EA122 /0F84 52010000 je word文档.005EA27A 005EA128 |66:395E 3A cmp word ptr ds:[esi+0x3A],bx 005EA12C . |0F85 48010000 jnz word文档.005EA27A 重新触发之后发现确实没有跳转,所以就强迫他跳转,修改如下: 005EA122 /E9 53010000 jmp word文档.005EA27A 005EA127 |90 nop 005EA128 |66:395E 3A cmp word ptr ds:[esi+0x3A],bx 005EA12C . |0F85 48010000 jnz word文档.005EA27A 到这里为止,爆破似乎结束了,我把修改都保存起来<word文档批量处理大师-1.exe>, 这里发现其不能运行,只好重新载入<word文档批量处理大师-1.exe>观察,老规矩,下bpx __vbaStrCmp 断点 。 0061FE11 . FF15 68114000 call dword ptr ds:[<;MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp 0061FE17 . 85C0 test eax,eax 0061FE19 . 74 06 je Xword文档.0061FE21 0061FE1B FF15 4C104000 call dword ptr ds:[<;MSVBVM60.__vbaEnd>] ; MSVBVM60.__vbaEnd 这里发现__vbaEnd被运行了,这个函数可以结束按钮功能或者窗口,可以猜想,这个程序还有其他的MD5校验,这里我直接把__vbaEnd nop掉,然后继续F9(同时检查每个按钮),发现不少地方有这种情况,处理完之后,保存为<word文档批量处理大师-2.exe>,把他的校验功能也去除了,完整的破解到这里就结束了。 | |
![]() | ![]() |