GGLHY 发表于 2012-8-17 00:11:32

Perfect Icon 2.41算法分析

本帖最后由 GGLHY 于 2012-8-17 00:13 编辑


直奔主题,来到:



省略部分代码.....
004FE18B|.8B83 F8020000 MOV EAX,DWORD PTR DS:
004FE191|.E8 DE6CF3FF   CALL perfecti.00434E74
004FE196|.8B45 E8       MOV EAX,DWORD PTR SS:      ;输入的假码1598753046
004FE199|.8D55 F8       LEA EDX,DWORD PTR SS:
004FE19C|.E8 6FADF0FF   CALL perfecti.00408F10
004FE1A1|.8D55 E4       LEA EDX,DWORD PTR SS:
004FE1A4|.8B83 00030000 MOV EAX,DWORD PTR DS:
004FE1AA|.E8 C56CF3FF   CALL perfecti.00434E74
004FE1AF|.8B45 E4       MOV EAX,DWORD PTR SS:      ;输入的E-mail邮箱
004FE1B2|.8D55 F4       LEA EDX,DWORD PTR SS:
004FE1B5|.E8 56ADF0FF   CALL perfecti.00408F10
004FE1BA|.837D F8 00    CMP DWORD PTR SS:,0         ;假码为空吗?
004FE1BE|.75 0C         JNZ SHORT perfecti.004FE1CC
004FE1C0|.A1 443A6200   MOV EAX,DWORD PTR DS:
004FE1C5|.8B00          MOV EAX,DWORD PTR DS:
004FE1C7|.E8 20FFFFFF   CALL perfecti.004FE0EC
004FE1CC|>837D F4 00    CMP DWORD PTR SS:,0         ;输入的E-mail邮箱为空吗?
004FE1D0|.75 16         JNZ SHORT perfecti.004FE1E8
004FE1D2|.B9 08E44F00   MOV ECX,perfecti.004FE408            ;Please enter email used in your order
004FE1D7|.B2 01         MOV DL,1
004FE1D9|.A1 84804000   MOV EAX,DWORD PTR DS:
004FE1DE|.E8 11E2F0FF   CALL perfecti.0040C3F4
004FE1E3|.E8 E456F0FF   CALL perfecti.004038CC
004FE1E8|>8B45 F8       MOV EAX,DWORD PTR SS:         ;输入的假码1598753046
004FE1EB|.E8 105FF0FF   CALL perfecti.00404100
004FE1F0|.83F8 0A       CMP EAX,0A                           ;假码长度小于10位吗?
004FE1F3|.7D 0C         JGE SHORT perfecti.004FE201
004FE1F5|.A1 443A6200   MOV EAX,DWORD PTR DS:
004FE1FA|.8B00          MOV EAX,DWORD PTR DS:
004FE1FC|.E8 EBFEFFFF   CALL perfecti.004FE0EC
004FE201|>8D55 E0       LEA EDX,DWORD PTR SS:
004FE204|.8B83 F8020000 MOV EAX,DWORD PTR DS:
004FE20A|.E8 656CF3FF   CALL perfecti.00434E74
004FE20F|.8B45 E0       MOV EAX,DWORD PTR SS:      ;输入的假码
004FE212|.E8 4DF8FFFF   CALL perfecti.004FDA64               ; 《===============关键call第一处
004FE217|.85C0          TEST EAX,EAX
004FE219|.74 0A         JE SHORT perfecti.004FE225         ;《===============关键跳第一处
004FE21B|.B8 38E44F00   MOV EAX,perfecti.004FE438            ;Wrong key.
004FE220|.E8 C7FEFFFF   CALL perfecti.004FE0EC
004FE225|>8B45 F8       MOV EAX,DWORD PTR SS:
004FE228|.E8 97F8FFFF   CALL perfecti.004FDAC4
004FE22D|.8B93 08030000 MOV EDX,DWORD PTR DS:
004FE233|.8B45 F8       MOV EAX,DWORD PTR SS:
004FE236|.E8 B5F6FFFF   CALL perfecti.004FD8F0               ; 《===============关键call第二处
004FE23B|.85C0          TEST EAX,EAX
004FE23D|.74 0A         JE SHORT perfecti.004FE249         ; 《===============关键c跳第二处
004FE23F|.B8 4CE44F00   MOV EAX,perfecti.004FE44C            ;Wrong key for this application.
004FE244|.E8 A3FEFFFF   CALL perfecti.004FE0EC
004FE249|>B2 01         MOV DL,1
004FE24B|.A1 28C84500   MOV EAX,DWORD PTR DS:
004FE250|.E8 D3E6F5FF   CALL perfecti.0045C928
004FE255|.8945 F0       MOV DWORD PTR SS:,EAX
004FE258|.33C0          XOR EAX,EAX
004FE25A|.55            PUSH EBP
004FE25B|.68 6FE34F00   PUSH perfecti.004FE36F
004FE260|.64:FF30       PUSH DWORD PTR FS:
004FE263|.64:8920       MOV DWORD PTR FS:,ESP
004FE266|.BA 01000080   MOV EDX,80000001
004FE26B|.8B45 F0       MOV EAX,DWORD PTR SS:
004FE26E|.E8 91E7F5FF   CALL perfecti.0045CA04               
004FE273|.68 74E44F00   PUSH perfecti.004FE474               ;Software\
省略部分代码.....
004FE2AE|.E8 B9E7F5FF   CALL perfecti.0045CA6C
004FE2B3|.8845 FF       MOV BYTE PTR SS:,AL
004FE2B6|.807D FF 00    CMP BYTE PTR SS:,0
004FE2BA|.0F84 99000000 JE perfecti.004FE359
004FE2C0|.8B4D F8       MOV ECX,DWORD PTR SS:
004FE2C3|.BA 94E44F00   MOV EDX,perfecti.004FE494            ;ASCII "Key"
004FE2C8|.8B45 F0       MOV EAX,DWORD PTR SS:
004FE2CB|.E8 E8ECF5FF   CALL perfecti.0045CFB8
004FE2D0|.BA 94E44F00   MOV EDX,perfecti.004FE494            ;ASCII "Key"
004FE2D5|.8D4D D4       LEA ECX,DWORD PTR SS:
004FE2D8|.8B45 F0       MOV EAX,DWORD PTR SS:
004FE2DB|.E8 04EDF5FF   CALL perfecti.0045CFE4
004FE2E0|.8B55 D4       MOV EDX,DWORD PTR SS:
004FE2E3|.8B45 F8       MOV EAX,DWORD PTR SS:
004FE2E6|.E8 255FF0FF   CALL perfecti.00404210

004FE212CALL perfecti.004FDA64                               ; 《===============关键call第一处,F7进入
004FDA64/$55            PUSH EBP
004FDA65|.8BEC          MOV EBP,ESP
004FDA67|.51            PUSH ECX
004FDA68|.53            PUSH EBX
004FDA69|.56            PUSH ESI
004FDA6A|.8945 FC       MOV DWORD PTR SS:,EAX         ;输入的假码
004FDA6D|.8B45 FC       MOV EAX,DWORD PTR SS:
004FDA70|.E8 3F68F0FF   CALL perfecti.004042B4
004FDA75|.33C0          XOR EAX,EAX
004FDA77|.55            PUSH EBP
004FDA78|.68 B4DA4F00   PUSH perfecti.004FDAB4
004FDA7D|.64:FF30       PUSH DWORD PTR FS:
004FDA80|.64:8920       MOV DWORD PTR FS:,ESP
004FDA83|.33F6          XOR ESI,ESI
004FDA85|.BB 0A000000   MOV EBX,0A
004FDA8A|>8B45 FC       /MOV EAX,DWORD PTR SS:      ;输入的假码
004FDA8D|.E8 6AFDFFFF   |CALL perfecti.004FD7FC            ;注意这个CALL,决定了下面ESI的值!!!
004FDA92|.03F0          |ADD ESI,EAX
004FDA94|.6A 64         |PUSH 64                           ; /Timeout = 100. ms
004FDA96|.E8 1197F0FF   |CALL <JMP.&kernel32.Sleep>          ; \Sleep
004FDA9B|.4B            |DEC EBX
004FDA9C|.^ 75 EC         \JNZ SHORT perfecti.004FDA8A         ;检测!!!
004FDA9E|.33C0          XOR EAX,EAX
004FDAA0|.5A            POP EDX
004FDAA1|.59            POP ECX
004FDAA2|.59            POP ECX
004FDAA3|.64:8910       MOV DWORD PTR FS:,EDX
004FDAA6|.68 BBDA4F00   PUSH perfecti.004FDABB
004FDAAB|>8D45 FC       LEA EAX,DWORD PTR SS:
004FDAAE|.E8 CD63F0FF   CALL perfecti.00403E80
004FDAB3\.C3            RETN
004FDAB4   .^ E9 DB5DF0FF   JMP perfecti.00403894
004FDAB9   .^ EB F0         JMP SHORT perfecti.004FDAAB
004FDABB   .8BC6          MOV EAX,ESI                        ;这个ESI由004FDA8D处的CALL 004FD7FC 决定!
004FDABD   .5E            POP ESI
004FDABE   .5B            POP EBX
004FDABF   .59            POP ECX
004FDAC0   .5D            POP EBP
004FDAC1   .C3            RETN

004FDA8D 处CALL 004FD7FC ,我们F7进入:
004FD7FC/$55            PUSH EBP                           ;///局部调用来自 004FDA8D, 004FDAC9, 00609736
004FD7FD|.8BEC          MOV EBP,ESP
004FD7FF|.83C4 F4       ADD ESP,-0C
004FD802|.53            PUSH EBX
004FD803|.56            PUSH ESI
004FD804|.33D2          XOR EDX,EDX
004FD806|.8955 F4       MOV DWORD PTR SS:,EDX
004FD809|.8945 FC       MOV DWORD PTR SS:,EAX         ;输入的假码(ASCII "1598753046")
004FD80C|.8B45 FC       MOV EAX,DWORD PTR SS:
004FD80F|.E8 A06AF0FF   CALL perfecti.004042B4
004FD814|.33C0          XOR EAX,EAX
004FD816|.55            PUSH EBP
004FD817|.68 B7D84F00   PUSH perfecti.004FD8B7
004FD81C|.64:FF30       PUSH DWORD PTR FS:
004FD81F|.64:8920       MOV DWORD PTR FS:,ESP
004FD822|.33C0          XOR EAX,EAX
004FD824|.8945 F8       MOV DWORD PTR SS:,EAX
004FD827|.8D55 F4       LEA EDX,DWORD PTR SS:
004FD82A|.8B45 FC       MOV EAX,DWORD PTR SS:         ;输入的假码(ASCII "1598753046")
004FD82D|.E8 02FFFFFF   CALL perfecti.004FD734               ;查表校验注册码
004FD832|.8B55 F4       MOV EDX,DWORD PTR SS:         ;查表校验后的注册码,设为K
004FD835|.8D45 FC       LEA EAX,DWORD PTR SS:
004FD838|.E8 DB66F0FF   CALL perfecti.00403F18
004FD83D|.8B45 FC       MOV EAX,DWORD PTR SS:
004FD840|.E8 BB68F0FF   CALL perfecti.00404100               ;查表校验后的注册码K的长度!
004FD845|.8BF0          MOV ESI,EAX
004FD847|.83FE 07       CMP ESI,7                            ;K的长度:7
004FD84A|.7D 09         JGE SHORT perfecti.004FD855
004FD84C|.C745 F8 0B000>MOV DWORD PTR SS:,0B
004FD853|.EB 44         JMP SHORT perfecti.004FD899
004FD855|>33DB          XOR EBX,EBX                        ;!!!
004FD857|.8B45 FC       MOV EAX,DWORD PTR SS:
004FD85A|.E8 A168F0FF   CALL perfecti.00404100
004FD85F|.48            DEC EAX                              ;K的长度 -1
004FD860|.83E8 02       SUB EAX,2                            ;再-2
004FD863|.7C 14         JL SHORT perfecti.004FD879
004FD865|.40            INC EAX                              ;+1
004FD866|.BA 02000000   MOV EDX,2                            ;=2
004FD86B|>8B4D FC       /MOV ECX,DWORD PTR SS:      ;查表校验后的注册码K
004FD86E|.0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:   ;K的第2位起依次每一位直到倒数第2位
004FD873|.33D9          |XOR EBX,ECX                         ;与上一轮循环计算后的结果(初始为0) xor
004FD875|.42            |INC EDX
004FD876|.48            |DEC EAX
004FD877|.^ 75 F2         \JNZ SHORT perfecti.004FD86B
004FD879|>8BC3          MOV EAX,EBX                        ;循环结束后的结果。本例=3C
004FD87B|.B9 1E000000   MOV ECX,1E
004FD880|.99            CDQ
004FD881|.F7F9          IDIV ECX                           ;/1E
004FD883|.42            INC EDX                              ;余数+1
004FD884|.B8 D0D84F00   MOV EAX,perfecti.004FD8D0            ;2345679qwertyupadfghjkzxcvbnms
004FD889|.8A4410 FF   MOV AL,BYTE PTR DS:       ;查表!!!
004FD88D|.8B55 FC       MOV EDX,DWORD PTR SS:         ;查表校验后的注册码K
004FD890|.3A4432 FF   CMP AL,BYTE PTR DS:       ;与 K的最后1位 比较
004FD894|.74 03         JE SHORT perfecti.004FD899         ;光明与黑暗的十字路口!
004FD896|.FF45 F8       INC DWORD PTR SS:             ;不要,不要啊!
004FD899|>33C0          XOR EAX,EAX
004FD89B|.5A            POP EDX
004FD89C|.59            POP ECX
004FD89D|.59            POP ECX
004FD89E|.64:8910       MOV DWORD PTR FS:,EDX
004FD8A1|.68 BED84F00   PUSH perfecti.004FD8BE
004FD8A6|>8D45 F4       LEA EAX,DWORD PTR SS:
004FD8A9|.E8 D265F0FF   CALL perfecti.00403E80
004FD8AE|.8D45 FC       LEA EAX,DWORD PTR SS:
004FD8B1|.E8 CA65F0FF   CALL perfecti.00403E80
004FD8B6\.C3            RETN
004FD8B7   .^ E9 D85FF0FF   JMP perfecti.00403894
004FD8BC   .^ EB E8         JMP SHORT perfecti.004FD8A6
004FD8BE   .8B45 F8       MOV EAX,DWORD PTR SS:
004FD8C1   .5E            POP ESI
004FD8C2   .5B            POP EBX
004FD8C3   .8BE5          MOV ESP,EBP
004FD8C5   .5D            POP EBP
004FD8C6   .C3            RETN

004FD82D|.E8 02FFFFFF   CALL perfecti.004FD734               ;查表校验注册码
这个CALL其实就是将输入的注册码过滤掉表中没有的字符。(附表:2345679qwertyupadfghjkzxcvbnms)



004FD734/$55            PUSH EBP
省略部分代码.....
004FD743|.8945 FC       MOV DWORD PTR SS:,EAX         ;输入的假码(ASCII "1598753046")
省略部分代码.....
004FD75F|.E8 9C69F0FF   CALL perfecti.00404100
004FD764|.8BD8          MOV EBX,EAX                        ;假码长度
004FD766|.83FB 01       CMP EBX,1
004FD769|.7C 34         JL SHORT perfecti.004FD79F
004FD76B|>8D45 F8       /LEA EAX,DWORD PTR SS:
004FD76E|.8B55 FC       |MOV EDX,DWORD PTR SS:      ;输入的假码(ASCII "1598753046")
004FD771|.8A541A FF   |MOV DL,BYTE PTR DS:      ;依次倒取假码每一位
004FD775|.E8 AE68F0FF   |CALL perfecti.00404028
004FD77A|.8B45 F8       |MOV EAX,DWORD PTR SS:      ;依次倒取的假码每一位
004FD77D|.BA DCD74F00   |MOV EDX,perfecti.004FD7DC         ;2345679qwertyupadfghjkzxcvbnms
004FD782|.E8 656CF0FF   |CALL perfecti.004043EC            ;查表!!!
004FD787|.85C0          |TEST EAX,EAX                        ;在表中的位置
004FD789|.75 0F         |JNZ SHORT perfecti.004FD79A
004FD78B|.8D45 FC       |LEA EAX,DWORD PTR SS:
004FD78E|.B9 01000000   |MOV ECX,1
004FD793|.8BD3          |MOV EDX,EBX
004FD795|.E8 AE6BF0FF   |CALL perfecti.00404348
004FD79A|>4B            |DEC EBX
004FD79B|.85DB          |TEST EBX,EBX
004FD79D|.^ 75 CC         \JNZ SHORT perfecti.004FD76B
004FD79F|>8BC6          MOV EAX,ESI
004FD7A1|.8B55 FC       MOV EDX,DWORD PTR SS:         ;查表校验后的注册码,设为K
省略部分代码.....
004FD7C3\.C3            RETN


提示点:
004FD890CMP AL,BYTE PTR DS:       ;与 K的最后1位 比较



----------------------------------------------------------------------

关键CALL第2处:
004FD8F0/$55            PUSH EBP
004FD8F1|.8BEC          MOV EBP,ESP
004FD8F3|.33C9          XOR ECX,ECX
004FD8F5|.51            PUSH ECX
004FD8F6|.51            PUSH ECX
004FD8F7|.51            PUSH ECX
004FD8F8|.51            PUSH ECX
004FD8F9|.51            PUSH ECX
004FD8FA|.53            PUSH EBX
004FD8FB|.56            PUSH ESI
004FD8FC|.8955 F8       MOV DWORD PTR SS:,EDX         ;(ASCII "Perfect Icon")
004FD8FF|.8945 FC       MOV DWORD PTR SS:,EAX         ;输入的假码1598753042
004FD902|.8B45 FC       MOV EAX,DWORD PTR SS:
004FD905|.E8 AA69F0FF   CALL perfecti.004042B4
004FD90A|.8B45 F8       MOV EAX,DWORD PTR SS:         ;   (ASCII "Perfect Icon")
004FD90D|.E8 A269F0FF   CALL perfecti.004042B4
004FD912|.33C0          XOR EAX,EAX
004FD914|.55            PUSH EBP
004FD915|.68 2BDA4F00   PUSH perfecti.004FDA2B
004FD91A|.64:FF30       PUSH DWORD PTR FS:
004FD91D|.64:8920       MOV DWORD PTR FS:,ESP
004FD920|.33F6          XOR ESI,ESI
004FD922|.8D55 F0       LEA EDX,DWORD PTR SS:
004FD925|.8B45 FC       MOV EAX,DWORD PTR SS:         ;输入的假码“1598753046”
004FD928|.E8 07FEFFFF   CALL perfecti.004FD734
004FD92D|.8B55 F0       MOV EDX,DWORD PTR SS:
004FD930|.8D45 FC       LEA EAX,DWORD PTR SS:
004FD933|.E8 E065F0FF   CALL perfecti.00403F18
004FD938|.8B45 FC       MOV EAX,DWORD PTR SS:
004FD93B|.E8 C067F0FF   CALL perfecti.00404100
004FD940|.83F8 07       CMP EAX,7
004FD943|.7D 0A         JGE SHORT perfecti.004FD94F
004FD945|.BE 0B000000   MOV ESI,0B
004FD94A|.E9 C1000000   JMP perfecti.004FDA10
004FD94F|>837D F8 00    CMP DWORD PTR SS:,0
004FD953|.0F84 B7000000 JE perfecti.004FDA10
004FD959|.33DB          XOR EBX,EBX
004FD95B|.8B45 F8       MOV EAX,DWORD PTR SS:
004FD95E|.E8 9D67F0FF   CALL perfecti.00404100
004FD963|.48            DEC EAX
004FD964|.85C0          TEST EAX,EAX
004FD966|.7E 13         JLE SHORT perfecti.004FD97B
004FD968|.BA 01000000   MOV EDX,1
004FD96D|>8B4D F8       /MOV ECX,DWORD PTR SS:      ;   (ASCII "Perfect Icon")
004FD970|.0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:   ;依次每一位ASC(不含最后一位)
004FD975|.03D9          |ADD EBX,ECX
004FD977|.42            |INC EDX
004FD978|.48            |DEC EAX
004FD979|.^ 75 F2         \JNZ SHORT perfecti.004FD96D         ;此循环即取固定字符串Perfect Ico的ASC累加和
004FD97B|>8BC3          MOV EAX,EBX                        ;累加和=404H
004FD97D|.B9 1E000000   MOV ECX,1E
004FD982|.99            CDQ
004FD983|.F7F9          IDIV ECX                           ;/1E
004FD985|.42            INC EDX                              ;余数+1
004FD986|.B8 44DA4F00   MOV EAX,perfecti.004FDA44            ;2345679qwertyupadfghjkzxcvbnms
004FD98B|.8A4410 FF   MOV AL,BYTE PTR DS:       ;查表!
004FD98F|.8B55 FC       MOV EDX,DWORD PTR SS:
004FD992|.3A42 01       CMP AL,BYTE PTR DS:         ;与查表校验后的注册码K的第2位(“9”)比较
004FD995|.74 01         JE SHORT perfecti.004FD998         ;又一个 光明与黑暗的十字路口!
004FD997|.46            INC ESI
004FD998|>8D55 F4       LEA EDX,DWORD PTR SS:
004FD99B|.8B45 F8       MOV EAX,DWORD PTR SS:         ;   (ASCII "Perfect Icon")
004FD99E|.E8 35B3F0FF   CALL perfecti.00408CD8
004FD9A3|.8D45 EC       LEA EAX,DWORD PTR SS:
004FD9A6|.8B55 F4       MOV EDX,DWORD PTR SS:         ;注意大小写 (ASCII "perfect icon")
004FD9A9|.8A12          MOV DL,BYTE PTR DS:             ;转换为小写 (ASCII "perfect icon")的第一位
004FD9AB|.E8 7866F0FF   CALL perfecti.00404028
004FD9B0|.8B45 EC       MOV EAX,DWORD PTR SS:
004FD9B3|.BA 44DA4F00   MOV EDX,perfecti.004FDA44            ;2345679qwertyupadfghjkzxcvbnms
004FD9B8|.E8 2F6AF0FF   CALL perfecti.004043EC
004FD9BD|.85C0          TEST EAX,EAX                         ;在表中的位置。本例(=F)
004FD9BF|.7E 11         JLE SHORT perfecti.004FD9D2
004FD9C1|.8D45 FC       LEA EAX,DWORD PTR SS:
004FD9C4|.E8 0769F0FF   CALL perfecti.004042D0
004FD9C9|.8B55 F4       MOV EDX,DWORD PTR SS:         ;转换为小写的(ASCII "perfect icon")
004FD9CC|.8A12          MOV DL,BYTE PTR DS:             ;转换为小写 (ASCII "perfect icon")的第一位
004FD9CE|.8810          MOV BYTE PTR DS:,DL            
004FD9D0|.EB 3E         JMP SHORT perfecti.004FDA10
004FD9D2|>33DB          XOR EBX,EBX
004FD9D4|.8B45 F8       MOV EAX,DWORD PTR SS:
004FD9D7|.E8 2467F0FF   CALL perfecti.00404100
004FD9DC|.48            DEC EAX
004FD9DD|.85C0          TEST EAX,EAX
004FD9DF|.7E 13         JLE SHORT perfecti.004FD9F4
004FD9E1|.BA 01000000   MOV EDX,1
004FD9E6|>8B4D F8       /MOV ECX,DWORD PTR SS:
004FD9E9|.0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:
004FD9EE|.33D9          |XOR EBX,ECX
004FD9F0|.42            |INC EDX
004FD9F1|.48            |DEC EAX
004FD9F2|.^ 75 F2         \JNZ SHORT perfecti.004FD9E6
004FD9F4|>8BC3          MOV EAX,EBX
004FD9F6|.B9 1E000000   MOV ECX,1E
004FD9FB|.99            CDQ
004FD9FC|.F7F9          IDIV ECX
004FD9FE|.42            INC EDX
004FD9FF|.B8 44DA4F00   MOV EAX,perfecti.004FDA44            ;2345679qwertyupadfghjkzxcvbnms
004FDA04|.8A4410 FF   MOV AL,BYTE PTR DS:
004FDA08|.8B55 FC       MOV EDX,DWORD PTR SS:
004FDA0B|.3A02          CMP AL,BYTE PTR DS:             ;查表校验后的注册码K的第1位!!!
004FDA0D|.74 01         JE SHORT perfecti.004FDA10
004FDA0F|.46            INC ESI
004FDA10|>33C0          XOR EAX,EAX
004FDA12|.5A            POP EDX
004FDA13|.59            POP ECX
004FDA14|.59            POP ECX
004FDA15|.64:8910       MOV DWORD PTR FS:,EDX
004FDA18|.68 32DA4F00   PUSH perfecti.004FDA32
004FDA1D|>8D45 EC       LEA EAX,DWORD PTR SS:
004FDA20|.BA 05000000   MOV EDX,5
004FDA25|.E8 7A64F0FF   CALL perfecti.00403EA4
004FDA2A\.C3            RETN
004FDA2B   .^ E9 645EF0FF   JMP perfecti.00403894
004FDA30   .^ EB EB         JMP SHORT perfecti.004FDA1D
004FDA32   .8BC6          MOV EAX,ESI
004FDA34   .5E            POP ESI
004FDA35   .5B            POP EBX
004FDA36   .8BE5          MOV ESP,EBP
004FDA38   .5D            POP EBP
004FDA39   .C3            RETN


提示点:
004FD992CMP AL,BYTE PTR DS:         ;“w”与查表校验后的注册码K的第2位(“9”)比较
004FDA0BCMP AL,BYTE PTR DS:             ;“p”查表校验后的注册码K的第1位!!!
------------------------------------------------------------------------------------------------




算法小结:(算法与用户名和邮箱无关)
1.输入的注册码不得少于10位,且符合表中的字符不得少于7位,设为K;
2.K的第2位起依次与下一位XOR,直到倒数第2位为止,结果设为M,则 M mod 1E,余数+1的数值查表所得到的字符必须为K的最后一位。
3.取固定字符串"Perfect Ico"(注意,不含n)的ASC累加和404 mod 1E 的余数8 +1,得到9,查表的第9位为“w”,则K的第2位必须为“w”
4.固定字符串"Perfect Icon"转小写,得到:"perfect icon"。取第一位“p”必须为K的第1位。

附表:
2345679qwertyupadfghjkzxcvbnms

其实真正需要考虑的为前面2条,最后2条可以看做固定的。
所以可以构造注册码为:
0081pw8753084c8








月之精灵 发表于 2012-8-17 13:00:27

前排学习下,谢谢分享心得

qinccckencn 发表于 2012-8-17 22:23:07

谢谢G大,前排学习了!!

lovedai 发表于 2012-8-20 21:33:13

不错啊,学习下!

cjteam 发表于 2012-8-29 19:22:32

分析的不错,支持

montana 发表于 2012-10-29 12:15:45

及时雨啊,谢谢老大。{:lol:}

jzyjd 发表于 2012-11-4 20:39:17

学习了,有很大收获。
页: [1]
查看完整版本: Perfect Icon 2.41算法分析