CDSPACE1.95破解手記(專為初學者而作!) (8千字)

看雪資料發表於2000-12-30

CDSPCE1.95破解紀錄
這個軟體本來在《看雪論壇精華2》中,菜鳥大師已經寫了一片很詳細的破解紀錄,可是在我自己破解的過程中
,發現還有些事情沒講清楚,特別是看註冊碼的地方,"為什麼我在這裡D  EAX就可以看到註冊碼?"這可能是廣大
初學者在看破解文章的時候最搞不清楚的地方.可是,恕我孤陋寡聞,把這一點講得很清楚的好像只有城市獵人,
說道這裡,我就不得不提提城市獵人的《探索雜誌》,這的確是一分很好的雜誌,尤其是前幾期的《初學天地》欄目,可能是我見到的寫的最好的入門教程了,所以,廣大想學破解的朋友們,花點時間到城市獵人的網站
上去下載它的前幾期雜誌讀一讀我覺得是最好的入門方法了!好了,廢話就說到這裡,下面開始我們的正題。
REDAY?GO!
1。架起TRW2000,LOAD  CDSPACE,調出註冊視窗,隨便輸入一些資訊。我的輸入如下所示,你完全不必和我
  的一樣。
    NAME:luoyi
    REGISTRATION CODE:654321
2。CTRL+M,切入TRW2000,下斷點“G GETWINDOWTEXT”,“G”回到程式中。
3。一按“OK”,我們就又回到TRW2000了。
4。PMODULE。你將看到如下程式碼:
015F:00409322 E80B680000      CALL    `MFC42!ord_00000942`
015F:00409327 83C664          ADD      ESI,BYTE +64  <-------------你停在這裡!
015F:0040932A 56              PUSH    ESI
015F:0040932B 68EB030000      PUSH    DWORD 03EB
015F:00409330 57              PUSH    EDI
015F:00409331 E8FC670000      CALL    `MFC42!ord_00000942`
015F:00409336 5F              POP      EDI
015F:00409337 5E              POP      ESI
015F:00409338 C20400          RET      04
稍有一點asm知識的就可以看出,這一段程式碼對我們破解沒有什麼作用,因為它沒有跳轉,所以我們就不必和它費事,F12跳過即可。可是跳出來以後,發現還是沒有跳轉,所以我們就繼續F12。兩次以後,來到了這裡:

015F:00409570 E829660000      CALL    `MFC42!ord_000018BE`
015F:00409575 8D4C2410        LEA      ECX,[ESP+10]            <--------從這裡出來了!
015F:00409579 E89C650000      CALL    `MFC42!ord_0000021C`
015F:0040957E 33F6            XOR      ESI,ESI
015F:00409580 8D4C2414        LEA      ECX,[ESP+14]
015F:00409584 8974242C        MOV      [ESP+2C],ESI
015F:00409588 E88D650000      CALL    `MFC42!ord_0000021C`
015F:0040958D 8B4760          MOV      EAX,[EDI+60]
015F:00409590 8D6F60          LEA      EBP,[EDI+60]
015F:00409593 C644242C01      MOV      BYTE [ESP+2C],01
015F:00409598 8378F806        CMP      DWORD [EAX-08],BYTE +06
015F:0040959C 7D0C            JNL      004095AA
到了這裡以後,就不能再F12了,為什麼呢?因為有這一句的存在!
015F:00409598 8378F806        CMP      DWORD [EAX-08],BYTE +06
015F:0040959C 7D0C            JNL      004095AA
這是一個有條件跳轉,我們當然不能放過它!於是,在這一段裡我們改用F10跟蹤。一直就到了這個跳轉,這裡是比較什麼來跳的呢?我們D EAX一下,發現是: luoyi,那麼[EAX-8],又是什麼呢?一般在這種情況下,
[EAX-8]裡存放的都是[EAX]中儲存的字串的長度,這一點,就是靠你經驗的積累了,當然了,如果你的API
夠熟的話,就當我在說廢話吧,呵呵。。。。於是在這裡,我們知道了名字的長度要大於或等於6才行。好了,回去改改吧,我改的是:    NAME:luoyiluo,這裡有句話得提醒新手們,回去之前,一定不要忘了
在你跟到的地方用F9設斷,否則,輸完資訊後再想回來,又得累死你的顯示器了。呵呵。。廢話少說,我們繼續,名字這一關已經過了,下面我們繼續走:
015F:0040959E 56              PUSH    ESI
015F:0040959F 56              PUSH    ESI
015F:004095A0 6810884100      PUSH    DWORD 00418810
015F:004095A5 E902010000      JMP      004096AC
015F:004095AA 8B5764          MOV      EDX,[EDI+64]
015F:004095AD 8D5F64          LEA      EBX,[EDI+64]
015F:004095B0 837AF810        CMP      DWORD [EDX-08],BYTE +10
015F:004095B4 740C            JZ      004095C2
這裡又來了一個比較,比較什麼呢?有了我上面說的基礎,你應該很容易就猜到了吧?D EDX,發現是:
654321,無疑,這裡就是判斷註冊碼的長度了,註冊碼的長度得等於10才正確。別急,你還得搞清楚一個問題
這裡的10和我們平常說的10可是有大大的不同,這裡是16進位制,這裡的10就是我們平時說的16,這一點可經常
讓一些初學破解的人栽跟頭呢。(比如我。。呵呵。。。)於是,我們又回到程式中,改資訊如下:(你不會忘記設斷點吧?)
    REGISTRATION CODE :0987654321123456
好了,長度都對了,下面我們繼續走:
015F:004095B6 56              PUSH    ESI
015F:004095B7 56              PUSH    ESI
015F:004095B8 68FC874100      PUSH    DWORD 004187FC
015F:004095BD E9EA000000      JMP      004096AC

015F:004095C2 33C9            XOR      ECX,ECX      <-------長度正確了,我們就走到這裡來了!--|
015F:004095C4 8A040A          MOV      AL,[EDX+ECX]                                          |
015F:004095C7 3C30            CMP      AL,30          這一段比較,看你的註冊碼中有沒有        |
015F:004095C9 7C04            JL      004095CF        一些特殊的字元,你應該好好看看,        | 015F:004095CB 3C39            CMP      AL,39          這可是鍛鍊ASM能力的好機會!            |
015F:004095CD 7E10            JNG      004095DF                                              |
015F:004095CF 3C41            CMP      AL,41                                                |
015F:004095D1 0F8CC7000000    JL      NEAR 0040969E                                        |
015F:004095D7 3C46            CMP      AL,46                                                |
015F:004095D9 0F8FBF000000    JG      NEAR 0040969E                                        | 015F:004095DF 41              INC      ECX                                                  |
015F:004095E0 83F908          CMP      ECX,BYTE +08                                          |
015F:004095E3 7CDF            JL      004095C4  <------------------------------------------|
.............
.............
015F:00409644 8B03            MOV      EAX,[EBX]
015F:00409646 8B542410        MOV      EDX,[ESP+10]
015F:0040964A 50              PUSH    EAX
015F:0040964B 52              PUSH    EDX
015F:0040964C FF158C264100    CALL    `MSVCRT!_mbscmp`    <------------------!!!!!!!!
015F:00409652 83C408          ADD      ESP,BYTE +08
015F:00409655 85C0            TEST    EAX,EAX
015F:00409657 6A00            PUSH    BYTE +00
015F:00409659 6A00            PUSH    BYTE +00
015F:0040965B 754A            JNZ      004096A7          <-------------跳過去就玩完了.呵呵...
..................
..................
015F:0040969C EB13            JMP      SHORT 004096B1  <----------正確的時候才能走到這兒跳
015F:0040969E 56              PUSH    ESI
015F:0040969F 56              PUSH    ESI
015F:004096A0 68B0874100      PUSH    DWORD 004187B0
015F:004096A5 EB05            JMP      SHORT 004096AC
015F:004096A7 6890874100      PUSH    DWORD 00418790
015F:004096AC E8E1640000      CALL    `MFC42!ord_000004B0`  <------------出錯處!

015F:004096B1 8D4C2414        LEA      ECX,[ESP+14]
015F:004096B5 C644242C00      MOV      BYTE [ESP+2C],00
015F:004096BA E843640000      CALL    `MFC42!ord_00000320`
015F:004096BF 8D4C2410        LEA      ECX,[ESP+10]
015F:004096C3 C744242CFFFFFFFF MOV      DWORD [ESP+2C],FFFFFFFF
015F:004096CB E832640000      CALL    `MFC42!ord_00000320`
015F:004096D0 8B4C2424        MOV      ECX,[ESP+24]
015F:004096D4 5F              POP      EDI
015F:004096D5 5E              POP      ESI
015F:004096D6 5D              POP      EBP
015F:004096D7 64890D00000000  MOV      [FS:00],ECX
015F:004096DE 5B              POP      EBX
015F:004096DF 83C420          ADD      ESP,BYTE +20
015F:004096E2 C3              RET   
來到這裡以後,有感覺的話,可能已經可以感覺到該是作關鍵性的比較的時候了。讓我們PAGE DOWN幾下,???
看到我打"!!!!"的那個比較了了麼?這麼明顯的事,不用我再教了吧?
015F:0040964A 50              PUSH    EAX
015F:0040964B 52              PUSH    EDX
015F:0040964C FF158C264100    CALL    `MSVCRT!_mbscmp`    <------------------!!!!!!!!
015F:00409652 83C408          ADD      ESP,BYTE +08
015F:00409655 85C0            TEST    EAX,EAX
015F:00409657 6A00            PUSH    BYTE +00
015F:00409659 6A00            PUSH    BYTE +00
015F:0040965B 754A            JNZ      004096A7   
D EAX,D EDX,你就可以看到正確的註冊碼和你輸入的註冊碼了。這裡你又可以看到城市獵人的《探索雜誌》
中總結的經典比較形勢
MOV EDX,[  ]
MOV EAX,[  ]
CALL XXXXXXXX
TEST XXX,XXX
JZ/JNZ  XXXXXXXX
的威力了吧?呵呵。。。所以我說,那是一份很好的雜誌吧?
好了,寫到這裡,CDSPACE的破解也就說完了,相信應該不會有人說看不懂吧?我是盡力把東西寫的好懂一點
,儘量向大家講清楚“為什麼”而不是告訴你“是什麼”就完事了,我自己也是個初學者,深切的體會到初學者在跟程式的時候的種種迷惑,我只是盡我所能把我的經驗講述出來,讓大家少走一點彎路。希望這樣的文章
能夠得到大家的喜歡。
另外:註冊後,程式把註冊資訊放在:
HKEY_LOCAL_MACHINE\SOFTWARE\SPACE INTERNATION\CDSPACE\SETTINGS\NAME              註冊名
HKEY_LOCAL_MACHINE\SOFTWARE\SPACE INTERNATION\CDSPACE\SETTINGS\EVALUATION        註冊碼
刪除這兩個鍵或是改變它們的值都可以使程式回到未註冊狀態,你又可以繼續練習!
請多指教!
作者:夜月(“破!”這個名字我自己都覺得不太好聽,所以改了,呵呵。。。。希望大家能記得我)
E-MAIL: luoyi.ly@263.net
oicq:36606500
歡迎大家以各種方式和我聯絡!

相關文章