飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6246|回复: 6

[原创] Perfect Icon 2.41算法分析

[复制链接]
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2012-8-17 00:11:32 | 显示全部楼层 |阅读模式
    本帖最后由 GGLHY 于 2012-8-17 00:13 编辑


    直奔主题,来到:



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

    79. 004FE212  CALL perfecti.004FDA64                               ; 《===============关键call第一处,F7进入
    80. 004FDA64  /$  55            PUSH EBP
    81. 004FDA65  |.  8BEC          MOV EBP,ESP
    82. 004FDA67  |.  51            PUSH ECX
    83. 004FDA68  |.  53            PUSH EBX
    84. 004FDA69  |.  56            PUSH ESI
    85. 004FDA6A  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX         ;  输入的假码
    86. 004FDA6D  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    87. 004FDA70  |.  E8 3F68F0FF   CALL perfecti.004042B4
    88. 004FDA75  |.  33C0          XOR EAX,EAX
    89. 004FDA77  |.  55            PUSH EBP
    90. 004FDA78  |.  68 B4DA4F00   PUSH perfecti.004FDAB4
    91. 004FDA7D  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
    92. 004FDA80  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
    93. 004FDA83  |.  33F6          XOR ESI,ESI
    94. 004FDA85  |.  BB 0A000000   MOV EBX,0A
    95. 004FDA8A  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]        ;  输入的假码
    96. 004FDA8D  |.  E8 6AFDFFFF   |CALL perfecti.004FD7FC              ;  注意这个CALL,决定了下面ESI的值!!!
    97. 004FDA92  |.  03F0          |ADD ESI,EAX
    98. 004FDA94  |.  6A 64         |PUSH 64                             ; /Timeout = 100. ms
    99. 004FDA96  |.  E8 1197F0FF   |CALL <JMP.&kernel32.Sleep>          ; \Sleep
    100. 004FDA9B  |.  4B            |DEC EBX
    101. 004FDA9C  |.^ 75 EC         \JNZ SHORT perfecti.004FDA8A         ;  检测!!!
    102. 004FDA9E  |.  33C0          XOR EAX,EAX
    103. 004FDAA0  |.  5A            POP EDX
    104. 004FDAA1  |.  59            POP ECX
    105. 004FDAA2  |.  59            POP ECX
    106. 004FDAA3  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
    107. 004FDAA6  |.  68 BBDA4F00   PUSH perfecti.004FDABB
    108. 004FDAAB  |>  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
    109. 004FDAAE  |.  E8 CD63F0FF   CALL perfecti.00403E80
    110. 004FDAB3  \.  C3            RETN
    111. 004FDAB4   .^ E9 DB5DF0FF   JMP perfecti.00403894
    112. 004FDAB9   .^ EB F0         JMP SHORT perfecti.004FDAAB
    113. 004FDABB   .  8BC6          MOV EAX,ESI                          ;这个ESI由004FDA8D处的CALL 004FD7FC 决定!
    114. 004FDABD   .  5E            POP ESI
    115. 004FDABE   .  5B            POP EBX
    116. 004FDABF   .  59            POP ECX
    117. 004FDAC0   .  5D            POP EBP
    118. 004FDAC1   .  C3            RETN

    119. 004FDA8D 处CALL 004FD7FC ,我们F7进入:
    120. 004FD7FC  /$  55            PUSH EBP                             ;  ///局部调用来自 004FDA8D, 004FDAC9, 00609736
    121. 004FD7FD  |.  8BEC          MOV EBP,ESP
    122. 004FD7FF  |.  83C4 F4       ADD ESP,-0C
    123. 004FD802  |.  53            PUSH EBX
    124. 004FD803  |.  56            PUSH ESI
    125. 004FD804  |.  33D2          XOR EDX,EDX
    126. 004FD806  |.  8955 F4       MOV DWORD PTR SS:[EBP-C],EDX
    127. 004FD809  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX         ;  输入的假码(ASCII "1598753046")
    128. 004FD80C  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    129. 004FD80F  |.  E8 A06AF0FF   CALL perfecti.004042B4
    130. 004FD814  |.  33C0          XOR EAX,EAX
    131. 004FD816  |.  55            PUSH EBP
    132. 004FD817  |.  68 B7D84F00   PUSH perfecti.004FD8B7
    133. 004FD81C  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
    134. 004FD81F  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
    135. 004FD822  |.  33C0          XOR EAX,EAX
    136. 004FD824  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX
    137. 004FD827  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
    138. 004FD82A  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]         ;  输入的假码(ASCII "1598753046")
    139. 004FD82D  |.  E8 02FFFFFF   CALL perfecti.004FD734               ;  查表校验注册码
    140. 004FD832  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]         ;  查表校验后的注册码,设为K
    141. 004FD835  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
    142. 004FD838  |.  E8 DB66F0FF   CALL perfecti.00403F18
    143. 004FD83D  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    144. 004FD840  |.  E8 BB68F0FF   CALL perfecti.00404100               ;  查表校验后的注册码K的长度!
    145. 004FD845  |.  8BF0          MOV ESI,EAX
    146. 004FD847  |.  83FE 07       CMP ESI,7                            ;  K的长度:7
    147. 004FD84A  |.  7D 09         JGE SHORT perfecti.004FD855
    148. 004FD84C  |.  C745 F8 0B000>MOV DWORD PTR SS:[EBP-8],0B
    149. 004FD853  |.  EB 44         JMP SHORT perfecti.004FD899
    150. 004FD855  |>  33DB          XOR EBX,EBX                          ;  !!!
    151. 004FD857  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    152. 004FD85A  |.  E8 A168F0FF   CALL perfecti.00404100
    153. 004FD85F  |.  48            DEC EAX                              ;  K的长度 -1
    154. 004FD860  |.  83E8 02       SUB EAX,2                            ;  再-2
    155. 004FD863  |.  7C 14         JL SHORT perfecti.004FD879
    156. 004FD865  |.  40            INC EAX                              ;  +1
    157. 004FD866  |.  BA 02000000   MOV EDX,2                            ;  =2
    158. 004FD86B  |>  8B4D FC       /MOV ECX,DWORD PTR SS:[EBP-4]        ;  查表校验后的注册码K
    159. 004FD86E  |.  0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1]   ;  K的第2位起依次每一位直到倒数第2位
    160. 004FD873  |.  33D9          |XOR EBX,ECX                         ;  与上一轮循环计算后的结果(初始为0) xor
    161. 004FD875  |.  42            |INC EDX
    162. 004FD876  |.  48            |DEC EAX
    163. 004FD877  |.^ 75 F2         \JNZ SHORT perfecti.004FD86B
    164. 004FD879  |>  8BC3          MOV EAX,EBX                          ;  循环结束后的结果。本例=3C
    165. 004FD87B  |.  B9 1E000000   MOV ECX,1E
    166. 004FD880  |.  99            CDQ
    167. 004FD881  |.  F7F9          IDIV ECX                             ;  /1E
    168. 004FD883  |.  42            INC EDX                              ;  余数+1
    169. 004FD884  |.  B8 D0D84F00   MOV EAX,perfecti.004FD8D0            ;  2345679qwertyupadfghjkzxcvbnms
    170. 004FD889  |.  8A4410 FF     MOV AL,BYTE PTR DS:[EAX+EDX-1]       ;  查表!!!
    171. 004FD88D  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]         ;  查表校验后的注册码K
    172. 004FD890  |.  3A4432 FF     CMP AL,BYTE PTR DS:[EDX+ESI-1]       ;  与 K的最后1位 比较
    173. 004FD894  |.  74 03         JE SHORT perfecti.004FD899           ;  光明与黑暗的十字路口!
    174. 004FD896  |.  FF45 F8       INC DWORD PTR SS:[EBP-8]             ;  不要,不要啊!
    175. 004FD899  |>  33C0          XOR EAX,EAX
    176. 004FD89B  |.  5A            POP EDX
    177. 004FD89C  |.  59            POP ECX
    178. 004FD89D  |.  59            POP ECX
    179. 004FD89E  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
    180. 004FD8A1  |.  68 BED84F00   PUSH perfecti.004FD8BE
    181. 004FD8A6  |>  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
    182. 004FD8A9  |.  E8 D265F0FF   CALL perfecti.00403E80
    183. 004FD8AE  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
    184. 004FD8B1  |.  E8 CA65F0FF   CALL perfecti.00403E80
    185. 004FD8B6  \.  C3            RETN
    186. 004FD8B7   .^ E9 D85FF0FF   JMP perfecti.00403894
    187. 004FD8BC   .^ EB E8         JMP SHORT perfecti.004FD8A6
    188. 004FD8BE   .  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
    189. 004FD8C1   .  5E            POP ESI
    190. 004FD8C2   .  5B            POP EBX
    191. 004FD8C3   .  8BE5          MOV ESP,EBP
    192. 004FD8C5   .  5D            POP EBP
    193. 004FD8C6   .  C3            RETN

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



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


    224. 提示点:
    225. 004FD890  CMP AL,BYTE PTR DS:[EDX+ESI-1]       ;  与 K的最后1位 比较



    226. ----------------------------------------------------------------------

    227. 关键CALL第2处:
    228. 004FD8F0  /$  55            PUSH EBP
    229. 004FD8F1  |.  8BEC          MOV EBP,ESP
    230. 004FD8F3  |.  33C9          XOR ECX,ECX
    231. 004FD8F5  |.  51            PUSH ECX
    232. 004FD8F6  |.  51            PUSH ECX
    233. 004FD8F7  |.  51            PUSH ECX
    234. 004FD8F8  |.  51            PUSH ECX
    235. 004FD8F9  |.  51            PUSH ECX
    236. 004FD8FA  |.  53            PUSH EBX
    237. 004FD8FB  |.  56            PUSH ESI
    238. 004FD8FC  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX         ;  (ASCII "Perfect Icon")
    239. 004FD8FF  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX         ;  输入的假码1598753042
    240. 004FD902  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    241. 004FD905  |.  E8 AA69F0FF   CALL perfecti.004042B4
    242. 004FD90A  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]         ;   (ASCII "Perfect Icon")
    243. 004FD90D  |.  E8 A269F0FF   CALL perfecti.004042B4
    244. 004FD912  |.  33C0          XOR EAX,EAX
    245. 004FD914  |.  55            PUSH EBP
    246. 004FD915  |.  68 2BDA4F00   PUSH perfecti.004FDA2B
    247. 004FD91A  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
    248. 004FD91D  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
    249. 004FD920  |.  33F6          XOR ESI,ESI
    250. 004FD922  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    251. 004FD925  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]         ;  输入的假码“1598753046”
    252. 004FD928  |.  E8 07FEFFFF   CALL perfecti.004FD734
    253. 004FD92D  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    254. 004FD930  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
    255. 004FD933  |.  E8 E065F0FF   CALL perfecti.00403F18
    256. 004FD938  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    257. 004FD93B  |.  E8 C067F0FF   CALL perfecti.00404100
    258. 004FD940  |.  83F8 07       CMP EAX,7
    259. 004FD943  |.  7D 0A         JGE SHORT perfecti.004FD94F
    260. 004FD945  |.  BE 0B000000   MOV ESI,0B
    261. 004FD94A  |.  E9 C1000000   JMP perfecti.004FDA10
    262. 004FD94F  |>  837D F8 00    CMP DWORD PTR SS:[EBP-8],0
    263. 004FD953  |.  0F84 B7000000 JE perfecti.004FDA10
    264. 004FD959  |.  33DB          XOR EBX,EBX
    265. 004FD95B  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
    266. 004FD95E  |.  E8 9D67F0FF   CALL perfecti.00404100
    267. 004FD963  |.  48            DEC EAX
    268. 004FD964  |.  85C0          TEST EAX,EAX
    269. 004FD966  |.  7E 13         JLE SHORT perfecti.004FD97B
    270. 004FD968  |.  BA 01000000   MOV EDX,1
    271. 004FD96D  |>  8B4D F8       /MOV ECX,DWORD PTR SS:[EBP-8]        ;   (ASCII "Perfect Icon")
    272. 004FD970  |.  0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1]   ;  依次每一位ASC(不含最后一位)
    273. 004FD975  |.  03D9          |ADD EBX,ECX
    274. 004FD977  |.  42            |INC EDX
    275. 004FD978  |.  48            |DEC EAX
    276. 004FD979  |.^ 75 F2         \JNZ SHORT perfecti.004FD96D         ;  此循环即取固定字符串Perfect Ico的ASC累加和
    277. 004FD97B  |>  8BC3          MOV EAX,EBX                          ;  累加和=404H
    278. 004FD97D  |.  B9 1E000000   MOV ECX,1E
    279. 004FD982  |.  99            CDQ
    280. 004FD983  |.  F7F9          IDIV ECX                             ;  /1E
    281. 004FD985  |.  42            INC EDX                              ;  余数+1
    282. 004FD986  |.  B8 44DA4F00   MOV EAX,perfecti.004FDA44            ;  2345679qwertyupadfghjkzxcvbnms
    283. 004FD98B  |.  8A4410 FF     MOV AL,BYTE PTR DS:[EAX+EDX-1]       ;  查表!
    284. 004FD98F  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
    285. 004FD992  |.  3A42 01       CMP AL,BYTE PTR DS:[EDX+1]           ;  与查表校验后的注册码K的第2位(“9”)比较
    286. 004FD995  |.  74 01         JE SHORT perfecti.004FD998           ;  又一个 光明与黑暗的十字路口!
    287. 004FD997  |.  46            INC ESI
    288. 004FD998  |>  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
    289. 004FD99B  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]         ;   (ASCII "Perfect Icon")
    290. 004FD99E  |.  E8 35B3F0FF   CALL perfecti.00408CD8
    291. 004FD9A3  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
    292. 004FD9A6  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]         ;  注意大小写 (ASCII "perfect icon")
    293. 004FD9A9  |.  8A12          MOV DL,BYTE PTR DS:[EDX]             ;  转换为小写 (ASCII "perfect icon")的第一位
    294. 004FD9AB  |.  E8 7866F0FF   CALL perfecti.00404028
    295. 004FD9B0  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
    296. 004FD9B3  |.  BA 44DA4F00   MOV EDX,perfecti.004FDA44            ;  2345679qwertyupadfghjkzxcvbnms
    297. 004FD9B8  |.  E8 2F6AF0FF   CALL perfecti.004043EC
    298. 004FD9BD  |.  85C0          TEST EAX,EAX                         ;  在表中的位置。本例(=F)
    299. 004FD9BF  |.  7E 11         JLE SHORT perfecti.004FD9D2
    300. 004FD9C1  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
    301. 004FD9C4  |.  E8 0769F0FF   CALL perfecti.004042D0
    302. 004FD9C9  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]         ;  转换为小写的(ASCII "perfect icon")
    303. 004FD9CC  |.  8A12          MOV DL,BYTE PTR DS:[EDX]             ;  转换为小写 (ASCII "perfect icon")的第一位
    304. 004FD9CE  |.  8810          MOV BYTE PTR DS:[EAX],DL            
    305. 004FD9D0  |.  EB 3E         JMP SHORT perfecti.004FDA10
    306. 004FD9D2  |>  33DB          XOR EBX,EBX
    307. 004FD9D4  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
    308. 004FD9D7  |.  E8 2467F0FF   CALL perfecti.00404100
    309. 004FD9DC  |.  48            DEC EAX
    310. 004FD9DD  |.  85C0          TEST EAX,EAX
    311. 004FD9DF  |.  7E 13         JLE SHORT perfecti.004FD9F4
    312. 004FD9E1  |.  BA 01000000   MOV EDX,1
    313. 004FD9E6  |>  8B4D F8       /MOV ECX,DWORD PTR SS:[EBP-8]
    314. 004FD9E9  |.  0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1]
    315. 004FD9EE  |.  33D9          |XOR EBX,ECX
    316. 004FD9F0  |.  42            |INC EDX
    317. 004FD9F1  |.  48            |DEC EAX
    318. 004FD9F2  |.^ 75 F2         \JNZ SHORT perfecti.004FD9E6
    319. 004FD9F4  |>  8BC3          MOV EAX,EBX
    320. 004FD9F6  |.  B9 1E000000   MOV ECX,1E
    321. 004FD9FB  |.  99            CDQ
    322. 004FD9FC  |.  F7F9          IDIV ECX
    323. 004FD9FE  |.  42            INC EDX
    324. 004FD9FF  |.  B8 44DA4F00   MOV EAX,perfecti.004FDA44            ;  2345679qwertyupadfghjkzxcvbnms
    325. 004FDA04  |.  8A4410 FF     MOV AL,BYTE PTR DS:[EAX+EDX-1]
    326. 004FDA08  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
    327. 004FDA0B  |.  3A02          CMP AL,BYTE PTR DS:[EDX]             ;  查表校验后的注册码K的第1位!!!
    328. 004FDA0D  |.  74 01         JE SHORT perfecti.004FDA10
    329. 004FDA0F  |.  46            INC ESI
    330. 004FDA10  |>  33C0          XOR EAX,EAX
    331. 004FDA12  |.  5A            POP EDX
    332. 004FDA13  |.  59            POP ECX
    333. 004FDA14  |.  59            POP ECX
    334. 004FDA15  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
    335. 004FDA18  |.  68 32DA4F00   PUSH perfecti.004FDA32
    336. 004FDA1D  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
    337. 004FDA20  |.  BA 05000000   MOV EDX,5
    338. 004FDA25  |.  E8 7A64F0FF   CALL perfecti.00403EA4
    339. 004FDA2A  \.  C3            RETN
    340. 004FDA2B   .^ E9 645EF0FF   JMP perfecti.00403894
    341. 004FDA30   .^ EB EB         JMP SHORT perfecti.004FDA1D
    342. 004FDA32   .  8BC6          MOV EAX,ESI
    343. 004FDA34   .  5E            POP ESI
    344. 004FDA35   .  5B            POP EBX
    345. 004FDA36   .  8BE5          MOV ESP,EBP
    346. 004FDA38   .  5D            POP EBP
    347. 004FDA39   .  C3            RETN


    348. 提示点:
    349. 004FD992  CMP AL,BYTE PTR DS:[EDX+1]           ;  “w”与查表校验后的注册码K的第2位(“9”)比较
    350. 004FDA0B  CMP AL,BYTE PTR DS:[EDX]             ;  “p”查表校验后的注册码K的第1位!!!
    351. ------------------------------------------------------------------------------------------------




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

    357. 附表:
    358. 2345679qwertyupadfghjkzxcvbnms

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






    复制代码
    OK.GIF

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2012-8-17 13:00:27 | 显示全部楼层
    前排学习下,谢谢分享心得
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2025-1-13 20:56
  • 签到天数: 1993 天

    [LV.Master]伴坛终老

    发表于 2012-8-17 22:23:07 | 显示全部楼层
    谢谢G大,前排学习了!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2012-8-20 21:33:13 | 显示全部楼层
    不错啊,学习下!
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-5-31 13:17
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2012-8-29 19:22:32 | 显示全部楼层
    分析的不错,支持
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-4-10 00:28
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    发表于 2012-10-29 12:15:45 | 显示全部楼层
    及时雨啊,谢谢老大。
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2019-5-7 09:43
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2012-11-4 20:39:17 | 显示全部楼层
    学习了,有很大收获。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表