初級~~初級~~~初初級~~~KanjiWeb 3.0 (漢字通)破解~~~~~~~~~ (8千字)

看雪資料發表於2001-03-11

初級~~初級~~~初初級


軟體名稱:KanjiWeb 3.0 (漢字通)--臺灣出的多語言支援軟體,任何Windows 無需漢字版本,均可讀寫簡體中文、
        繁體中文、日文。大小:1812KB 安裝後也只有 2920KB(自帶11種輸入法)
下載地址: ftp.s2net.org.tw/pub/kanjiweb 這兩個是官方網址,這軟體到處都是,搜尋一下吧,我不記得地址啦
          Http://kanjiweb.com
註冊形式:在Register選單裡有個REGISTERED NO:1242637882(我這裡是這個數,每次安裝都不同),按RegisterI
          程式要求輸入Serial No。程式肯定要用到上邊這個數來運算的,到底是如何呢???
破解原因:這個程式我一直都在用,因為我臺電腦很低階(和我一樣)MMX166而已,這個小軟體就很合適我用啦,雖然
        它的字型檔不夠大,但也足夠應付啦,另外它很穩定,我的電腦用其它類似的軟體在某些時候一定會出錯,用
        這個就絕對沒事。其實這個軟體我一早就破掉啦,在網上找的時候看到別人留下的SN,抄下一用,錯的!看
        來這個RN是重點,這軟體很容易破,看下面的程式碼就知道啦,所以我當時只花了幾分鐘就搞掂了,但卻沒有
        把過程記下來,而且我想為這個簡單的東西做個序號產生器,於是有了這篇文章。但為此我卻要重新安裝它,因          為我根本找不到它的已註冊標誌在哪,有誰找到請指點一二。

下面有兩種方法可以註冊成功:一是找到註冊碼;二是半暴力破解(不用真正改動程式本身,只用改一次記憶體裡的程式碼就OK啦),大家自己選擇(我是完美主義追求者,儘量不用暴力),好啦請先從39EC處看起,因為這裡是我最先發現的要害(請跟著我的思路走因為我是從後面往前找的)。另外這個程式是16位的,有點落後的感覺,除錯時很不習慣。

:0001.39B4 8D8626FE              lea ax, [bp+FE26]
:0001.39B8 16                    push ss
:0001.39B9 50                    push ax
:0001.39BA FF76F6                push word ptr [bp-0A]
:0001.39BD 9AEE07093A            call 0001.07EE<----此call是運算RN的地方,但~~~~~唉~呼叫了系統call
:0001.39C2 83C408                add sp, 0008
:0001.39C5 8DB626FE              lea si, [bp+FE26]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.39D3(C)
|
:0001.39C9 803486                xor byte ptr [si], 86<---此處用86 xor 記憶體[si]裡的數就得到真碼啦
-------------------------------------------------------------------------------------------------
2.....此時我記憶體裡的數是:B7 CC C9 C9 DF D0 C7 DF F4每位數與86相xor就得到了一個共9位的註冊碼,真碼就放在[si]中替代了上面的這些數。我想這幾個數一定是根據那個REGISTERED NO運算得來的,那如果找到了程式是如何運算那個RN的不就可以寫出序號產生器啦嗎?我用了個蠢辦法來確定,我重新註冊,當然是填入假註冊碼,因為我還不想它註冊成功,然後中斷,d剛才[si]的地方然後一直按F10,當經過39BD這個call後[si]就被寫上以上的資料啦,但是當我跟進去的時候發現程式呼叫了call KERNEL.DOS3CALL這個call來運算以上資料的這個怎麼跟呢,我在此就被阻了,這裡請高手指點~~~~~~
-------------------------------------------------------------------------------------------------
:0001.39CC 46                    inc si
:0001.39CD 8D862FFE              lea ax, [bp+FE2F]
:0001.39D1 3BF0                  cmp si, ax
:0001.39D3 72F4                  jb 39C9
:0001.39D5 8DBE26FE              lea di, [bp+FE26]
:0001.39D9 8D76B6                lea si, [bp-4A]
:0001.39DC 8CD1                  mov cx, ss
:0001.39DE 8EC1                  mov es, cx
:0001.39E0 B9FFFF                mov cx, FFFF
:0001.39E3 33C0                  xor ax, ax
:0001.39E5 F2                    repnz
:0001.39E6 AE                    scasb
:0001.39E7 F7D1                  not cx
:0001.39E9 2BF9                  sub di, cx
:0001.39EB F3                    repz
:0001.39EC A6                    cmpsb  <----比較註冊碼的地方,這條語句很明顯吧!!
-------------------------------------------------------------------------------------------------
1......除錯時一樣是用bpx hmemcpy,bd,pmodule來到程式領空(這裡不能直接設bpx 39EB,因為程式是16位的,16位的程式地址是這樣的:前面部分是段地址,後面部分是偏移地址,而段地址不是固定的,所以要用bpx hmemcpy來做個橋樑才能找到程式的領空---我這樣說對嗎??),一直按F10想看它幾時出錯,誰知走到此處我就停下來啦,因為這條語句太刺眼啦,好啦馬上d ds:si看到了我輸入的67676767,再d ds:di就可以看到真的註冊碼1JOOYVAYb啦,試一試~~~~Ok啦~~~當然因為我想做個序號產生器,所以要研究那個真註冊碼是怎麼來的啦:-)於是往上看39C9處有可疑喲~~~~~
-------------------------------------------------------------------------------------------------
:0001.39ED 7405                  je 39F4
:0001.39EF 1BC0                  sbb ax, ax
:0001.39F1 1DFFFF                sbb ax, FFFF

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.39ED(C)
|
:0001.39F4 0BC0                  or ax, ax
:0001.39F6 7542                  jne 3A3A  <----看這個call如果它不跳的話下面會不會還有呢??
-------------------------------------------------------------------------------------------------
4.....把它改成je 3A3A就不會跳啦,往下執行就註冊成功了,但要退出程式再次進入才行,這時Register選單就灰掉啦,程式作了標記,但我找不到!!!不過說真的我到現在都還不知道此軟體如果不註冊的話會有什麼限制~~~~~呵呵~~~破了再說~~~~~~~
-------------------------------------------------------------------------------------------------
:0001.39F8 C646FBFF              mov byte ptr [bp-05], FF
:0001.39FC 33F6                  xor si, si
:0001.39FE 56                    push si
:0001.39FF 66FF76FC              push word ptr [bp-04]
:0001.3A03 FF76F6                push word ptr [bp-0A]
:0001.3A06 9A1A071B3A            call 0001.071A
:0001.3A0B 83C408                add sp, 0008
:0001.3A0E 6A04                  push 0004
:0001.3A10 8D46EE                lea ax, [bp-12]
:0001.3A13 16                    push ss
:0001.3A14 50                    push ax
:0001.3A15 FF76F6                push word ptr [bp-0A]
:0001.3A18 9A66092D3A            call 0001.0966
:0001.3A1D 83C408                add sp, 0008
:0001.3A20 6A01                  push 0001
:0001.3A22 8D46FB                lea ax, [bp-05]
:0001.3A25 16                    push ss
:0001.3A26 50                    push ax
:0001.3A27 FF76F6                push word ptr [bp-0A]
:0001.3A2A 9A6609413A            call 0001.0966
:0001.3A2F 83C408                add sp, 0008
:0001.3A32 EB1F                  jmp 3A53  <----上面那個call如果不跳的話就只有這個啦,而且還是一定
                                                會跳的,跳到了出錯資訊的後面去啦,上面的call就是要
                                                害啦,往上去改掉它



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.3937(C)
|
:0001.3A34 8B76F8                mov si, [bp-08]
:0001.3A37 EB34                  jmp 3A6D


:0001.3A39 90                    nop

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.39F6(C)      <------從此處跳過來的~~~往上找此行
|
:0001.3A3A BE0100                mov si, 0001
:0001.3A3D FF760E                push word ptr [bp+0E]
:0001.3A40 68473A                push SEG ADDR of Segment 0001

* Possible StringData Ref from Code Seg 001 ->"SORRY !! ERROR SERIAL NO"<----出錯資訊!!!
-------------------------------------------------------------------------------------------------
3.....其實現在此軟體已破掉了,現在說說用W32dasm來破解吧,相對來說應該容易一點。上面這個出錯資訊可以在W32dasm裡的資料串裡找到,只有一個地方。要想程式避開此處就要往前找啦
-------------------------------------------------------------------------------------------------
                                  |
:0001.3A43 68E45E                push 5EE4
:0001.3A46 685D3A                push SEG ADDR of Segment 0001

* Possible StringData Ref from Code Seg 001 ->"ERROR !!"
                                  |
:0001.3A49 68DA5E                push 5EDA
:0001.3A4C 6A00                  push 0000
:0001.3A4E 9A04170000            call USER.MESSAGEBOX

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.3A32(U)
|
:0001.3A53 66FF76F2              push word ptr [bp-0E]
:0001.3A57 FF76F6                push word ptr [bp-0A]
:0001.3A5A 9ADC11683A            call 0001.11DC
:0001.3A5F 83C406                add sp, 0006
:0001.3A62 FF76F6                push word ptr [bp-0A]
:0001.3A65 9AC6105D38            call 0001.10C6
:0001.3A6A 83C402                add sp, 0002


                                                                          24:07 2001-3-10

相關文章