哈哈,我又上來了,cd-check的文章不知有沒有人看?.......這次改貼一篇有關注冊碼的譯文吧! (3千字)

看雪資料發表於2000-09-09

ADD/Remove v2.0
(計算系列號)
破解人:punisher
軟體的保護機制:你必須填入User Name和Registration Code。註冊碼是用你輸入的名字計算出來的。
破解過程:我試過用Wdasm32來反彙編,但失敗了,所以我用SOFTICE跟蹤程式以便發現註冊碼。
          一啟動程式就遇上一個破框要你註冊,破框上有一組按鈕其中包括'Register Later',點選它會進入程式主視窗。看一下標題欄,有'UNREGISTERED VERSION'的字樣。點選"EXIT",退出程式時又跳出剛才的那個破框。
          讓我們解決它吧!
          啟動程式,在破框中鍵入你的名字和一個假的註冊碼,然後按Ctrl-D啟用SOFTICE,下斷點GetWindowTextA,再按Ctrl-D回到破框。這時就可以點選"unlock",程式會被SOFTICE攔截在GetWindowTextA中,因為程式要有倆個CALL去獲取我們的名字和註冊碼,所以我們現在在SOFTICE的命令窗中輸入"X"並按回車以略過第一個CALL。
          馬上,SOFTICE第二次中斷在GetWindowTextA中,按F11步出這個CALL,然後按F12來到這裡:
      call  004053B6
      push  00408360                    ; 你在這裡
      lea  ecx, [ebp-18]
      call  00405386
      mov  dword ptr[ebp-04], 0000000
      mov  eax, [eax]
      push  eax
      call  [0040A810]
      mov  dword ptr[ebp-04], FFFFFFFF
      add  esp, 08
      cmp  eax, 01
      mov  eax, [ebp-14]
      sbb  [ebp-14], eax
      neg  dword ptr[ebp-14]
      call  00401A33
      cmp  dword ptr[ebp-14], 00
      jz    00401949                    ; 跳到計算註冊碼的CALL
        在記憶體中搜尋一下你的假註冊碼吧,只要鍵入:
        s 0 LFFFFFFF '15151515'(我是用15151515)
        你會在資料窗中發現你輸入的東東。按住ALT和PAGEDOWN組合鍵,直到在資料窗中看到"UNREGISTERED USER",在它之前你會看到四個數字並有一個破折號"-",這是註冊碼的第一部分。記下來,可別忘了破折號哦!
現在要跟入"jz 00401949"這個跳轉指令了,你會來到這裡:
      call  00401620            ; 這個CALL計算註冊碼的第二部分
      test  eax, eax           
      jz    004019F8            ; <- 若在這裡跳就慘了
        按F8追入CALL 00401620,按F10跟蹤到這裡:
      mov  eax, [004835C ]
      lea  ecx, [ebp-10
      mov  al, [edx + eax]    ; 這是註冊碼的第二部分的第一個字元
        在光條帶過mov al, [edx + eax]時鍵入命令:
    ? al
        記下al的ASCII碼內容,不管是數字還是字母。
        繼續按F10來到這裡:
    Test  byte ptr[ebp-10] 01
    jnz  00401728
    mov  eax, [ebp-10]
    mov  al, [eax+00408360]  ; 在al中存入你的名字的第一個字母
    cmp  al, 7F
    jg    00401773
    cmp  al, 20
    jl    00401784
    cbw
    mov  cl, 02
    idiv  cl                    ;將該字母的值除以2
    add  al, 20                ;再加上20
    cmp  al, 61
    jge  004016FA
    add  al, 06
    cmp  al, 39
    jle  00401704
    cmp  al, 41
    add  al, 08                  ;用 ? al 取得運算後的字元
    push eax
        以上就是註冊碼的計算過程,它取出你的名字的第一個字元,將它除以2,然後加上20。若結果是字母就存起來,若不是就加上8後再轉換。接著,程式會略過第二個字元而用第三個字元進行同樣的運算,直到沒有字元為止。
        在算出註冊碼後,程式從CALL中返回,測試EAX的值,如果是零就跳轉到出錯對話方塊;非零就在登錄檔中存入你的註冊碼和名字。
        為了取得註冊碼,你就必須一直在CALL中跟蹤,在"add al,08"指令時用'? al'並記下al的內容。跟蹤完這個CALL後再將註冊碼的第一部分與這部分的內容連起來。注意,註冊碼的長度是取決於你名字的長度。
        我用的名字是Punisher,我的註冊碼=6582-mHWYR
        你自己試試吧,快去擁有屬於你的註冊碼!

相關文章