• 标 题:CDSPACE1.95破解手记(专为初学者而作!) (8千字)
  • 作 者:夜月
  • 时 间:2000-12-30 17:00:42
  • 链 接:http://bbs.pediy.com

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
欢迎大家以各种方式和我联系!