首页
社区
课程
招聘
自己写了 一个 CR-Game0.6 (6+1级) 的程序
发表于: 2004-11-22 20:10 10313

自己写了 一个 CR-Game0.6 (6+1级) 的程序

2004-11-22 20:10
10313
收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一开始就觉得楼主有点阴险哦刚开始就给了一个假的level000的serial   JPL-168-39,其实这个crackme没有level 0,哪个是一个假的serial,我刚开始的时候就上当了啊,转了老半天,后来才明白的。下面就是我的过程看看咯(我破的是0.5,楼主的板本升级好快啊,我看到level6)
  所用工具:OD
每次破解成功一级level就会写一次文件CrG.ini,下次程序就会去读取这个文件来决定switch
00402261   |.  6A 0A          push 0A
00402263   |.  68 4C404000    push CR-Game0.0040404C
00402268   |.  E8 93EDFFFF    call CR-Game0.00401000            ;这里转换eax到level
0040226D   |.  40             inc eax                       ;  Switch (cases -1..5)
0040226E   |.  83F8 06        cmp eax,6
00402271   |.  73 52          jnb short CR-Game0.004022C5
00402273   |.  83F8 01        cmp eax,1
00402276   |.  75 0D          jnz short CR-Game0.00402285
00402278   |.  FF75 08        push dword ptr ss:[ebp+8]     ; /Arg1; Case 0 of switch 0040226D
0040227B   |.  E8 93F7FFFF    call CR-Game0.00401A13        ; \CR-Game0.00401A13
00402280   |.  E9 D2000000    jmp CR-Game0.00402357
00402285   |>  83F8 02        cmp eax,2
00402288   |.  75 0A          jnz short CR-Game0.00402294
0040228A   |.  E8 4BF8FFFF    call CR-Game0.00401ADA        ;  Case 1 of switch 0040226D
0040228F   |.  E9 C3000000    jmp CR-Game0.00402357
00402294   |>  83F8 03        cmp eax,3
00402297   |.  75 0A          jnz short CR-Game0.004022A3
00402299   |.  E8 C0F8FFFF    call CR-Game0.00401B5E        ;  Case 2 of switch 0040226D
0040229E   |.  E9 B4000000    jmp CR-Game0.00402357
004022A3   |>  83F8 04        cmp eax,4
004022A6   |.  75 0A          jnz short CR-Game0.004022B2
004022A8   |.  E8 68F9FFFF    call CR-Game0.00401C15        ;  Case 3 of switch 0040226D
004022AD   |.  E9 A5000000    jmp CR-Game0.00402357
004022B2   |>  83F8 05        cmp eax,5
004022B5   |.  0F85 9C000000  jnz CR-Game0.00402357
004022BB   |.  E8 80FAFFFF    call CR-Game0.00401D40        ;  Case 4 of switch 0040226D
004022C0   |.  E9 92000000    jmp CR-Game0.00402357
004022C5   |>  83F8 06        cmp eax,6
004022C8   |.  75 0A          jnz short CR-Game0.004022D4
004022CA   |.  E8 67FBFFFF    call CR-Game0.00401E36        ;  Case 5 of switch 0040226D
004022CF   |.  E9 83000000    jmp CR-Game0.00402357
004022D4   |>  E8 81F6FFFF    call CR-Game0.0040195A        ;  Default case of switch 0040226D

level 1:
0040227B   |.  E8 93F7FFFF    call CR-Game0.00401A13        ; \CR-Game0.00401A13
这一句call跳到了level1
00401A13   /$  55             push ebp
00401A14   |.  8BEC           mov ebp,esp
00401A16   |.  83C4 F4        add esp,-0C
00401A19   |.  8D45 F4        lea eax,dword ptr ss:[ebp-C]
00401A1C   |.  50             push eax                           ; /lParam
00401A1D   |.  6A 0C          push 0C                           ; |wParam = C
00401A1F   |.  6A 0D          push 0D                           ; |Message = WM_GETTEXT
00401A21   |.  FF35 2C404000  push dword ptr ds:[40402C]       ; |hWnd = NULL
00401A27   |.  E8 BE120000    call <jmp.&user32.SendMessageA>  ; \SendMessageA
00401A2C   |.  83F8 03        cmp eax,3                                ;serial长度要大于3
00401A2F   |.  0F8E 9F000000  jle CR-Game0.00401AD4
00401A35   |.  52             push edx
00401A36   |.  8D55 F4        lea edx,dword ptr ss:[ebp-C]
00401A39   |.  807A 07 20     cmp byte ptr ds:[edx+7],20        ;这里比较了serial的第7位是不是空格
00401A3D   |.  75 04          jnz short CR-Game0.00401A43
00401A3F   |.  8042 0A 1F     add byte ptr ds:[edx+A],1F        ;是serial的第10位+1F
00401A43   |>  5A             pop edx
00401A44   |.  EB 0B          jmp short CR-Game0.00401A51
00401A46   |.  4A 50 4C 2D 31>ascii "JPL-168-39",0
00401A51   |>  68 461A4000    push CR-Game0.00401A46                    ;  ASCII "JPL-168-39" 假的
00401A56   |.  8D45 F4        lea eax,dword ptr ss:[ebp-C]
00401A59   |.  50             push eax
00401A5A   |.  E8 22F8FFFF    call CR-Game0.00401281          ;这个call就是level的关键了(假的)
00401A5F   |.  0BC0           or eax,eax        ;eax不能为0否则就跳到了假的成功00401A87
00401A61   |.  75 4A          jnz short CR-Game0.00401AAD  ;这里要跳
00401A63   |.  EB 22          jmp short CR-Game0.00401A87
00401A65   |.  43 6F 6E 67 72>ascii "Congratulation! "
00401A75   |.  59 6F 75 20 70>ascii "You pass Level 0"
00401A85   |.  21 00          ascii "!",0
00401A87   |>  EB 0C          jmp short CR-Game0.00401A95
00401A89   |.  43 52 2D 47 61>ascii "CR-Game vXO",0
00401A95   |>  6A 00          push 0                                    ; /Style = MB_OK|MB_APPLMODAL
00401A97   |.  68 891A4000    push CR-Game0.00401A89                    ; |Title = "CR-Game vXO"
00401A9C   |.  68 651A4000    push CR-Game0.00401A65                    ; |Text = "Congratulation! You pass Level 0!"
00401AA1   |.  FF75 08        push dword ptr ss:[ebp+8]                 ; |hOwner
00401AA4   |.  E8 23120000    call <jmp.&user32.MessageBoxA>            ; \MessageBoxA
00401AA9   |.  33C0           xor eax,eax
00401AAB   |.  EB 29          jmp short CR-Game0.00401AD6
00401AAD   |>  EB 0C          jmp short CR-Game0.00401ABB
00401AAF   |.  43 52 2D 47 61>ascii "CR-Game vXO",0
00401ABB   |>  68 AF1A4000    push CR-Game0.00401AAF                    ;  ASCII "CR-Game vXO"(真)
00401AC0   |.  8D45 F4        lea eax,dword ptr ss:[ebp-C]
00401AC3   |.  50             push eax
00401AC4   |.  E8 B8F7FFFF    call CR-Game0.00401281        ;关键的call
00401AC9   |.  0BC0           or eax,eax        ;这里出来的eax就要为0 了
00401ACB   |.  75 07          jnz short CR-Game0.00401AD4
00401ACD   |.  B8 01000000    mov eax,1
00401AD2   |.  EB 02          jmp short CR-Game0.00401AD6
00401AD4   |>  33C0           xor eax,eax
00401AD6   |>  C9             leave
00401AD7   \.  C2 0400        retn 4
  看完了,那就要逆一下了,CR-Game vXO的第7位是空格,第10位的'O'就要减掉1F,'O'-1F='0',所以最后一位要是0。
最后的level 1就是CR-Game vX0。
2004-11-24 08:52
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
level 2:
00401ADA   /$  55             push ebp
00401ADB   |.  8BEC           mov ebp,esp
00401ADD   |.  83C4 F4        add esp,-0C
00401AE0   |.  53             push ebx
00401AE1   |.  8D45 F6        lea eax,dword ptr ss:[ebp-A]
00401AE4   |.  50             push eax                                  ; /lParam
00401AE5   |.  6A 0A          push 0A                                   ; |wParam = A
00401AE7   |.  6A 0D          push 0D                                   ; |Message = WM_GETTEXT
00401AE9   |.  FF35 2C404000  push dword ptr ds:[40402C]                ; |hWnd = C04AA
00401AEF   |.  E8 F6110000    call <jmp.&user32.SendMessageA>           ; \SendMessageA
00401AF4   |.  83F8 08        cmp eax,8                serial的长度要大于8
00401AF7   |.  7E 60          jle short CR-Game0.00401B59
00401AF9   |.  8D5D F6        lea ebx,dword ptr ss:[ebp-A]  取serial,下面就是一串的逐位比较
00401AFC   |.  803B 43        cmp byte ptr ds:[ebx],43
00401AFF   |.  74 58          je short CR-Game0.00401B59
00401B01   |.  807B 01 6C     cmp byte ptr ds:[ebx+1],6C
00401B05   |.  75 52          jnz short CR-Game0.00401B59
00401B07   |.  807B 02 47     cmp byte ptr ds:[ebx+2],47
00401B0B   |.  75 06          jnz short CR-Game0.00401B13        **       
00401B0D   |.  807B 03 76     cmp byte ptr ds:[ebx+3],76
00401B11   |.  75 46          jnz short CR-Game0.00401B59
00401B13   |>  807B 04 65     cmp byte ptr ds:[ebx+4],65
00401B17   |.  75 40          jnz short CR-Game0.00401B59
00401B19   |.  807B 05 32     cmp byte ptr ds:[ebx+5],32
00401B1D   |.  75 06          jnz short CR-Game0.00401B25        **
00401B1F   |.  807B 06 31     cmp byte ptr ds:[ebx+6],31
00401B23   |.  75 34          jnz short CR-Game0.00401B59
00401B25   |>  807B 07 47     cmp byte ptr ds:[ebx+7],47
00401B29   |.  75 2E          jnz short CR-Game0.00401B59
00401B2B   |.  807B 08 43     cmp byte ptr ds:[ebx+8],43
00401B2F   |.  75 28          jnz short CR-Game0.00401B59
00401B31   |.  8043 06 3B     add byte ptr ds:[ebx+6],3B
00401B35   |.  803B 32        cmp byte ptr ds:[ebx],32
00401B38   |.  75 1F          jnz short CR-Game0.00401B59
00401B3A   |.  807B 02 65     cmp byte ptr ds:[ebx+2],65
00401B3E   |.  75 19          jnz short CR-Game0.00401B59
00401B40   |.  807B 03 76     cmp byte ptr ds:[ebx+3],76
00401B44   |.  75 13          jnz short CR-Game0.00401B59
00401B46   |.  807B 05 4C     cmp byte ptr ds:[ebx+5],4C
00401B4A   |.  75 0D          jnz short CR-Game0.00401B59
00401B4C   |.  807B 06 6C     cmp byte ptr ds:[ebx+6],6C
00401B50   |.  75 07          jnz short CR-Game0.00401B59
00401B52   |.  B8 02000000    mov eax,2
00401B57   |.  EB 02          jmp short CR-Game0.00401B5B
00401B59   |>  33C0           xor eax,eax
00401B5B   |>  5B             pop ebx
00401B5C   |.  C9             leave
00401B5D   \.  C3             retn
  看一下应该就可以看出来,里面有一些是干扰的跳转,该跳还是要跳,筛一筛
level2:     2leveL1GC
2004-11-24 08:58
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
level 3:
00401BAE   |.  51 57 45 52 54>ascii "QWERTYUIOPASDFGH"                把这两个字符串连接起来
00401BBE   |.  4A 4B 4C 5A 58>ascii "JKLZXCVBNM",0
00401BC9   |>  68 AE1B4000    push CR-Game0.00401BAE                    ; /String2 = "QWERTYUIOPASDFGHJKLZXCVBNM"
00401BCE   |.  57             push edi                                  ; |String1
00401BCF   |.  E8 74100000    call <jmp.&kernel32.lstrcpyA>             ; \lstrcpyA       
00401BD4   |.  33C9           xor ecx,ecx                edi=所连接出来的串QWERTYUIOPASDFGHJKLZXCVBNM
00401BD6   |.  EB 0B          jmp short CR-Game0.00401BE3
00401BD8   |>  803C19 61      /cmp byte ptr ds:[ecx+ebx],61
00401BDC   |.  72 04          |jb short CR-Game0.00401BE2
00401BDE   |.  802C19 20      |sub byte ptr ds:[ecx+ebx],20
00401BE2   |>  41             |inc ecx
00401BE3   |>  803C19 00       cmp byte ptr ds:[ecx+ebx],0
00401BE7   |.^ 75 EF          \jnz short CR-Game0.00401BD8        这个循环就是把name的小写字母变成大写
00401BE9   |.  8D55 A7        lea edx,dword ptr ss:[ebp-59]
00401BEC   |.  33C9           xor ecx,ecx
00401BEE   |.  33C0           xor eax,eax
00401BF0   |.  8A03           mov al,byte ptr ds:[ebx]
00401BF2   |.  EB 0E          jmp short CR-Game0.00401C02        下面的循环就开始查表了
00401BF4   |>  2C 41          /sub al,41                从变换过的name里取一个字符-41H
00401BF6   |.  8A0438         |mov al,byte ptr ds:[eax+edi]        用得到的al查刚才的串
00401BF9   |.  3A0411         |cmp al,byte ptr ds:[ecx+edx]        比较注册码与al是否一样
00401BFC   |.  75 0F          |jnz short CR-Game0.00401C0D        不一样kill
00401BFE   |.  41             |inc ecx
00401BFF   |.  8A0419         |mov al,byte ptr ds:[ecx+ebx]
00401C02   |>  0AC0            or al,al
00401C04   |.^ 75 EE          \jnz short CR-Game0.00401BF4
00401C06   |.  B8 03000000    mov eax,3
00401C0B   |.  EB 02          jmp short CR-Game0.00401C0F
00401C0D   |>  33C0           xor eax,eax
00401C0F   |>  5F             pop edi
00401C10   |.  5A             pop edx
00401C11   |.  59             pop ecx
00401C12   |.  5B             pop ebx
00401C13   |.  C9             leave
00401C14   \.  C3             retn
  看完了,我用的name是emptywin所以第一次转换:EMPTYWIN,每一位去减掉41H,所得的查字符串
QWERTYUIOPASDFGHJKLZXCVBNM      我查出来的serial是  TDHZNVOF
level 3:  name:  emptywin    serial: TDHZNVOF
2004-11-24 09:09
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
level 4:
00401CC4   |.  8A03           mov al,byte ptr ds:[ebx]
00401CC6   |.  EB 2E          jmp short CR-Game0.00401CF6
00401CC8   |>  3C 61          /cmp al,61
00401CCA   |.  72 10          |jb short CR-Game0.00401CDC
00401CCC   |.  3C 7A          |cmp al,7A
00401CCE   |.  77 0C          |ja short CR-Game0.00401CDC
00401CD0   |.  2C 61          |sub al,61                                ;  Cases 61 ('a'),62 ('b'),63 ('c'),64 ('d'),65 ('e'),66 ('f'),67 ('g'),68 ('h'),69 ('i'),6A ('j'),6B ('k'),6C ('l'),6D ('m'),6E ('n'),6F ('o'),70 ('p'),71 ('q'),72 ('r'),73 ('s'),74 ('t')... of switch 00401CF6
00401CD2   |.  8A0430         |mov al,byte ptr ds:[eax+esi]
00401CD5   |.  3A0411         |cmp al,byte ptr ds:[ecx+edx]
00401CD8   |.  75 16          |jnz short CR-Game0.00401CF0
00401CDA   |.  EB 16          |jmp short CR-Game0.00401CF2
00401CDC   |>  3C 41          |cmp al,41                                ;  Default case of switch 00401CF6
00401CDE   |.  72 10          |jb short CR-Game0.00401CF0
00401CE0   |.  3C 5A          |cmp al,5A
00401CE2   |.  77 0C          |ja short CR-Game0.00401CF0
00401CE4   |.  2C 41          |sub al,41
00401CE6   |.  8A0438         |mov al,byte ptr ds:[eax+edi]
00401CE9   |.  3A0411         |cmp al,byte ptr ds:[ecx+edx]
00401CEC   |.  75 02          |jnz short CR-Game0.00401CF0
00401CEE   |.  EB 02          |jmp short CR-Game0.00401CF2
00401CF0   |>  EB 45          |jmp short CR-Game0.00401D37
00401CF2   |>  41             |inc ecx
00401CF3   |.  8A0419         |mov al,byte ptr ds:[ecx+ebx]
00401CF6   |>  0AC0            or al,al                                 ;  Switch (cases 0..7A)
00401CF8   |.^ 75 CE          \jnz short CR-Game0.00401CC8
00401CFA   |.  8A03           mov al,byte ptr ds:[ebx]                  ;  Case 0 of switch 00401CF6
00401CFC   |.  EB 2E          jmp short CR-Game0.00401D2C
00401CFE   |>  3C 61          /cmp al,61
00401D00   |.  72 10          |jb short CR-Game0.00401D12
00401D02   |.  3C 7A          |cmp al,7A
00401D04   |.  77 0C          |ja short CR-Game0.00401D12
00401D06   |.  2C 61          |sub al,61                                ;  Cases 61 ('a'),62 ('b'),63 ('c'),64 ('d'),65 ('e'),66 ('f'),67 ('g'),68 ('h'),69 ('i'),6A ('j'),6B ('k'),6C ('l'),6D ('m'),6E ('n'),6F ('o'),70 ('p'),71 ('q'),72 ('r'),73 ('s'),74 ('t')... of switch 00401D2C
00401D08   |.  8A0438         |mov al,byte ptr ds:[eax+edi]
00401D0B   |.  3A0411         |cmp al,byte ptr ds:[ecx+edx]
00401D0E   |.  75 16          |jnz short CR-Game0.00401D26
00401D10   |.  EB 16          |jmp short CR-Game0.00401D28
00401D12   |>  3C 41          |cmp al,41                                ;  Default case of switch 00401D2C
00401D14   |.  72 10          |jb short CR-Game0.00401D26
00401D16   |.  3C 5A          |cmp al,5A
00401D18   |.  77 0C          |ja short CR-Game0.00401D26
00401D1A   |.  2C 41          |sub al,41
00401D1C   |.  8A0430         |mov al,byte ptr ds:[eax+esi]
00401D1F   |.  3A0411         |cmp al,byte ptr ds:[ecx+edx]
00401D22   |.  75 02          |jnz short CR-Game0.00401D26
00401D24   |.  EB 02          |jmp short CR-Game0.00401D28
00401D26   |>  EB 0F          |jmp short CR-Game0.00401D37
00401D28   |>  41             |inc ecx
00401D29   |.  43             |inc ebx
00401D2A   |.  8A03           |mov al,byte ptr ds:[ebx]
00401D2C   |>  0AC0            or al,al                                 ;  Switch (cases 0..7A)
00401D2E   |.^ 75 CE          \jnz short CR-Game0.00401CFE
00401D30   |.  B8 04000000    mov eax,4                                 ;  Case 0 of switch 00401D2C
00401D35   |.  EB 02          jmp short CR-Game0.00401D39
00401D37   |>  33C0           xor eax,eax
00401D39   |>  5F             pop edi
00401D3A   |.  5E             pop esi
00401D3B   |.  5A             pop edx
00401D3C   |.  59             pop ecx
00401D3D   |.  5B             pop ebx
00401D3E   |.  C9             leave
00401D3F   \.  C3             retn
  level 4和level 3差不多,这里要求len(serial)=2*len(name),然后连接了两个字符串
po lk iu jm nh yt gb vf re dc xs wq az
QW ER TY UI OP AS DF GH JK LZ XC VB NM
先是对name的小写字母查小写字符串,大写字母查大写字符串,就查了len(name)次,每次查都去和serial比较。查完第一次以后就对name的小写字母查大写字符串,大写字母查小写字符串(反过来),这样就有了len(serial)=2*len(name)的要求了啊
level 4:   name: emptywin    serial: igfcawnbTDHZNVOF
2004-11-24 09:17
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
level 5:
00401DE6   |.  33C9           xor ecx,ecx
00401DE8   |.  EB 0B          jmp short CR-Game0.00401DF5
00401DEA   |>  803C19 61      /cmp byte ptr ds:[ecx+ebx],61
00401DEE   |.  72 04          |jb short CR-Game0.00401DF4
00401DF0   |.  802C19 20      |sub byte ptr ds:[ecx+ebx],20
00401DF4   |>  41             |inc ecx
00401DF5   |>  803C19 00       cmp byte ptr ds:[ecx+ebx],0
00401DF9   |.^ 75 EF          \jnz short CR-Game0.00401DEA
00401DFB   |.  8D55 8C        lea edx,dword ptr ss:[ebp-74]
00401DFE   |.  33C9           xor ecx,ecx
00401E00   |.  8A03           mov al,byte ptr ds:[ebx]
00401E02   |.  EB 1E          jmp short CR-Game0.00401E22
00401E04   |>  51             /push ecx
00401E05   |.  33C9           |xor ecx,ecx
00401E07   |.  EB 06          |jmp short CR-Game0.00401E0F
00401E09   |>  3A0431         |/cmp al,byte ptr ds:[ecx+esi]
00401E0C   |.  74 07          ||je short CR-Game0.00401E15
00401E0E   |.  41             ||inc ecx
00401E0F   |>  803C31 00      | cmp byte ptr ds:[ecx+esi],0
00401E13   |.^ 75 F4          |\jnz short CR-Game0.00401E09
00401E15   |>  8A0439         |mov al,byte ptr ds:[ecx+edi]
00401E18   |.  59             |pop ecx
00401E19   |.  3A0411         |cmp al,byte ptr ds:[ecx+edx]
00401E1C   |.  75 0F          |jnz short CR-Game0.00401E2D
00401E1E   |.  41             |inc ecx
00401E1F   |.  8A0419         |mov al,byte ptr ds:[ecx+ebx]
00401E22   |>  0AC0            or al,al
00401E24   |.^ 75 DE          \jnz short CR-Game0.00401E04
00401E26   |.  B8 05000000    mov eax,5
00401E2B   |.  EB 02          jmp short CR-Game0.00401E2F
00401E2D   |>  33C0           xor eax,eax
00401E2F   |>  5F             pop edi
00401E30   |.  5E             pop esi
00401E31   |.  5A             pop edx
00401E32   |.  59             pop ecx
00401E33   |.  5B             pop ebx
00401E34   |.  C9             leave
00401E35   \.  C3             retn
level 5一样连接了两个字符串,然后把name变成大写,再查string1,找到字母在string1的位置,取string2同样位置的字母去和serial比较
string1:   QW ER TY UI OP AS DF GH JK LZ XC VB NM
string2:   pO lK iU jm nh yt gb Vf re dC XS wq aZ
level 5: name: emptywin     serial:  lZhiUOma
菜菜在灌水哦。level6在0.5版本有问题,今天才看到0.6版本,level6下次咯。
2004-11-24 09:24
0
雪    币: 235
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JiP
7
哇, 冒泡了!
黑汽水,好功力!
高质量高效率的产品啊!
2004-11-24 15:22
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
level 6:
00401E91   |.  8D5D A0        lea ebx,dword ptr ss:[ebp-60]  ;get serial
00401E94   |.  8A03           mov al,byte ptr ds:[ebx]    ;取第一位
00401E96   |.  04 03          add al,3        ;+3和4D比较,不等kill
00401E98   |.  3C 4D          cmp al,4D             ;逆出来4D-3=4A('J')
00401E9A   |.  74 0A          je short CR-Game0.00401EA6
00401E9C   |.  33C9           xor ecx,ecx
00401E9E   |>  41             /inc ecx
00401E9F   |.  83F9 64        |cmp ecx,64
00401EA2   |.^ 72 FA          \jb short CR-Game0.00401E9E
00401EA4   |.  EB 28          jmp short CR-Game0.00401ECE
00401EA6   |>  8A43 01        mov al,byte ptr ds:[ebx+1]  ;取第2位
00401EA9   |.  34 69          xor al,69    ;异或69H要等于0,所以第2位'i'
00401EAB   |.  74 0D          je short CR-Game0.00401EBA
00401EAD   |.  33C9           xor ecx,ecx
00401EAF   |>  41             /inc ecx
00401EB0   |.  81F9 C8000000  |cmp ecx,0C8
00401EB6   |.^ 72 F7          \jb short CR-Game0.00401EAF
00401EB8   |.  EB 14          jmp short CR-Game0.00401ECE
00401EBA   |>  8A43 02        mov al,byte ptr ds:[ebx+2]  ;取第3位
00401EBD   |.  2C 03          sub al,3       ;-3h==4D
00401EBF   |.  3C 4D          cmp al,4D   ;所以第3位'P'
00401EC1   |.  74 10          je short CR-Game0.00401ED3
00401EC3   |.  33C9           xor ecx,ecx
00401EC5   |>  41             /inc ecx
00401EC6   |.  81F9 2C010000  |cmp ecx,12C
00401ECC   |.^ 72 F7          \jb short CR-Game0.00401EC5
00401ECE   |>  E9 A3000000    jmp CR-Game0.00401F76   ;下面是变换第4,5位
00401ED3   |>  8D75 E0        lea esi,dword ptr ss:[ebp-20]  ;get name
00401ED6   |.  8D7D C0        lea edi,dword ptr ss:[ebp-40]  ;get company
00401ED9   |.  8A27           mov ah,byte ptr ds:[edi]
00401EDB   |.  80E4 06        and ah,6
00401EDE   |.  8A06           mov al,byte ptr ds:[esi]
00401EE0   |.  02C4           add al,ah
00401EE2   |.  2A43 03        sub al,byte ptr ds:[ebx+3] ;ah&6+al=serial[3]
00401EE5   |.  0F85 8B000000  jnz CR-Game0.00401F76
00401EEB   |.  8A26           mov ah,byte ptr ds:[esi]
00401EED   |.  80E4 09        and ah,9
00401EF0   |.  8A07           mov al,byte ptr ds:[edi]
00401EF2   |.  02C4           add al,ah
00401EF4   |.  2A43 04        sub al,byte ptr ds:[ebx+4]  ;ah&9+al=serial[4]简单变换了前5个
00401EF7   |.  75 7D          jnz short CR-Game0.00401F76  ;下面就复杂点了
00401EF9   |.  8B43 05        mov eax,dword ptr ds:[ebx+5]  
00401EFC   |.  8B16           mov edx,dword ptr ds:[esi]
00401EFE   |.  33D0           xor edx,eax
00401F00   |.  81E2 03050709  and edx,9070503
00401F06   |.  0316           add edx,dword ptr ds:[esi]
00401F08   |.  8B43 09        mov eax,dword ptr ds:[ebx+9]
00401F0B   |.  2BC2           sub eax,edx
00401F0D   |.^ 75 BF          jnz short CR-Game0.00401ECE
00401F0F   |.  33C9           xor ecx,ecx
00401F11   |.  EB 0B          jmp short CR-Game0.00401F1E
00401F13   |>  803C31 61      /cmp byte ptr ds:[ecx+esi],61  ;小写变大写
00401F17   |.  72 04          |jb short CR-Game0.00401F1D
00401F19   |.  802C31 20      |sub byte ptr ds:[ecx+esi],20
00401F1D   |>  41             |inc ecx
00401F1E   |>  803C31 00       cmp byte ptr ds:[ecx+esi],0
00401F22   |.^ 75 EF          \jnz short CR-Game0.00401F13
00401F24   |.  8D7D 80        lea edi,dword ptr ss:[ebp-80]
00401F27   |.  EB 1F          jmp short CR-Game0.00401F48
00401F29   |.  4A 69 50 34 5A>ascii "JiP4ZAQWSXCDERFV"
00401F39   |.  42 47 54 59 48>ascii "BGTYHNMJUIKLOP",0
00401F48   |>  68 291F4000    push CR-Game0.00401F29            ; /String2 = "JiP4ZAQWSXCDERFVBGTYHNMJUIKLOP"
00401F4D   |.  57             push edi                          ; |String1
00401F4E   |.  E8 F50C0000    call <jmp.&kernel32.lstrcpyA>     ; \lstrcpyA
00401F53   |.  33C0           xor eax,eax     ;连接字符串
00401F55   |.  33C9           xor ecx,ecx  ;JiP4ZAQWSXCDERFVBGTYHNMJUIKLOP
00401F57   |.  8A06           mov al,byte ptr ds:[esi]
00401F59   |.  EB 0F          jmp short CR-Game0.00401F6A
00401F5B   |>  2C 3D          /sub al,3D
00401F5D   |.  8A0438         |mov al,byte ptr ds:[eax+edi]
00401F60   |.  3A4419 0D      |cmp al,byte ptr ds:[ecx+ebx+D]
00401F64   |.  75 10          |jnz short CR-Game0.00401F76
00401F66   |.  41             |inc ecx
00401F67   |.  8A0431         |mov al,byte ptr ds:[ecx+esi]
00401F6A   |>  0AC0            or al,al
00401F6C   |.^ 75 ED          \jnz short CR-Game0.00401F5B
00401F6E   |.  61             popad
00401F6F   |.  B8 06000000    mov eax,6
00401F74   |.  EB 02          jmp short CR-Game0.00401F78
00401F76   |>  33C0           xor eax,eax
00401F78   |>  C9             leave
00401F79   \.  C3             retn
  看完了咯,相当于是前面几次的复合,从头来看看。
  name:  emptywin              company:   china
  1.变换了前面3个字符,是固定的:JiP(楼主)
  2.变换了后面2个字符,ah&6+al=serial[3],ah&9+al=serial[4],第1次ah是company al是name,第2次ah是name al是company。变换得到了:  gd
  3.取双字,由serial接着的前4个和name运算变换出后4个。不过变换出来的有可能不是可显示字符:
    '7878'   ,eax=0x38373837  (内存里面是按照高高低低来放数据的)
    'empt'   ,edx=0x74706D65  , edx=eax^edx=4C475552  ,  edx=edx&0x9070503=0x08070502
    edx=edx+0x74706D65(name)=0x7C777267,  转换成ascii='grw|',0x7C是不可显示字符,我用UltranEdit 来转换得到了'|'。
  4.在过完上面的3步后,我就得到了JiPgd7878grw|,下面就是要查字符串来得到下面的啦
    连接后的字符串 JiP4ZAQWSXCDERFVBGTYHNMJUIKLOP ,把名字全部变成大写(41~5A),然后减掉0x3D去取字符串  我取到的是SBYJOKEG
  5.终于走到最后面了啊,只要前面没有跳到00401F76 33C0 xor eax,eax 这一句就可以了。
level 6:
  name: emptywin    company: china   serial: JiPgd7878grw|SBYJOKEG

ps: 有level 7吗?  看也看不太明白啊,不太像有算法的啊。我用name: emptywin  company: c   serial:(空)  就pass 了,是不是啊,就是一些长度的判断
2004-11-25 12:15
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不错 ,高质量的贴啊!
2004-11-25 17:05
0
雪    币: 235
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JiP
10
除了最终版本外,所有的CR-Game的最后一级都是搞笑级。
所以CR-Game0.6 (6+1级)的level 7级是。。。

用 name: emptywin  company: c   serial:(空) 应该不能pass啊?
应用 name: em  company: c   serial:(空)  才行。
可能是程序的虫子吧?

ps: CR--Game0.7 (7+1级) 版本可能要好几天后才能发布,因为JiP是一个大懒虫。
呵呵呵。。。哈哈哈。。。

打个广告:
有兴趣的朋友可先试试 CR-Game0.6 (6+1级) 。
软件没有加密,没有防反编译,没有防测试。
是具有一定经验的PJ者的 试手升级史丹姆。
适合于入门级至中级的朋友,或者无聊手痒的高手们。
2004-11-25 18:51
0
游客
登录 | 注册 方可回帖
返回
//