我的第二篇破文------wordcard 3.10的破解明细
作者:restxx
破解目标:wordcard 3.10 这个东西是我一个月前下的,现在不知什么地方有但3.20版的很多,这个版本应该也不少
破解工具:ollydbg1.10(包括老罗的ULtra string ref) winxp
破解分析:无壳,哇塞,爽!!这个VB写的破软件是用随机生成的机器码来生成序列号保护码的,
载入之后忽略所有的异常,并在OLLYDBG中用Shift+f9运行,
载入后看到的是如下代码,一看就知道是VB写的,由于是解释型语言,这样就只能在msvbvm60.DLL模块中下断了
_____________________________________________________________________
00404F98 > $ 68 D0534000 PUSH wordcard.004053D0
00404F9D . E8 EEFFFFFF CALL <JMP.&MSVBVM60.#100>
00404FA2 . 0000 ADD BYTE PTR DS:[EAX],AL
00404FA4 . 0000 ADD BYTE PTR DS:[EAX],AL
00404FA6 . 0000 ADD BYTE PTR DS:[EAX],AL
00404FA8 . 3000 XOR BYTE PTR DS:[EAX],AL
00404FAA . 0000 ADD BYTE PTR DS:[EAX],AL
00404FAC . 40 INC EAX
00404FAD . 0000 ADD BYTE PTR DS:[EAX],AL
00404FAF . 0000 ADD BYTE PTR DS:[EAX],AL
00404FB1 . 0000 ADD BYTE PTR DS:[EAX],AL
00404FB3 . 00C5 ADD CH,AL
00404FB5 . 1904A6 SBB DWORD PTR DS:[ESI],EAX
******************************************************************
选 查看\执行模块,找到msvbvm60.dll并click它,看到如下代码页
***********************************************************************************
66001000 > 53 PUSH EBX
66001001 BE E5778F4A MOV ESI,4A8F77E5
66001006 E5 77 IN EAX,77 ; I/O 命令
66001008 > 59 POP ECX
66001009 53 PUSH EBX
6600100A E5 77 IN EAX,77 ; I/O 命令
6600100C > 9E SAHF
6600100D FC CLD
6600100E E4 77 IN AL,77 ; I/O 命令
66001010 > ED IN EAX,DX ; I/O 命令
66001011 95 XCHG EAX,EBP
66001012 E5 77 IN EAX,77 ; I/O 命令
66001014 > 8B98 E4774A16 MOV EBX,DWORD PTR DS:[EAX+164A77E4]
6600101A E5 77 IN EAX,77 ; I/O 命令
6600101C > A2 B4E477B1 MOV BYTE PTR DS:[B177E4B4],AL
66001021 C6 ??? ; 未知命令
66001022 E4 77 IN AL,77 ; I/O 命令
66001024 > B8 16E47737 MOV EAX,3777E416
66001029 38E5 CMP CH,AH
6600102B 77 6B JA SHORT <&KERNEL32.LeaveCriticalSection>
6600102D 90 NOP
6600102E E4 77 IN AL,77 ; I/O 命令
66001030 > E1 60 LOOPDE SHORT MSVBVM60.66001092
66001032 E5 77 IN EAX,77 ; I/O 命令
66001034 > 8BB0 E5779725 MOV ESI,DWORD PTR DS:[EAX+259777E5]
6600103A E5 77 IN EAX,77 ; I/O 命令
**************************************************************************************
点右键,搜索\当前模块中的名称,看看后找到vbaVarCopy(当然有兴趣的朋友可以用上面的vbaSriComp或邻近的几个功能相近的试试,反正我也没用过)这个时候不要下断,返回到CPU页(上面的代码处),用Shift+f9运行,进入注册码填写的地方,随手写入123456654987不要点确定(这个时候最好让这个破软件停下来,不要读词了)再回到vbaVarCopy这个地方下断点,这个时候才可以点确定,这之后会停在如下地方,这之后用F8走
*******************************************************************************************
66106BF8 > 51 PUSH ECX
66106BF9 A1 7CEE1066 MOV EAX,DWORD PTR DS:[6610EE7C]
66106BFE 53 PUSH EBX
66106BFF 55 PUSH EBP
66106C00 56 PUSH ESI
66106C01 57 PUSH EDI
66106C02 8BDA MOV EBX,EDX
66106C04 8BF1 MOV ESI,ECX
66106C06 50 PUSH EAX
66106C07 FF15 B8100066 CALL DWORD PTR DS:[<&KERNEL32.TlsGetValu>; kernel32.TlsGetValue
66106C0D 66:8B2B MOV BP,WORD PTR DS:[EBX]
66106C10 8D78 50 LEA EDI,DWORD PTR DS:[EAX+50]
66106C13 66:8B06 MOV AX,WORD PTR DS:[ESI]
66106C16 66:83FD 08 CMP BP,8
66106C1A 73 26 JNB SHORT MSVBVM60.66106C42
66106C1C 66:3D 0800 CMP AX,8
66106C20 73 20 JNB SHORT MSVBVM60.66106C42
66106C22 8B13 MOV EDX,DWORD PTR DS:[EBX]
66106C24 8B43 04 MOV EAX,DWORD PTR DS:[EBX+4]
66106C27 8BCE MOV ECX,ESI
66106C29 8911 MOV DWORD PTR DS:[ECX],EDX
66106C2B 8B53 08 MOV EDX,DWORD PTR DS:[EBX+8]
66106C2E 8941 04 MOV DWORD PTR DS:[ECX+4],EAX
66106C31 8B43 0C MOV EAX,DWORD PTR DS:[EBX+C]
66106C34 8951 08 MOV DWORD PTR DS:[ECX+8],EDX
66106C37 8941 0C MOV DWORD PTR DS:[ECX+C],EAX
66106C3A 8BC6 MOV EAX,ESI
66106C3C 5F POP EDI
*************************************************************
66106CBF 3BDE CMP EBX,ESI
66106CC1 0F84 04010000 JE MSVBVM60.66106DCB
66106CC7 8BCE MOV ECX,ESI
66106CC9 E8 7E7DFFFF CALL MSVBVM60.__vbaFreeVar
66106CCE 8B5B 08 MOV EBX,DWORD PTR DS:[EBX+8]
66106CD1 66:C706 0800 MOV WORD PTR DS:[ESI],8
66106CD6 85DB TEST EBX,EBX
66106CD8 C746 08 0000000>MOV DWORD PTR DS:[ESI+8],0
66106CDF 0F84 E6000000 JE MSVBVM60.66106DCB
66106CE5 75 1C JNZ SHORT MSVBVM60.66106D03
66106CE7 33C0 XOR EAX,EAX
66106CE9 50 PUSH EAX
66106CEA 53 PUSH EBX
66106CEB FF15 F4190066 CALL DWORD PTR DS:[<&OLEAUT32.#150>] ; OLEAUT32.SysAllocStringByteLen
到这里就会看到我刚才写入的“123456987”了 66106CD8 C746 08 0000000>MOV DWORD PTR DS:[ESI+8],0
不要管它坚持就是胜利,接用着F8走几步,又来到如下地方
00424C5C . C785 04FFFFFF>MOV DWORD PTR SS:[EBP-FC],wordcard.0040B>
00424C66 . C785 FCFEFFFF>MOV DWORD PTR SS:[EBP-104],8
00424C70 . 8D95 FCFEFFFF LEA EDX,DWORD PTR SS:[EBP-104]
00424C76 . 8D8D 3CFFFFFF LEA ECX,DWORD PTR SS:[EBP-C4]
00424C7C . FF15 74124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarDu>; MSVBVM60.__vbaVarDup
00424C82 . 8D95 0CFFFFFF LEA EDX,DWORD PTR SS:[EBP-F4]
00424C88 . 52 PUSH EDX
00424C89 . 8D85 1CFFFFFF LEA EAX,DWORD PTR SS:[EBP-E4]
到这一行就可以在数据窗口看到真正的注册码了
00424C5C . C785 04FFFFFF>MOV DWORD PTR SS:[EBP-FC],wordcard.0040B>
如下
0040BC2C=wordcard.0040BC2C
Stack SS:[0012F534]=0018FA4C, (UNICODE "77p4mf81r8357")
这个77p4mf81r8357就是注册码了,我的机器码是27090435875640
你学会了吗?
我写这个的目的只是想给破解无门的初学者一点鼓舞,我也是一个初学者,2004,6,14才拥有了第一台属于自己的电脑
。但请不要误会我学电脑却有5年多了,都是在网吧和书店学会的(包括JAVA,C之类),哥们没见过像我这样的网吧狂人吧,那个网吧老板也怕了我,呵呵!!经常搞得不能开机。顺便说一下我也是同济医学院的,不知看雪老大是不是在武汉读的,最后:请记住坚持就会成功!
网管,我以前申请的doa007(也可能是doc007),不知为什么能进论坛但不能发帖,我比较喜欢以前的帐号
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!