欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]VB卡刀辅助快速定位破解

[原创]VB卡刀辅助快速定位破解

由于一些原因, 两年没发破文了, 如今还是菜鸟, 都是做的笔记 就发下菜文
今天的练手程序比较适合新手,感觉有点意思,就有了今天的破文了 入门同学不妨试试看
是一个剑灵卡刀的辅助  VB程序的, 没什么技术含量, 高手飘过
========  症状 ==========
1.ANTI进程
2.打开软件会显示“试用版本”
3.输入假码注册结束后,会打开网页
4.文件时间效验
5.ANTI注册
实战:
载入OD , F9运行看看 , 发现原来的进程退出了,自动新开了一个进程出来了!
///解除 ANTI进程 ===================================
首先, 我们尝试对创建进程函数 CreateProcessA / CreateProcessW 进行下断,重新运行,发现断下来了 看堆栈:

0012F8E4   7350CEBF  /CALL to CreateProcessW from msvbvm60.7350CEB9
0012F8E8   00000000  |ModuleFileName = NULL
0012F8EC   00169CFC  |CommandLine = "C:\Documents and Settings\Administrator\桌面\剑灵卡刀(全职业) v4 09A\卡刀.exe"
0012F8F0   00000000  |pProcessSecurity = NULL
0012F8F4   00000000  |pThreadSecurity = NULL
0012F8F8   00000000  |InheritHandles = FALSE
0012F8FC   00000000  |CreationFlags = 0
0012F900   00000000  |pEnvironment = NULL
0012F904   00000000  |CurrentDir = NULL
0012F908   0012F91C  |pStartupInfo = 0012F91C
0012F90C   0012F960  \pProcessInfo = 0012F960
0012F910   7353EA4C  msvbvm60.__vbaFreeVar
0012F914   00000008
0012F918   7351C1FB  msvbvm60.rtcRandomize
0012F91C   00000044
0012F920   00000000
......
0012F968   00000000
0012F96C   0012FA60
0012F970  /0012FA60
0012F974  |0041DA05  RETURN to 卡刀.0041DA05 from msvbvm60.rtcShell

对0012F974行右键 跟踪到反汇编窗口:
// ****** ANTI进程 ******  //  (名字随便起的.. )
找到有这里 ,我们手动 修改 那个跳为JMP,
0041D9DC               > \DD45 BC            fld qword ptr [ebp-0x44]                   ;
0041D9DF               .  DC1D C0124000      fcomp qword ptr [0x4012C0]
0041D9E5               .  DFE0               fstsw ax
0041D9E7               .  F6C4 41            test ah,0x41
0041D9EA               . /75 45              jnz short 卡刀.0041DA31                    ;  //改JMP跳过  ★
0041D9EC               . |8D4D B8            lea ecx,dword ptr [ebp-0x48]
0041D9EF               . |894D 88            mov dword ptr [ebp-0x78],ecx
0041D9F2               . |C745 80 08400000   mov dword ptr [ebp-0x80],0x4008
0041D9F9               . |6A 01              push 0x1
0041D9FB               . |8D55 80            lea edx,dword ptr [ebp-0x80]
0041D9FE               . |52                 push edx
0041D9FF               . |FF15 E8104000      call dword ptr [<&MSVBVM60.#600>]        ;  // 这里会打开新进程 
0041DA05               . |DDD8               fstp st                                  ;  // 返回到这里 
0041DA07               . |FF15 28104000      call dword ptr [<&MSVBVM60.__vbaEnd>]    ; __vbaEnd
0041DA0D               . |FF15 68104000      call dword ptr [<&MSVBVM60.__vbaExitProc>;  msvbvm60.__vbaExitProc
0041DA13               . |9B                 wait
0041DA14               . |68 96DA4100        push 卡刀.0041DA96
0041DA19               . |EB 59              jmp short 卡刀.0041DA74

以0041D9DC ~ 0041D9E7 的HEX 作为特征码搜索:
DD 45 BC DC 1D C0 12 40 00 DF E0 搜索一下看看其他地方还有没??然后又发现一处 :
0041D62C               > \DD45 BC            fld qword ptr [ebp-0x44]
0041D62F               .  DC1D C0124000      fcomp qword ptr [0x4012C0]
0041D635               .  DFE0               fstsw ax
0041D637               .  F6C4 41            test ah,0x41
0041D63A               .  75 45              jnz short 卡刀.0041D681				 ;  //一样改JMP跳过  ★
0041D63C               .  8D4D B8            lea ecx,dword ptr [ebp-0x48]
0041D63F               .  894D 88            mov dword ptr [ebp-0x78],ecx
0041D642               .  C745 80 08400000   mov dword ptr [ebp-0x80],0x4008
0041D649               .  6A 01              push 0x1
0041D64B               .  8D55 80            lea edx,dword ptr [ebp-0x80]
0041D64E               .  52                 push edx
0041D64F               .  FF15 E8104000      call dword ptr [<&MSVBVM60.#600>]        ;  msvbvm60.rtcShell
0041D655               .  DDD8               fstp st                                  ; |
0041D657               .  FF15 28104000      call dword ptr [<&MSVBVM60.__vbaEnd>]    ; \__vbaEnd
0041D65D               .  FF15 68104000      call dword ptr [<&MSVBVM60.__vbaExitProc>;  msvbvm60.__vbaExitProc
0041D663               .  9B                 wait
0041D664               .  68 E6D64100        push 卡刀.0041D6E6
0041D669               .  EB 59              jmp short 卡刀.0041D6C4
0041D66B               .  C785 7CFFFFFF 0100>mov dword ptr [ebp-0x84],0x1
0041D675               .  8D85 7CFFFFFF      lea eax,dword ptr [ebp-0x84]
0041D67B               .  50                 push eax
0041D67C               .  E8 8F000000        call 卡刀.0041D710
0041D681               >  FF15 68104000      call dword ptr [<&MSVBVM60.__vbaExitProc>;  msvbvm60.__vbaExitProc

///爆破注册 ===================================
VB程序没加壳,我们爆破试试, 首先根据症状2打开界面后,搜索相关字符,查找“试用”,可以看到 :
发现有几处敏感的字符:
        当前版本为试用版本,试用时间15分钟
        当前版本为试用版本,试用时间10分钟
        当前版本为已注册版本,永久使用
....
随便点一个上面的字符串进去跟踪  , 这里我选择 永久使用那来下手 来到:
00413910 . /75 10 jnz short 卡刀.00413922 ; //这个会跳过注册,这里NOP
00413912 . |BA 20674000 mov edx,卡刀.00406720 ; 当前版本为已注册版本,永久使用
00413917 . |8D4E 60 lea ecx,dword ptr [esi+0x60]

然后往上翻一路看,就找相关的敏感字串与跳过它的大跳(无short的跳) 。
我们尝试JMP跳过那些代码,注册前的跳NOP掉 ,流程如下:
004130B5 . /0F84 C8000000 je 卡刀.00413183 ; //改JMP跳过 ★
..更新的代码..
00413239 . /0F85 7E010000 jnz 卡刀.004133BD ; //改JMP跳过 ★
..当前版本为试用版本,试用时间15分钟 的代码..
00413459 . /0F84 DC010000 je 卡刀.0041363B ; //改JMP跳过 ★
..当前版本为试用版本,试用时间10分钟 的代码..
00413910 . /75 10 jnz short 卡刀.00413922 ; //NOP掉 ★
00413912 . |BA 20674000 mov edx,卡刀.00406720 ; 当前版本为已注册版本,永久使用
00413917 . |8D4E 60 lea ecx,dword ptr [esi+0x60]

然后F9运行 ,发现已经显示为注册版本了 。
///解除 ANTI注册 ===================================
但不一会就有两个提示,最后一个提示“使用时间已到,请续费”的信息框,点确认后程序就会退出了!并打开一个网页 。
方法:我们对应可下这几个断点:rtcMsgBox ,__vbaEnd ,rtcShell 其中一个都可以。
** 这里我选rtcMsgBox下断,

重新载入程序,重新前面的修改后 F9运行 ,在堆栈窗口右键跟随到这里:
第一个提示:
00415FA7              .  FF15 7C104000      call dword ptr [<&MSVBVM60.#595>]               ;  msvbvm60.rtcMsgBox
00415FAD              .  8D45 A4            lea eax,dword ptr [ebp-0x5C]
第二个提示:
0041600F               .  51                 push ecx
00416010               .  FF15 7C104000      call dword ptr [<&MSVBVM60.#595>]        ;  //BAD信息框
对应如下:
//  ****** anti注册的函数 ****** //
跟踪进入 ,修改从头部跳到尾部返回即可:
//* 入口处*//
00415E00               > \55                 push ebp                                 ;  //改 JMP 004160CE  ★
00415E01               .  8BEC               mov ebp,esp
00415E03               .  83EC 0C            sub esp,0xC
00415E06               .  68 A6154000        push <jmp.&MSVBVM60.__vbaExceptHandler>  ;  SE handler installation
00415E0B               .  64:A1 00000000     mov eax,dword ptr fs:[0]
00415E11               .  50                 push eax                                 ;  
00415E12               .  64:8925 00000000   mov dword ptr fs:[0],esp
...
00415FDA               .  8945 AC            mov dword ptr [ebp-0x54],eax
00415FDD               .  8945 BC            mov dword ptr [ebp-0x44],eax
00415FE0               .  C745 8C 006B4000   mov dword ptr [ebp-0x74],卡刀.00406B00     ;  提醒
00415FE7               .  895D 84            mov dword ptr [ebp-0x7C],ebx
00415FEA               .  FFD6               call esi                                 ;  
00415FEC               .  8D55 94            lea edx,dword ptr [ebp-0x6C]
00415FEF               .  8D4D D4            lea ecx,dword ptr [ebp-0x2C]
00415FF2               .  C745 9C E46A4000   mov dword ptr [ebp-0x64],卡刀.00406AE4     ;  使用时间已到,请续费
00415FF9               .  895D 94            mov dword ptr [ebp-0x6C],ebx
00415FFC               .  FFD6               call esi                                 ;  
00415FFE               .  8D4D A4            lea ecx,dword ptr [ebp-0x5C]
00416001               .  8D55 B4            lea edx,dword ptr [ebp-0x4C]
00416004               .  51                 push ecx
00416005               .  8D45 C4            lea eax,dword ptr [ebp-0x3C]
00416008               .  52                 push edx
00416009               .  50                 push eax
0041600A               .  8D4D D4            lea ecx,dword ptr [ebp-0x2C]
0041600D               .  6A 1A              push 0x1A
0041600F               .  51                 push ecx
00416010               .  FF15 7C104000      call dword ptr [<&MSVBVM60.#595>]        ;  //BAD信息框
00416016               .  8D55 A4            lea edx,dword ptr [ebp-0x5C]
00416019               .  8D45 B4            lea eax,dword ptr [ebp-0x4C]
...
004160BE               .  8B4D EC            mov ecx,dword ptr [ebp-0x14]
004160C1               .  5F                 pop edi                                  ;  
004160C2               .  5E                 pop esi                                  ;  
004160C3               .  64:890D 00000000   mov dword ptr fs:[0],ecx
004160CA               .  5B                 pop ebx                                  ; 
004160CB               .  8BE5               mov esp,ebp
004160CD               .  5D                 pop ebp                                  
004160CE               .  C2 0400            retn 0x4           ;  //JMP到这里,段尾就直接返回了 

对于这种调用固定的函数去检测的,同样这个函数还可能会有其他检测的,我们采用直接JMP到函数返回处即可!
找到关键处了,重新载入,重新上面的修改后,我们取消所有断点 OD运行后发现程序已经没有问题了,说明我们的思路是正确!^_^
但新问题来了,保存覆盖到本地文件上就运行到滚动条显示“载入系统文件..”那儿就自动退出了。...估计是被检测到修改了。。
这种情况一般是程序带文件自校验 ,我们通常会对CreateFileA / CreateFileW 下断,发现没有断下 。
方法一:找“载入文件”的字符串的关键所在
方法二:对__vbaEnd下段找退出的地方
方法三:使用VB万能断点尝试 , 万能断点特征码:816C2404????????E9??????

根据新症状 滚动条显示,我们用方法一,搜索字符串找“载入系统文件”在下面,还有几个超可疑的字串:

我们双击字符“卡刀.exe”来到段首处下断,
///解除 文件时间效验 ===================================
//  ****** 文件时间效验函数 ****** //
修改从头部跳到尾部返回即可:
//* 入口处*//
0041E960              > \55                 push ebp									    ;  // JMP 0041EAC7   ★
0041E961              .  8BEC               mov ebp,esp
0041E963              .  83EC 08            sub esp,0x8
0041E966              .  68 A6154000        push <jmp.&MSVBVM60.__vbaExceptHandler>         ;  SE handler installation
0041E96B              .  64:A1 00000000     mov eax,dword ptr fs:[0]
0041E971              .  50                 push eax
0041E972              .  64:8925 00000000   mov dword ptr fs:[0],esp
0041E979              .  83EC 7C            sub esp,0x7C
0041E97C              .  53                 push ebx
0041E97D              .  56                 push esi
0041E97E              .  57                 push edi
0041E97F              .  8965 F8            mov dword ptr [ebp-0x8],esp
0041E982              .  C745 FC 90154000   mov dword ptr [ebp-0x4],卡刀4.00401590
0041E989              .  33C0               xor eax,eax
0041E98B              .  8D8D 78FFFFFF      lea ecx,dword ptr [ebp-0x88]
0041E991              .  8945 E0            mov dword ptr [ebp-0x20],eax
0041E994              .  8945 D0            mov dword ptr [ebp-0x30],eax
0041E997              .  8945 BC            mov dword ptr [ebp-0x44],eax
0041E99A              .  8945 B8            mov dword ptr [ebp-0x48],eax
0041E99D              .  8945 A8            mov dword ptr [ebp-0x58],eax
0041E9A0              .  8945 98            mov dword ptr [ebp-0x68],eax
0041E9A3              .  8945 88            mov dword ptr [ebp-0x78],eax
0041E9A6              .  8D45 BC            lea eax,dword ptr [ebp-0x44]
0041E9A9              .  50                 push eax                                       
0041E9AA              .  8D55 A8            lea edx,dword ptr [ebp-0x58]                    
0041E9AD              .  BF 08000000        mov edi,0x8                                     
0041E9B2              .  51                 push ecx                                        
0041E9B3              .  52                 push edx                                        
0041E9B4              .  C745 80 74794000   mov dword ptr [ebp-0x80],卡刀4.00407974         ; 卡刀.exe  <- 找到这儿
0041E9BB              .  89BD 78FFFFFF      mov dword ptr [ebp-0x88],edi                    
0041E9C1              .  FF15 2C114000      call dword ptr [<&MSVBVM60.__vbaVarCat>]        
....
0041E9E7              .  FF15 74114000      call dword ptr [<&MSVBVM60.#577>]               ; // rtcFileDateTime 
																							  //取文件创建时间
0041E9ED              .  8D95 78FFFFFF      lea edx,dword ptr [ebp-0x88]
0041E9F3              .  8D4D 98            lea ecx,dword ptr [ebp-0x68]
0041E9F6              .  C745 80 88794000   mov dword ptr [ebp-0x80],卡刀.00407988            ;  YYYYMMDDHHMMSS
0041E9FD              .  89BD 78FFFFFF      mov dword ptr [ebp-0x88],edi
0041EA03              .  FF15 A0114000      call dword ptr [<&MSVBVM60.__vbaVarDup>]        ;  
0041EA09              .  6A 01              push 0x1
0041EA0B              .  8D45 98            lea eax,dword ptr [ebp-0x68]
0041EA0E              .  6A 01              push 0x1
0041EA10              .  8D4D A8            lea ecx,dword ptr [ebp-0x58]
0041EA13              .  50                 push eax
0041EA14              .  8D55 88            lea edx,dword ptr [ebp-0x78]
0041EA17              .  51                 push ecx
0041EA18              .  52                 push edx
0041EA19              .  FF15 50104000      call dword ptr [<&MSVBVM60.#660>]              //msvbvm60.rtcVarFromFormatVar
																						   //格式化时间
步过后的堆栈信息:
	0012FA48   73519A69  msvbvm60.__vbaObjSet
	0012FA4C   00164988
	0012FA50   00F41314
	0012FA54   00000000
	0012FA58   00000008
	0012FA5C   001603A0
	0012FA60   00407988  UNICODE "YYYYMMDDHHMMSS"
	0012FA64   774FD010  RETURN to ole32.774FD010 from ntdll.RtlSizeHeap
	0012FA68   00120008
	0012FA6C   00F41314
	0012FA70   00169A44  UNICODE "20140411044417"
//__vbaVarTstEq判断2个variant, 如果"相等", 则返回-1(vb中boolean类型,用-1表示true,用0表示false)
0041EA4C              .  C745 80 AC794000   mov dword ptr [ebp-0x80],卡刀.004079AC            ;  //原时间串 20140409122418
0041EA53              .  52                 push edx
0041EA54              .  50                 push eax
0041EA55              .  C785 78FFFFFF 0880>mov dword ptr [ebp-0x88],0x8008
0041EA5F              .  FF15 B4104000      call dword ptr [<&MSVBVM60.__vbaVarTstEq>]      ;  两个时间值比较
0041EA65              .  66:F7D8            neg ax
0041EA68              .  1BC0               sbb eax,eax
0041EA6A              .  68 ABEA4100        push 卡刀.0041EAAB
.....
0041EAA8              .  FFD6               call esi                                        ;  <&MSVBVM60.__vbaFreeVar>
0041EAAA              .  C3                 retn
0041EAAB              .  8B4D 0C            mov ecx,dword ptr [ebp+0xC]
0041EAAE              .  66:8B55 CC         mov dx,word ptr [ebp-0x34]
0041EAB2              .  5F                 pop edi                                      
0041EAB3              .  5E                 pop esi                                       
0041EAB4              .  66:8911            mov word ptr [ecx],dx
0041EAB7              .  8B4D F0            mov ecx,dword ptr [ebp-0x10]                    
0041EABA              .  33C0               xor eax,eax
0041EABC              .  64:890D 00000000   mov dword ptr fs:[0],ecx
0041EAC3              .  5B                 pop ebx                                         
0041EAC4              .  8BE5               mov esp,ebp
0041EAC6              .  5D                 pop ebp                                         
0041EAC7              .  C2 0800            retn 0x8										;  //跳到这里,尾部

       
步过到0041E587程序就结束了,很明显0041E57A就是调用效验函数的,对付效验函数不要手软的,
老样子在调用的地方0041E57A下断,重新载入运行,F7进入函数,修改从头跳到尾
0041E57A . FF92 04070000 call dword ptr [edx+0x704] ; //这调用效验文件函数的
0041E580 . 66:837D B0 00 cmp word ptr [ebp-0x50],0x0 ; //返回到这里
0041E585 . 75 06 jnz short 卡刀.0041E58D ; //改JMP ★
0041E587 . FF15 28104000 call dword ptr [<&MSVBVM60.__vbaEnd>] ; 程序结束

还有一个简单的方法,不用理文件时间效验这块,因为作者把名字写死了 只获取卡刀.exe的时间 ..
所以只要放一个没修改过的卡刀.exe在目录下,然后把破解后的程序改一下名 Crack.exe 即可完成破解了l_l .
软件写的有点鸡肋,全程几乎JMP过就可以了,功能能不能用就不知道了, 小菜只是演示如何破解注册和校验机制 。谢谢观看。
小结: 跟着程序走,按症状,举一反三。多积累,多上机调试^_^
简单破文 , 高手飘过 ~
试练品 : http://pan.baidu.com/s/1jG9Nep4

上传的附件 123.jpg

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功