我的第二篇破文------wordcard 3.10的破解明細

看雪資料發表於2004-08-30

我的第二篇破文------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),不知為什麼能進論壇但不能發帖,我比較喜歡以前的帳號

相關文章