灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:5699回复:0

word文档批量处理大师爆破爆破

楼主#
更多 发布于:2012-08-24 20:04

作 者: 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>,把他的校验功能也去除了,完整的破解到这里就结束了。

喜欢0 评分0
游客

返回顶部