Marine Aquarium v2.6一款屏幕保护程序

将程序扩展名.SCR改成.EXE然后用OD载入就可以调试了。。

Ctrl+N 查找 GetDlgItemTextA 然后全部下断分析得到下面地址

00427484  |.  6A 20         PUSH 20                                  ; /Count = 20 (32.)
00427486  |.  68 74CA4500   PUSH MA2_6.0045CA74                      ; |Buffer = MA2_6.0045CA74
0042748B  |.  68 92000000   PUSH 92                                  ; |ControlID = 92 (146.)
00427490  |.  50            PUSH EAX                                 ; |hWnd => 00080DEC (class='SereneDlgClass',parent=007100A2)
00427491  |.  894424 28     MOV DWORD PTR SS:[ESP+28],EAX            ; |
00427495  |.  C605 88F64500>MOV BYTE PTR DS:[45F688],0               ; |
0042749C  |.  FF15 1CA34400 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \获取注册码
004274A2  |.  8A0D 74CA4500 MOV CL,BYTE PTR DS:[45CA74]              ;  首字母送 CL
004274A8  |.  B8 74CA4500   MOV EAX,MA2_6.0045CA74                   ;  假码送 EAX
004274AD  |.  33F6          XOR ESI,ESI
004274AF  |.  8BD0          MOV EDX,EAX                              ;  假码再送 EDX
004274B1  |.  84C9          TEST CL,CL                               ;  输入注册码了吗?
004274B3  |.  74 40         JE SHORT MA2_6.004274F5                  ;  空就跳走
004274B5  |>  8038 30       /CMP BYTE PTR DS:[EAX],30                ;  当前字母是 0 吗?
004274B8  |.  75 03         |JNZ SHORT MA2_6.004274BD                ;  不是就跳
004274BA  |.  C600 6F       |MOV BYTE PTR DS:[EAX],6F                ;  6F 是 o
004274BD  |>  8038 31       |CMP BYTE PTR DS:[EAX],31                ;  当前字母是 1 吗?
004274C0  |.  75 03         |JNZ SHORT MA2_6.004274C5                ;  不是就跳
004274C2  |.  C600 6C       |MOV BYTE PTR DS:[EAX],6C                ;  6C 是 l
004274C5  |>  8A08          |MOV CL,BYTE PTR DS:[EAX]                ;  当前字母送到 CL
004274C7  |.  80F9 61       |CMP CL,61                               ;  是 a 吗?
004274CA  |.  7C 05         |JL SHORT MA2_6.004274D1                 ;  小于跳
004274CC  |.  80F9 7A       |CMP CL,7A                               ;  是 z 吗?
004274CF  |.  7E 14         |JLE SHORT MA2_6.004274E5                ;  小于等于跳
004274D1  |>  80F9 41       |CMP CL,41                               ;  是 A 吗?
004274D4  |.  7C 05         |JL SHORT MA2_6.004274DB                 ;  小于跳
004274D6  |.  80F9 5A       |CMP CL,5A                               ;  是 Z 吗?
004274D9  |.  7E 0A         |JLE SHORT MA2_6.004274E5                ;  小于等于跳
004274DB  |>  80F9 32       |CMP CL,32                               ;  是 2 吗?
004274DE  |.  7C 0D         |JL SHORT MA2_6.004274ED                 ;  小于跳
004274E0  |.  80F9 37       |CMP CL,37                               ;  是 7 吗?
004274E3  |.  7F 08         |JG SHORT MA2_6.004274ED                 ;  大余跳
004274E5  |>  46            |INC ESI                                 ;  ESI作为记数器 ESI++
004274E6  |.  3BD0          |CMP EDX,EAX
004274E8  |.  74 02         |JE SHORT MA2_6.004274EC
004274EA  |.  880A          |MOV BYTE PTR DS:[EDX],CL
004274EC  |>  42            |INC EDX                                 ;  EDX++
004274ED  |>  8A48 01       |MOV CL,BYTE PTR DS:[EAX+1]              ;  下一字母送 CL
004274F0  |.  40            |INC EAX                                 ;  EAX++
004274F1  |.  84C9          |TEST CL,CL                              ;  全部检查完了吗?
004274F3  |.^ 75 C0         \JNZ SHORT MA2_6.004274B5                ;  没有就继续循环
004274F5  |>  83FE 14       CMP ESI,14                               ;  输入了 20 个字母吗?
004274F8  |.  C602 00       MOV BYTE PTR DS:[EDX],0
004274FB  |.  0F85 6C050000 JNZ MA2_6.00427A6D                       ;  输入注册码不够 20 位就 OVER
00427501  |.  BF 74CA4500   MOV EDI,MA2_6.0045CA74                   ;  假码送 EDI
00427506  |.  BA 88F54500   MOV EDX,MA2_6.0045F588                   ;  ASCII "1101010110"
0042750B  |.  8BEF          MOV EBP,EDI                              ;  假码送 EBP
0042750D  |.  C74424 14 000>MOV DWORD PTR SS:[ESP+14],0
00427515  |>  8A07          /MOV AL,BYTE PTR DS:[EDI]                ;  送当前字母进 AL
00427517  |.  3C 61         |CMP AL,61                               ;  是 a 吗?
00427519  |.  72 08         |JB SHORT MA2_6.00427523                 ;  小于跳
0042751B  |.  3C 7A         |CMP AL,7A                               ;  是 z 吗?
0042751D  |.  77 04         |JA SHORT MA2_6.00427523                 ;  大余跳
0042751F  |.  2C 5B         |SUB AL,5B                               ;  当前字母 -5B
00427521  |.  EB 1E         |JMP SHORT MA2_6.00427541
00427523  |>  3C 41         |CMP AL,41
00427525  |.  72 08         |JB SHORT MA2_6.0042752F
00427527  |.  3C 5A         |CMP AL,5A
00427529  |.  77 04         |JA SHORT MA2_6.0042752F
0042752B  |.  2C 3B         |SUB AL,3B
0042752D  |.  EB 12         |JMP SHORT MA2_6.00427541
0042752F  |>  3C 32         |CMP AL,32                               ;  分支 (案例 32..37)
00427531  |.  0F82 36050000 |JB MA2_6.00427A6D
00427537  |.  3C 37         |CMP AL,37
00427539  |.  0F87 2E050000 |JA MA2_6.00427A6D
0042753F  |.  2C 32         |SUB AL,32                               ;  案例 32 ('2'),33 ('3'),34 ('4'),35 ('5'),36 ('6'),37 ('7') --> 分支 0042752F
00427541  |>  B1 10         |MOV CL,10
00427543  |.  BE 05000000   |MOV ESI,5
00427548  |>  84C8          |/TEST AL,CL
0042754A  |.  0F95C3        ||SETNE BL
0042754D  |.  83C3 30       ||ADD EBX,30
00427550  |.  881A          ||MOV BYTE PTR DS:[EDX],BL
00427552  |.  42            ||INC EDX
00427553  |.  D0E9          ||SHR CL,1
00427555  |.  4E            ||DEC ESI
00427556  |.^ 75 F0         |\JNZ SHORT MA2_6.00427548
00427558  |.  8B4424 14     |MOV EAX,DWORD PTR SS:[ESP+14]
0042755C  |.  40            |INC EAX
0042755D  |.  47            |INC EDI
0042755E  |.  83F8 14       |CMP EAX,14
00427561  |.  894424 14     |MOV DWORD PTR SS:[ESP+14],EAX
00427565  |.^ 7C AE         \JL SHORT MA2_6.00427515
00427567  |.  B9 05000000   MOV ECX,5
0042756C  |>  8A45 00       /MOV AL,BYTE PTR SS:[EBP]                ;  转换前5个字母为大写
0042756F  |.  3C 61         |CMP AL,61
00427571  |.  7C 06         |JL SHORT MA2_6.00427579
00427573  |.  3C 7A         |CMP AL,7A
00427575  |.  7F 02         |JG SHORT MA2_6.00427579
00427577  |.  2C 20         |SUB AL,20
00427579  |>  8802          |MOV BYTE PTR DS:[EDX],AL
0042757B  |.  42            |INC EDX
0042757C  |.  45            |INC EBP
0042757D  |.  49            |DEC ECX
0042757E  |.^ 75 EC         \JNZ SHORT MA2_6.0042756C                ;  循环
00427580  |.  C602 00       MOV BYTE PTR DS:[EDX],0
00427583  |.  33DB          XOR EBX,EBX
00427585  |.  33D2          XOR EDX,EDX
00427587  |.  BD 503F4500   MOV EBP,MA2_6.00453F50
0042758C  |.  33C9          XOR ECX,ECX
0042758E  |.  BF 01000000   MOV EDI,1
00427593  |>  8A81 ECF54500 /MOV AL,BYTE PTR DS:[ECX+45F5EC]
00427599  |.  85C9          |TEST ECX,ECX
0042759B  |.  75 0A         |JNZ SHORT MA2_6.004275A7
0042759D  |.  3C 63         |CMP AL,63                               ;  是 c 吗?
0042759F  |.  74 3F         |JE SHORT MA2_6.004275E0
004275A1  |.  3C 43         |CMP AL,43                               ;  是 C 吗?
004275A3  |.  75 3C         |JNZ SHORT MA2_6.004275E1
004275A5  |.  EB 39         |JMP SHORT MA2_6.004275E0
004275A7  |>  83F9 02       |CMP ECX,2
004275AA  |.  75 0A         |JNZ SHORT MA2_6.004275B6
004275AC  |.  3C 72         |CMP AL,72                               ;  是 r 吗?
004275AE  |.  74 30         |JE SHORT MA2_6.004275E0
004275B0  |.  3C 52         |CMP AL,52                               ;  是 R 吗?
004275B2  |.  75 2D         |JNZ SHORT MA2_6.004275E1
004275B4  |.  EB 2A         |JMP SHORT MA2_6.004275E0
004275B6  |>  83F9 04       |CMP ECX,4
004275B9  |.  75 0A         |JNZ SHORT MA2_6.004275C5
004275BB  |.  3C 6B         |CMP AL,6B                               ;  是 k 吗?
004275BD  |.  74 21         |JE SHORT MA2_6.004275E0
004275BF  |.  3C 4B         |CMP AL,4B                               ;  是 K 吗?
004275C1  |.  75 1E         |JNZ SHORT MA2_6.004275E1
004275C3  |.  EB 1B         |JMP SHORT MA2_6.004275E0
004275C5  |>  3BCF          |CMP ECX,EDI
004275C7  |.  75 0A         |JNZ SHORT MA2_6.004275D3
004275C9  |.  3C 6F         |CMP AL,6F                               ;  是 o 吗?
004275CB  |.  74 13         |JE SHORT MA2_6.004275E0
004275CD  |.  3C 4F         |CMP AL,4F                               ;  是 O 吗?
004275CF  |.  75 10         |JNZ SHORT MA2_6.004275E1
004275D1  |.  EB 0D         |JMP SHORT MA2_6.004275E0
004275D3  |>  83F9 03       |CMP ECX,3
004275D6  |.  75 09         |JNZ SHORT MA2_6.004275E1
004275D8  |.  3C 65         |CMP AL,65                               ;  是 e 吗?
004275DA  |.  74 04         |JE SHORT MA2_6.004275E0
004275DC  |.  3C 45         |CMP AL,45                               ;  是 E 吗?
004275DE  |.  75 01         |JNZ SHORT MA2_6.004275E1
004275E0  |>  42            |INC EDX
004275E1  |>  41            |INC ECX
004275E2  |.  83F9 05       |CMP ECX,5
004275E5  |.^ 7C AC         \JL SHORT MA2_6.00427593
004275E7  |.  83FA 05       CMP EDX,5
004275EA  |.  0F85 25010000 JNZ MA2_6.00427715                       ;  关键跳,跳就死

004275EA 这里跳不跳都无所谓了。经过分析后得到注册码是20个字符,只要前5个字符是COREK后15个字符随意,但不能是空格字符就可以成功注册。
给出一个注册码:COREKxxxxxxxxxxxxxxx