飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5480|回复: 11

[原创] 小菜对 SomkeFX 的 KeygenMe v1.0 的简单算法分析过程

[复制链接]
  • TA的每日心情
    开心
    2024-5-12 21:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    发表于 2014-3-9 20:35:44 | 显示全部楼层 |阅读模式
    本帖最后由 cxj98 于 2014-3-9 21:05 编辑

    本小菜初学算法分析,所以到处网上搜索一些简单的 KeyGenMe。功夫不负有心人,终于在某 CrackMe 网站找到一款比较适合初学者入门的算法分析软件。

    下面本小菜就开始这个 KeygenMe 的分析计算过程。

    主程序载入OD后,然后F9直接跑起来,习惯性地输入用户名:cxj98,假码:1234567890,点击 Unlock 按扭,弹出错误提示:


    1. ---------------------------
    2. Invalid Serial
    3. ---------------------------
    4. Insert Coin Try Again!
    5. ---------------------------
    6. OK   
    7. ---------------------------
    复制代码


    有错误提示框,好办,下 bp MessageboxA 断点,重新点击 Unlock 按扭。

    程序果断中断下来,断在


    1. 76DFFD1E >  8BFF            MOV     EDI, EDI                                 ; smokefx.004589F8
    2. 76DFFD20    55              PUSH    EBP
    3. 76DFFD21    8BEC            MOV     EBP, ESP
    4. 76DFFD23    6A 00           PUSH    0x0
    5. 76DFFD25    FF75 14         PUSH    DWORD PTR SS:[EBP+0x14]
    6. 76DFFD28    FF75 10         PUSH    DWORD PTR SS:[EBP+0x10]
    7. 76DFFD2B    FF75 0C         PUSH    DWORD PTR SS:[EBP+0xC]
    8. 76DFFD2E    FF75 08         PUSH    DWORD PTR SS:[EBP+0x8]
    9. 76DFFD31    E8 A0FFFFFF     CALL    user32.MessageBoxExA
    10. 76DFFD36    5D              POP     EBP
    复制代码


    右下角堆栈中右键菜单里选择反汇编窗口中跟随,


    1. 0018FAF4   004545BF  /CALL 到 MessageBoxA 来自 smokefx.004545BA
    2. 0018FAF8   000E1C24  |hOwner = 000E1C24 ('SmokeFX',class='TApplication')
    3. 0018FAFC   01C89A7C  |Text = "Insert Coin Try Again!"
    4. 0018FB00   004589F8  |Title = "Invalid Serial"
    5. 0018FB04   00000030  \Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
    6. 0018FB08   0018FB80  指向下一个 SEH 记录的指针
    7. 0018FB0C   00454629  SE处理程序
    8. 0018FB10   0018FB74
    复制代码


    来到


    1. 004545B0  |.  53            PUSH    EBX                                      ; /Style
    2. 004545B1  |.  57            PUSH    EDI                                      ; |Title
    3. 004545B2  |.  56            PUSH    ESI                                      ; |Text
    4. 004545B3  |.  8B45 FC       MOV     EAX, DWORD PTR SS:[EBP-0x4]              ; |
    5. 004545B6  |.  8B40 30       MOV     EAX, DWORD PTR DS:[EAX+0x30]             ; |
    6. 004545B9  |.  50            PUSH    EAX                                      ; |hOwner
    7. 004545BA  |.  E8 C91FFBFF   CALL    <JMP.&user32.MessageBoxA>                ; \MessageBoxA
    复制代码


    往上找段首:


    1. 004544D4  /[        DISCUZ_CODE_88        ]nbsp; 55            PUSH    EBP                                      ;  // 段首
    2. 004544D5  |.  8BEC          MOV     EBP, ESP
    3. 004544D7  |.  83C4 AC       ADD     ESP, -0x54
    4. 004544DA  |.  53            PUSH    EBX
    复制代码


    发现多处调用:


    1. 本地调用来自 004546D1, 0045878D, 00458868, 004588EB, 00458938, 00458982
    复制代码


    不管是正确提示,错误提示,注册码长度不对提示,都会调到到这里,习惯性地按下 Ctrl + K, 打开 查看调用树,如下:


    1. Call tree
    2. 调用来自                          函数过程                          调用                              注释
    3. smokefx.004546D1                  smokefx.004544D4                   > smokefx.00402278               ???
    4. smokefx.0045878D                                                     > smokefx.004026DC
    5. smokefx.00458868                                                     > smokefx.004027C0
    6. smokefx.004588EB                                                     > smokefx.00402818
    7. smokefx.00458938                                                     > smokefx.00403AC8               Leaf
    8. smokefx.00458982                                                     > smokefx.00403AF0               ???
    9.                                                                      > smokefx.00403C60               Leaf
    10.                                                                      > smokefx.00403CBC               Leaf
    11.                                                                      > smokefx.00403CEC
    12.                                                                      > smokefx.00403D78
    13.                                                                      > smokefx.00403E50
    14.                                                                      > smokefx.00403E5C
    15.                                                                      > smokefx.00405464               ???
    16.                                                                      > smokefx.00405BAC
    17.                                                                      > smokefx.00405BB8               Leaf
    18.                                                                      > smokefx.00405BC0
    19.                                                                      > smokefx.00405C04
    20.                                                                     smokefx.0044B168                  Leaf
    21.                                                                     smokefx.0044B170                  Leaf
    22.                                                                     smokefx.0044B24C                  ???
    23.                                                                     smokefx.0044B300
    24.                                                                     smokefx.004533E8                  Leaf
    25.                                                                      > kernel32.TlsGetValue           ???
    26.                                                                      > kernel32.WriteFile             ???
    27.                                                                      > kernel32.TlsSetValue           ???
    28.                                                                      > kernel32.LocalAlloc            ???
    29.                                                                      > kernel32.FreeLibrary           ???
    30.                                                                      > kernel32.GetStdHandle          ???
    31.                                                                      > user32.IsWindow                ???
    32.                                                                     user32.GetWindowRect              ???
    33.                                                                     user32.SetWindowPos               ???
    34.                                                                      > user32.EnableWindow            ???
    35.                                                                     user32.SetActiveWindow            ???
    36.                                                                     user32.GetActiveWindow            ???
    37.                                                                     user32.MessageBoxA                ???
    38.                                                                     未知目标
    复制代码


    右键菜单中,选择 在每个调用上设置断点,然后继续 F9 跑起来,再次点击 Unlock 按扭,看看到底先在哪个调用上断下来。

    经过分析,发现果断断在了如下位置:


    1. 004588F5  |> \6A 30         PUSH    0x30                                     ;  // 注册失败提示处
    2. 004588F7  |.  8D4D D4       LEA     ECX, DWORD PTR SS:[EBP-0x2C]
    3. 004588FA  |.  A1 E0A14500   MOV     EAX, DWORD PTR DS:[0x45A1E0]
    4. 004588FF  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    5. 00458901  |.  8B80 FC020000 MOV     EAX, DWORD PTR DS:[EAX+0x2FC]
    6. 00458907  |.  8B80 18020000 MOV     EAX, DWORD PTR DS:[EAX+0x218]
    7. 0045890D  |.  BA 05000000   MOV     EDX, 0x5
    8. 00458912  |.  8B18          MOV     EBX, DWORD PTR DS:[EAX]
    9. 00458914  |.  FF53 0C       CALL    NEAR DWORD PTR DS:[EBX+0xC]
    10. 00458917  |.  8B45 D4       MOV     EAX, DWORD PTR SS:[EBP-0x2C]
    11. 0045891A  |.  8D55 D8       LEA     EDX, DWORD PTR SS:[EBP-0x28]
    12. 0045891D  |.  E8 FEF9FFFF   CALL    smokefx.00458320
    13. 00458922  |.  8B45 D8       MOV     EAX, DWORD PTR SS:[EBP-0x28]             ;  // 注册码不正确,请重试!
    14. 00458925  |.  E8 FEB9FAFF   CALL    smokefx.00404328
    15. 0045892A  |.  8BD0          MOV     EDX, EAX
    16. 0045892C  |.  B9 F8894500   MOV     ECX, smokefx.004589F8
    17. 00458931  |.  A1 C4A04500   MOV     EAX, DWORD PTR DS:[0x45A0C4]
    18. 00458936  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    19. 00458938  |.  E8 97BBFFFF   CALL    smokefx.004544D4                         ;  // 经过运行,发现果断在此处断了下来。
    复制代码


    往上找段首,然后疯狂按 F8 一路分析下去:


    1. 004587CC  /.  55            PUSH    EBP                                      ;  // 段首
    2. 004587CD  |.  8BEC          MOV     EBP, ESP
    3. 004587CF  |.  B9 06000000   MOV     ECX, 0x6
    4. 004587D4  |>  6A 00         /PUSH    0x0
    5. 004587D6  |.  6A 00         |PUSH    0x0
    6. 004587D8  |.  49            |DEC     ECX
    7. 004587D9  |.^ 75 F9         \JNZ     SHORT smokefx.004587D4
    8. 004587DB  |.  51            PUSH    ECX
    9. 004587DC  |.  53            PUSH    EBX
    10. 004587DD  |.  8BD8          MOV     EBX, EAX
    11. 004587DF  |.  33C0          XOR     EAX, EAX
    12. 004587E1  |.  55            PUSH    EBP
    13. 004587E2  |.  68 D4894500   PUSH    smokefx.004589D4
    14. 004587E7  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
    15. 004587EA  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
    16. 004587ED  |.  8D55 FC       LEA     EDX, DWORD PTR SS:[EBP-0x4]
    17. 004587F0  |.  8B83 14030000 MOV     EAX, DWORD PTR DS:[EBX+0x314]
    18. 004587F6  |.  E8 CDBEFDFF   CALL    smokefx.004346C8
    19. 004587FB  |.  837D FC 00    CMP     DWORD PTR SS:[EBP-0x4], 0x0              ;  // 用户名输入了木有?
    20. 004587FF  |.  0F84 3A010000 JE      smokefx.0045893F                         ;  // 木有的话,跳到提示你要输入用户名处,否则工作继续。
    21. 00458805  |.  8D55 F8       LEA     EDX, DWORD PTR SS:[EBP-0x8]
    22. 00458808  |.  8B83 14030000 MOV     EAX, DWORD PTR DS:[EBX+0x314]
    23. 0045880E  |.  E8 B5BEFDFF   CALL    smokefx.004346C8
    24. 00458813  |.  8B45 F8       MOV     EAX, DWORD PTR SS:[EBP-0x8]
    25. 00458816  |.  E8 0DBBFAFF   CALL    smokefx.00404328
    26. 0045881B  |.  E8 ECFBFAFF   CALL    smokefx.0040840C
    27. 00458820  |.  83F8 04       CMP     EAX, 0x4                                 ;  // 用户名长度是否大于4位数?
    28. 00458823  |.  73 4D         JNB     SHORT smokefx.00458872                   ;  // 如果大于4位就跳,否则执行下面的出错提示
    29. 00458825  |.  6A 10         PUSH    0x10
    30. 00458827  |.  8D4D F0       LEA     ECX, DWORD PTR SS:[EBP-0x10]
    31. 0045882A  |.  A1 E0A14500   MOV     EAX, DWORD PTR DS:[0x45A1E0]
    32. 0045882F  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    33. 00458831  |.  8B80 FC020000 MOV     EAX, DWORD PTR DS:[EAX+0x2FC]
    34. 00458837  |.  8B80 18020000 MOV     EAX, DWORD PTR DS:[EAX+0x218]
    35. 0045883D  |.  BA 04000000   MOV     EDX, 0x4
    36. 00458842  |.  8B18          MOV     EBX, DWORD PTR DS:[EAX]
    37. 00458844  |.  FF53 0C       CALL    NEAR DWORD PTR DS:[EBX+0xC]
    38. 00458847  |.  8B45 F0       MOV     EAX, DWORD PTR SS:[EBP-0x10]
    39. 0045884A  |.  8D55 F4       LEA     EDX, DWORD PTR SS:[EBP-0xC]
    40. 0045884D  |.  E8 CEFAFFFF   CALL    smokefx.00458320
    41. 00458852  |.  8B45 F4       MOV     EAX, DWORD PTR SS:[EBP-0xC]              ;  // 出错:用户名字符数必须大于4位数
    42. 00458855  |.  E8 CEBAFAFF   CALL    smokefx.00404328
    43. 0045885A  |.  8BD0          MOV     EDX, EAX
    44. 0045885C  |.  B9 E0894500   MOV     ECX, smokefx.004589E0                    ;  ASCII 53,"mokeFX ERROR"
    45. 00458861  |.  A1 C4A04500   MOV     EAX, DWORD PTR DS:[0x45A0C4]
    46. 00458866  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    47. 00458868  |.  E8 67BCFFFF   CALL    smokefx.004544D4                         ;  // 调用 出错提示框
    48. 0045886D  |.  E9 15010000   JMP     smokefx.00458987
    49. 00458872  |>  8D55 EC       LEA     EDX, DWORD PTR SS:[EBP-0x14]             ;  // 用户名如果大于4位数,则从这里继续往下执行。
    50. 00458875  |.  8B83 18030000 MOV     EAX, DWORD PTR DS:[EBX+0x318]
    51. 0045887B  |.  E8 48BEFDFF   CALL    smokefx.004346C8
    52. 00458880  |.  8B45 EC       MOV     EAX, DWORD PTR SS:[EBP-0x14]             ;  // 获取 假码给 EAX
    53. 00458883  |.  50            PUSH    EAX
    54. 00458884  |.  8D55 E4       LEA     EDX, DWORD PTR SS:[EBP-0x1C]
    55. 00458887  |.  8B83 14030000 MOV     EAX, DWORD PTR DS:[EBX+0x314]
    56. 0045888D  |.  E8 36BEFDFF   CALL    smokefx.004346C8
    57. 00458892  |.  8B45 E4       MOV     EAX, DWORD PTR SS:[EBP-0x1C]             ;  // 获取 用户名给 EAX
    58. 00458895  |.  8D55 E8       LEA     EDX, DWORD PTR SS:[EBP-0x18]
    59. 00458898  |.  E8 4BFBFFFF   CALL    smokefx.004583E8                         ;  // 核心算法,必须 F7 进入瞅瞅。
    复制代码


    F8 走到核心算法,按 F7 进去瞅瞅吧!然后又是从算法的段首开始,一路疯狂地按 F8 继续分析下去:


    1. 004583E8  /[        DISCUZ_CODE_93        ]nbsp; 55            PUSH    EBP                                      ;  // F7 进入后,这里就是算法的段首
    2. 004583E9  |.  8BEC          MOV     EBP, ESP
    3. 004583EB  |.  33C9          XOR     ECX, ECX
    4. 004583ED  |.  51            PUSH    ECX
    5. 004583EE  |.  51            PUSH    ECX
    6. 004583EF  |.  51            PUSH    ECX
    7. 004583F0  |.  51            PUSH    ECX
    8. 004583F1  |.  51            PUSH    ECX
    9. 004583F2  |.  53            PUSH    EBX
    10. 004583F3  |.  56            PUSH    ESI
    11. 004583F4  |.  8BF2          MOV     ESI, EDX
    12. 004583F6  |.  8945 FC       MOV     DWORD PTR SS:[EBP-0x4], EAX
    13. 004583F9  |.  8B45 FC       MOV     EAX, DWORD PTR SS:[EBP-0x4]
    14. 004583FC  |.  E8 17BFFAFF   CALL    smokefx.00404318
    15. 00458401  |.  33C0          XOR     EAX, EAX                                 ;  // EAX 与 EAX 异或,相同值为 0
    16. 00458403  |.  55            PUSH    EBP
    17. 00458404  |.  68 85844500   PUSH    smokefx.00458485
    18. 00458409  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
    19. 0045840C  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
    20. 0045840F  |.  8B45 FC       MOV     EAX, DWORD PTR SS:[EBP-0x4]              ;  // 用户名给 EAX
    21. 00458412  |.  E8 11BFFAFF   CALL    smokefx.00404328
    22. 00458417  |.  E8 F0FFFAFF   CALL    smokefx.0040840C
    23. 0045841C  |.  8BD8          MOV     EBX, EAX                                 ;  // 用户名长度给 EBX
    24. 0045841E  |.  8D55 F8       LEA     EDX, DWORD PTR SS:[EBP-0x8]
    25. 00458421  |.  8BC3          MOV     EAX, EBX                                 ;  // 用户名长度又给 EAX
    26. 00458423  |.  E8 B4F9FAFF   CALL    smokefx.00407DDC
    27. 00458428  |.  FF75 F8       PUSH    DWORD PTR SS:[EBP-0x8]                   ;  // 长度值 (即:cxj98 = 5)
    28. 0045842B  |.  8D55 F4       LEA     EDX, DWORD PTR SS:[EBP-0xC]
    29. 0045842E  |.  69C3 9A020000 IMUL    EAX, EBX, 0x29A                          ;  // EAX= EBX * 666 (EBX 为用户名长度)
    30. 00458434  |.  E8 A3F9FAFF   CALL    smokefx.00407DDC
    31. 00458439  |.  FF75 F4       PUSH    DWORD PTR SS:[EBP-0xC]                   ;  // 计算出值 (用户名 cxj98 为5位数, 5 * 666 = 3330)
    32. 0045843C  |.  8D55 F0       LEA     EDX, DWORD PTR SS:[EBP-0x10]
    33. 0045843F  |.  69C3 FA000000 IMUL    EAX, EBX, 0xFA                           ;  // EAX = EBX * 250 (EBX 为用户名长度)
    34. 00458445  |.  E8 92F9FAFF   CALL    smokefx.00407DDC
    35. 0045844A  |.  FF75 F0       PUSH    DWORD PTR SS:[EBP-0x10]                  ;  // 计算出值 (用户名 cxj98 为5位数, 5 * 250 = 1250)
    36. 0045844D  |.  8D55 EC       LEA     EDX, DWORD PTR SS:[EBP-0x14]
    37. 00458450  |.  69C3 10270000 IMUL    EAX, EBX, 0x2710                         ;  // EAX= EBX * 10000 (EBX 为用户名长度)
    38. 00458456  |.  E8 81F9FAFF   CALL    smokefx.00407DDC
    39. 0045845B  |.  FF75 EC       PUSH    DWORD PTR SS:[EBP-0x14]                  ;  // 计算出值 (用户名 cxj98 为5位数, 5 * 10000 = 50000)
    40. 0045845E  |.  8BC6          MOV     EAX, ESI
    41. 00458460  |.  BA 04000000   MOV     EDX, 0x4
    42. 00458465  |.  E8 7EBDFAFF   CALL    smokefx.004041E8
    43. 0045846A  |.  33C0          XOR     EAX, EAX
    44. 0045846C  |.  5A            POP     EDX
    45. 0045846D  |.  59            POP     ECX
    46. 0045846E  |.  59            POP     ECX
    47. 0045846F  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
    48. 00458472  |.  68 8C844500   PUSH    smokefx.0045848C
    49. 00458477  |>  8D45 EC       LEA     EAX, DWORD PTR SS:[EBP-0x14]
    50. 0045847A  |.  BA 05000000   MOV     EDX, 0x5
    51. 0045847F  |.  E8 08BAFAFF   CALL    smokefx.00403E8C                         ;  // 注册码循环比较 call, 这里可以 F7 进入瞅瞅
    52. 00458484  \.  C3            RETN
    53. 00458485   .^ E9 E2B3FAFF   JMP     smokefx.0040386C
    54. 0045848A   .^ EB EB         JMP     SHORT smokefx.00458477
    55. 0045848C   .  5E            POP     ESI
    56. 0045848D   .  5B            POP     EBX
    57. 0045848E   .  8BE5          MOV     ESP, EBP
    58. 00458490   .  5D            POP     EBP
    59. 00458491   .  C3            RETN
    复制代码


    F8走到上面这里,也就走出了整个核心算法,来到下面的地址,还是继续疯狂按 F8 一路分析下去:


    1. 0045889D  |.  8B55 E8       MOV     EDX, DWORD PTR SS:[EBP-0x18]             ;  // 弹出真码,(即:53330125050000),此处可内存注册机
    2. 004588A0  |.  58            POP     EAX                                      ;  // EAX 弹出假码 (即:1234567890)
    3. 004588A1  |.  E8 CEB9FAFF   CALL    smokefx.00404274                         ;  // 真假码比较 call,此处无须 F7 进入瞅瞅,可以略过,当然有兴趣的也可以进去一观到底。
    4. 004588A6  |.  75 4D         JNZ     SHORT smokefx.004588F5                   ;  // 如果真假码不匹配,则跳向 注册码错误 提示处!
    5. 004588A8  |.  6A 40         PUSH    0x40                                     ;  // 注册成功提示处
    6. 004588AA  |.  8D4D DC       LEA     ECX, DWORD PTR SS:[EBP-0x24]
    7. 004588AD  |.  A1 E0A14500   MOV     EAX, DWORD PTR DS:[0x45A1E0]
    8. 004588B2  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    9. 004588B4  |.  8B80 FC020000 MOV     EAX, DWORD PTR DS:[EAX+0x2FC]
    10. 004588BA  |.  8B80 18020000 MOV     EAX, DWORD PTR DS:[EAX+0x218]
    11. 004588C0  |.  BA 06000000   MOV     EDX, 0x6
    12. 004588C5  |.  8B18          MOV     EBX, DWORD PTR DS:[EAX]
    13. 004588C7  |.  FF53 0C       CALL    NEAR DWORD PTR DS:[EBX+0xC]
    14. 004588CA  |.  8B45 DC       MOV     EAX, DWORD PTR SS:[EBP-0x24]
    15. 004588CD  |.  8D55 E0       LEA     EDX, DWORD PTR SS:[EBP-0x20]
    16. 004588D0  |.  E8 4BFAFFFF   CALL    smokefx.00458320
    17. 004588D5  |.  8B45 E0       MOV     EAX, DWORD PTR SS:[EBP-0x20]             ;  // 恭喜你成功计算出注册码。
    18. 004588D8  |.  E8 4BBAFAFF   CALL    smokefx.00404328
    19. 004588DD  |.  8BD0          MOV     EDX, EAX
    20. 004588DF  |.  B9 F0894500   MOV     ECX, smokefx.004589F0
    21. 004588E4  |.  A1 C4A04500   MOV     EAX, DWORD PTR DS:[0x45A0C4]
    22. 004588E9  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    23. 004588EB  |.  E8 E4BBFFFF   CALL    smokefx.004544D4
    24. 004588F0  |.  E9 92000000   JMP     smokefx.00458987
    25. 004588F5  |>  6A 30         PUSH    0x30                                     ;  // 注册失败提示处
    26. 004588F7  |.  8D4D D4       LEA     ECX, DWORD PTR SS:[EBP-0x2C]
    27. 004588FA  |.  A1 E0A14500   MOV     EAX, DWORD PTR DS:[0x45A1E0]
    28. 004588FF  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    29. 00458901  |.  8B80 FC020000 MOV     EAX, DWORD PTR DS:[EAX+0x2FC]
    30. 00458907  |.  8B80 18020000 MOV     EAX, DWORD PTR DS:[EAX+0x218]
    31. 0045890D  |.  BA 05000000   MOV     EDX, 0x5
    32. 00458912  |.  8B18          MOV     EBX, DWORD PTR DS:[EAX]
    33. 00458914  |.  FF53 0C       CALL    NEAR DWORD PTR DS:[EBX+0xC]
    34. 00458917  |.  8B45 D4       MOV     EAX, DWORD PTR SS:[EBP-0x2C]
    35. 0045891A  |.  8D55 D8       LEA     EDX, DWORD PTR SS:[EBP-0x28]
    36. 0045891D  |.  E8 FEF9FFFF   CALL    smokefx.00458320
    37. 00458922  |.  8B45 D8       MOV     EAX, DWORD PTR SS:[EBP-0x28]             ;  // 注册码不正确,请重试!
    38. 00458925  |.  E8 FEB9FAFF   CALL    smokefx.00404328
    39. 0045892A  |.  8BD0          MOV     EDX, EAX
    40. 0045892C  |.  B9 F8894500   MOV     ECX, smokefx.004589F8
    41. 00458931  |.  A1 C4A04500   MOV     EAX, DWORD PTR DS:[0x45A0C4]
    42. 00458936  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    43. 00458938  |.  E8 97BBFFFF   CALL    smokefx.004544D4                         ;  // 经过运行,发现果断在此处断了下来。
    44. 0045893D  |.  EB 48         JMP     SHORT smokefx.00458987
    45. 0045893F  |>  6A 20         PUSH    0x20
    46. 00458941  |.  8D4D CC       LEA     ECX, DWORD PTR SS:[EBP-0x34]
    47. 00458944  |.  A1 E0A14500   MOV     EAX, DWORD PTR DS:[0x45A1E0]
    48. 00458949  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    49. 0045894B  |.  8B80 FC020000 MOV     EAX, DWORD PTR DS:[EAX+0x2FC]
    50. 00458951  |.  8B80 18020000 MOV     EAX, DWORD PTR DS:[EAX+0x218]
    51. 00458957  |.  BA 03000000   MOV     EDX, 0x3
    52. 0045895C  |.  8B18          MOV     EBX, DWORD PTR DS:[EAX]
    53. 0045895E  |.  FF53 0C       CALL    NEAR DWORD PTR DS:[EBX+0xC]
    54. 00458961  |.  8B45 CC       MOV     EAX, DWORD PTR SS:[EBP-0x34]
    55. 00458964  |.  8D55 D0       LEA     EDX, DWORD PTR SS:[EBP-0x30]
    56. 00458967  |.  E8 B4F9FFFF   CALL    smokefx.00458320
    57. 0045896C  |.  8B45 D0       MOV     EAX, DWORD PTR SS:[EBP-0x30]
    58. 0045896F  |.  E8 B4B9FAFF   CALL    smokefx.00404328
    59. 00458974  |.  8BD0          MOV     EDX, EAX
    60. 00458976  |.  B9 F0894500   MOV     ECX, smokefx.004589F0
    61. 0045897B  |.  A1 C4A04500   MOV     EAX, DWORD PTR DS:[0x45A0C4]
    62. 00458980  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
    63. 00458982  |.  E8 4DBBFFFF   CALL    smokefx.004544D4
    64. 00458987  |>  33C0          XOR     EAX, EAX
    65. 00458989  |.  5A            POP     EDX
    66. 0045898A  |.  59            POP     ECX
    67. 0045898B  |.  59            POP     ECX
    68. 0045898C  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
    69. 0045898F  |.  68 DB894500   PUSH    smokefx.004589DB
    70. 00458994  |>  8D45 CC       LEA     EAX, DWORD PTR SS:[EBP-0x34]
    71. 00458997  |.  BA 06000000   MOV     EDX, 0x6
    72. 0045899C  |.  E8 EBB4FAFF   CALL    smokefx.00403E8C
    73. 004589A1  |.  8D45 E4       LEA     EAX, DWORD PTR SS:[EBP-0x1C]
    74. 004589A4  |.  E8 BFB4FAFF   CALL    smokefx.00403E68
    75. 004589A9  |.  8D45 E8       LEA     EAX, DWORD PTR SS:[EBP-0x18]
    76. 004589AC  |.  E8 B7B4FAFF   CALL    smokefx.00403E68
    77. 004589B1  |.  8D45 EC       LEA     EAX, DWORD PTR SS:[EBP-0x14]
    78. 004589B4  |.  E8 AFB4FAFF   CALL    smokefx.00403E68
    79. 004589B9  |.  8D45 F0       LEA     EAX, DWORD PTR SS:[EBP-0x10]
    80. 004589BC  |.  BA 02000000   MOV     EDX, 0x2
    81. 004589C1  |.  E8 C6B4FAFF   CALL    smokefx.00403E8C
    82. 004589C6  |.  8D45 F8       LEA     EAX, DWORD PTR SS:[EBP-0x8]
    83. 004589C9  |.  BA 02000000   MOV     EDX, 0x2
    84. 004589CE  |.  E8 B9B4FAFF   CALL    smokefx.00403E8C
    85. 004589D3  \.  C3            RETN
    复制代码


    至此,整个算法分析完成,所以对算法有了一个大概的了解。

    下面我们就来总结一下这个 KeygenMe 的算法:

    注册码 = 用户名长度 & 用户名长度 * 666 & 用户名长度 * 250 & 用户名长度 * 10000
    即: sn = lenth(UserName) & Lenth(UserName) * 666 & Lenth(UserName) * 250 & Lenth(UserName) * 10000
    因为 cxj98 = 5 位数,
    所以 5 & 5 * 666 & 5 * 250 & 5 * 10000 = 5 3330 1250 50000

    因此计算出来的注册码为:53330125050000

    将计算出来的注册码输入进去,再次点击 Unlock 按扭,果断弹出:


    1. ---------------------------
    2. SmokeFX
    3. ---------------------------
    4. Congratulations you beat the code :) regards, Wayne Modz
    5. ---------------------------
    6. OK   
    7. ---------------------------
    复制代码


    完毕收工。

    本文由 cxj98 原创发表,如果要转载,请保留完整的破文内容等信息,谢谢。

    KeygenMe 本地下载: SmokeFX KeygenMe v1.0.rar (226.81 KB, 下载次数: 5)








      

    评分

    参与人数 2威望 +8 飘云币 +8 收起 理由
    GGLHY + 4 + 4 赞一个!
    飞天 + 4 + 4 感谢原创,支持飘云阁!

    查看全部评分

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

    [LV.4]偶尔看看III

    发表于 2014-3-9 20:38:35 | 显示全部楼层
    第一次离大牛这么近

    点评

    哪敢跟大***啊,本人真心是小菜。  发表于 2014-3-9 20:49
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

    发表于 2014-3-9 20:38:58 | 显示全部楼层

    都分析算法了
    PYG19周年生日快乐!
  • TA的每日心情

    2024-5-9 09:23
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-3-9 20:58:41 | 显示全部楼层
    大牛啊,又看到你了。在那都能看到你犀利的身影啊。 膜拜的。收我为徒吧。。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    昨天 19:57
  • 签到天数: 1419 天

    [LV.10]以坛为家III

    发表于 2014-3-9 20:59:38 | 显示全部楼层
    cxj98是个大牛呀,吾爱常见。
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    6 小时前
  • 签到天数: 2598 天

    [LV.Master]伴坛终老

    发表于 2014-3-9 21:00:50 | 显示全部楼层
    都往算法方向了,这个非常耗费时间的。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-6-7 19:27
  • 签到天数: 560 天

    [LV.9]以坛为家II

    发表于 2014-3-9 21:21:25 | 显示全部楼层
    这样可以更好的学习下,谢谢老师。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-4-10 00:28
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    发表于 2014-3-9 21:36:02 | 显示全部楼层

    第一次离大牛这么近
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2014-3-10 18:09:42 | 显示全部楼层
    不错,不错,支持下
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2017-3-10 20:59
  • 签到天数: 243 天

    [LV.8]以坛为家I

    发表于 2014-3-28 14:03:23 | 显示全部楼层
    来学习一下了,支持大牛
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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