爆破超级函数表达式运算器v12

【文章标题】: 爆破超级函数表达式运算器v12
【下载地址】: 自己搜索下载
——————————————————————————–
【详细过程】
  第一步:查壳,并脱之:

00438E00 超> /EB 06               jmp short 超级函数.00438E08                  //OD载入后,停留在此
  00438E02    |68 C4160000         push 16C4
  00438E07    |C3                  retn
  00438E08    \9C                  pushfd
  00438E09     60                  pushad
  00438E0A     E8 02000000         call 超级函数.00438E11

单步运行到此,查看寄存器有ESP值:=0012FFA0
下断:hr 0012FFA0,F9运行

0043A54F     9D                  popfd                      //程序中断在此处了,
  0043A550     50                  push eax
  0043A551     68 C4164000         push 超级函数.004016C4                               ; ASCII "h(^A"
   //这就是程序的OEP了,hehe……
  0043A556     C2 0400             retn 4

  
  
  单步运行,程序返回到:
  

004016C4     68 285E4100         push 超级函数.00415E28
   //脱壳了,…………
  004016C9     E8 EEFFFFFF         call 超级函数.004016BC                               ; jmp to MSVBVM50.ThunRTMain
  004016CE     0000                add byte ptr ds:[eax],al
  004016D0     0000                add byte ptr ds:[eax],al
  004016D2     0000                add byte ptr ds:[eax],al

  第二步:爆破之:
   试运行脱壳后的程序,首先弹出上个对话框,由于程序是VB写的,而我搜索了一下参考字符,结果没有想下了的,只好直接下断:bp rtcMsgBox,程序中断在:

0F0D405A M>  55                  push ebp
  0F0D405B     8B4424 14           mov eax,dword ptr ss:[esp+14]
  0F0D405F     8BEC                mov ebp,esp
  0F0D4061     83EC 48             sub esp,48

  
  查看堆栈:

0012F8B0   00431A08  返回到 12.00431A08 来自 MSVBVM50.rtcMsgBox
  0012F8B4   0012FA30

  
  在0012F8B0   00431A08  返回到 12.00431A08 来自 MSVBVM50.rtcMsgBox行上,点右键–>反汇编窗口跟随,来到:

004319FB     8D95 74FFFFFF       lea edx,dword ptr ss:[ebp-8C]
  00431A01     52                  push edx
  00431A02     FF15 1C724300       call dword ptr ds:[<&MSVBVM50.rtcMsgBox>]        ; MSVBVM50.rtcMsgBox
  00431A08     8D45 8C             lea eax,dword ptr ss:[ebp-74]

  
  我们向上找关键跳,跳的地址一定要大干00431A02,不然就不能跳过提示窗口了:
向上的第一个跳:0043190E    /0F85 900A0000       jnz 12.004323A4
  我们过去看看,呵呵是异常信息,忽略,继续:
  
  找到了:

00430EB6     85D8                test eax,ebx
  00430EB8     0F85 28100000       jnz 12.00431EE6

  

  下断,重新载入运行,程序断在了我们下断的位置了
  我们试着改jnz 12.00431EE6为:jmp 12.00431EE6
  
  单步到:

00431EE6     8D95 74FFFFFF       lea edx,dword ptr ss:[ebp-8C]         //在这下个断,或者记录一下
  00431EEC     52                  push edx
  00431EED     8B1D F8724300       mov ebx,dword ptr ds:[<&MSVBVM50.rtcGetDateVar>] ; MSVBVM50.rtcGetDateVar
  00431EF3     FFD3                call ebx

  
  F9运行一下!
  哦,原来的弹出窗口没有了,不过又出现了一个新窗口,我们继续吧!
  再次重新载入运行到:
  00431EE6     8D95 74FFFFFF       lea edx,dword ptr ss:[ebp-8C]
  
  这次我们是往下查看了,并记下跳转的命令,直到出现对rctMsgBox的调用了,呵呵!

00432112     85F6                test esi,esi
  00432114     0F85 AF010000       jnz 12.004322C9 //关键跳
  
  0043229B     52                  push edx
  0043229C     FF15 1C724300       call dword ptr ds:[<&MSVBVM50.rtcMsgBox>]        ; MSVBVM50.rtcMsgBox

  
  哈哈,就一个关键跳,而且跳出地址也出了对对话框的调用,
  同样,我们试着改jnz 12.004322C9为:jmp 12.004322C9
  按F9运行,哈哈,程序成功运行,没有出现弹出窗口!!!!
  
  胜利第一步走完了,接下来随便测试一下功能有没有限制!
  随便点了一下,在运算结果栏出现了:“功能受限,请注册后再使用”
  
  我打开WinHex,打开程序主存,搜索“功能受限”,找到地址:
  
  然后在OD命令窗口中下断:
  hr 00152FF8
  在程序窗口随便测试了一下,然后中断了下来:

 7C94B408     8B448E F0           mov eax,dword ptr ds:[esi+ecx*4-10]
  7C94B40C     89448F F0           mov dword ptr ds:[edi+ecx*4-10],eax
  7C94B410     8B448E F4           mov eax,dword ptr ds:[esi+ecx*4-C]

  
  删除硬件断点后,按Alt+F9,返回程序领空:
  

0042FCFC     85C0                test eax,eax
  0042FCFE     7D 12               jge short 12.0042FD12

  
  向上,找到入口:
  

0042FAB0     55                  push ebp
   //在此下断,F9运行程序,然后继续测试,程序中断在此了,hehe
  0042FAB1     8BEC                mov ebp,esp
  0042FAB3     83EC 14             sub esp,14
  0042FAB6     68 76144000         push <jmp.&MSVBVM50.__vbaExceptHandler>
  0042FABB     64:A1 00000000      mov eax,dword ptr fs:[0]
  0042FAC1     50                  push eax

  
  F8单步运行,同时注意对__vbaStrCmp及__vbaStrMove的调用:
  单步到此,看到了对__vbaStrCmp的调用,并且有一个关键词:”yes”出现:

 0042FB68     51                  push ecx
  0042FB69     68 B49C4100         push 12.00419CB4                               ; UNICODE "yes"
  0042FB6E     8B1D 54724300       mov ebx,dword ptr ds:[<&MSVBVM50.__vbaStrCmp>] ; MSVBVM50.__vbaStrCmp
  0042FB74     FFD3                call ebx

  
  随后,就在下面出现了关键跳:

 0042FB97     8B8D 38FFFFFF       mov ecx,dword ptr ss:[ebp-C8]
  0042FB9D     85C8                test eax,ecx
  0042FB9F     0F85 7B010000       jnz 12.0042FD20

  
  跳转没有实现,那么实现后又是怎样呢?试着改为jmp 12.0042FD20
  F9运行,连续几个F9之后,出现了正确的结果了,哈!
  
  保存修改,结果出现乱码,只好退出程序重新载入,然后一个个修改,OK!正常了,哈
  但不知道为什么,一次性修改会出现乱码,还望那位老大予以指点,谢谢!
  
  
  
——————————————————————————–
【版权声明】: 旧文, 一些截图都已经找不到了,呵呵!现转载到BLOG,以备收藏!

                                                       2007年10月08日 1:01:48

发表评论