首页
社区
课程
招聘
[原创]超级XXXX专家 v1.10 算法分析
发表于: 2014-2-12 13:41 5371

[原创]超级XXXX专家 v1.10 算法分析

2014-2-12 13:41
5371
【破文标题】超级XXXX专家 v1.10 算法分析
【破文作者】cxj98
【作者邮箱】
【作者主页】
【破解工具】OD 1.10 飘云修改版
【破解平台】Win 7 x64 Ultimate
【软件名称】超级xxxx专家 v1.10
【软件大小】自己看
【原版下载】自行搜索下载
【保护方式】无
【软件简介】自己查百度

【破解声明】本文仅供研究学习,本人对因这篇文章而导致的一切后果,不承担任何法律责任。本文中的不足之处
------------------------------------------------------------------------
【破解过程】载入OD后,没看到任何的壳提示,目测标准的Delphi程序入口,F9直接跑起来,输入用户名:cxj98,假码:1234567890,点击 "确定"按扭,弹出提示:注册码不正确,请检查注册码是否输错!

对于有消息提示的,可以下 bp MessageboxA 断点,再次点确定,程序果断断下来,堆栈中右键选择反汇编窗口中跟随,来到

00588364  |.  E8 8FF3E7FF   CALL    <JMP.&user32.MessageBoxA>        ; \MessageBoxA
00588369  |.  8B83 4C040000 MOV     EAX, DWORD PTR DS:[EBX+0x44C]

往上看,

0058833C  |.  E8 EFCDFEFF   CALL    ScreenCa.00575130
00588341  |.  8B83 EC040000 MOV     EAX, DWORD PTR DS:[EBX+0x4EC]
00588347  |.  E8 84CDFEFF   CALL    ScreenCa.005750D0                ;  // 关键 call,这里F7进入看看
0058834C  |.  84C0          TEST    AL, AL                           ;  // 决定 al 是否要跳转
0058834E  |.  75 29         JNZ     SHORT ScreenCa.00588379
00588350  |.  6A 40         PUSH    0x40                             ;  // 注册成功提示
00588352  |.  68 DC835800   PUSH    ScreenCa.005883DC
00588357  |.  68 1C845800   PUSH    ScreenCa.0058841C
0058835C  |.  8BC3          MOV     EAX, EBX
0058835E  |.  E8 E1F9EDFF   CALL    ScreenCa.00467D44
00588363  |.  50            PUSH    EAX                              ; |hOwner
00588364  |.  E8 8FF3E7FF   CALL    <JMP.&user32.MessageBoxA>        ; \MessageBoxA
00588369  |.  8B83 4C040000 MOV     EAX, DWORD PTR DS:[EBX+0x44C]
0058836F  |.  8B10          MOV     EDX, DWORD PTR DS:[EAX]
00588371  |.  FF92 C4000000 CALL    NEAR DWORD PTR DS:[EDX+0xC4]
00588377  |.  EB 19         JMP     SHORT ScreenCa.00588392
00588379  |>  6A 40         PUSH    0x40                             ;  // 注册失败提示
0058837B  |.  68 DC835800   PUSH    ScreenCa.005883DC
00588380  |.  68 40845800   PUSH    ScreenCa.00588440
00588385  |.  8BC3          MOV     EAX, EBX
00588387  |.  E8 B8F9EDFF   CALL    ScreenCa.00467D44
0058838C  |.  50            PUSH    EAX                              ; |hOwner
0058838D  |.  E8 66F3E7FF   CALL    <JMP.&user32.MessageBoxA>        ; \MessageBoxA
00588392  |>  33C0          XOR     EAX, EAX

F7 进入关键 Call 去看一看:

005750D0  /$  55            PUSH    EBP
005750D1  |.  8BEC          MOV     EBP, ESP
005750D3  |.  6A 00         PUSH    0x0
005750D5  |.  53            PUSH    EBX
005750D6  |.  8BD8          MOV     EBX, EAX
005750D8  |.  33C0          XOR     EAX, EAX
005750DA  |.  55            PUSH    EBP
005750DB  |.  68 22515700   PUSH    ScreenCa.00575122
005750E0  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
005750E3  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
005750E6  |.  8BC3          MOV     EAX, EBX
005750E8  |.  E8 73FEFFFF   CALL    ScreenCa.00574F60
005750ED  |.  DDD8          FSTP    ST(0)
005750EF  |.  8D55 FC       LEA     EDX, DWORD PTR SS:[EBP-0x4]
005750F2  |.  8BC3          MOV     EAX, EBX
005750F4  |.  E8 8FFCFFFF   CALL    ScreenCa.00574D88                ;  // 核心算法,F7 进去瞧瞧
005750F9  |.  8B55 FC       MOV     EDX, DWORD PTR SS:[EBP-0x4]      ;  // 真码,此处可内存注册机
005750FC  |.  8B43 14       MOV     EAX, DWORD PTR DS:[EBX+0x14]
005750FF  |.  E8 A0F6E8FF   CALL    ScreenCa.004047A4
00575104  |.  75 04         JNZ     SHORT ScreenCa.0057510A
00575106  |.  B3 01         MOV     BL, 0x1
00575108  |.  EB 02         JMP     SHORT ScreenCa.0057510C
0057510A  |>  33DB          XOR     EBX, EBX
0057510C  |>  33C0          XOR     EAX, EAX
0057510E  |.  5A            POP     EDX
0057510F  |.  59            POP     ECX
00575110  |.  59            POP     ECX
00575111  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
00575114  |.  68 29515700   PUSH    ScreenCa.00575129
00575119  |>  8D45 FC       LEA     EAX, DWORD PTR SS:[EBP-0x4]
0057511C  |.  E8 77F2E8FF   CALL    ScreenCa.00404398
00575121  \.  C3            RETN

F7 进核心算法瞧瞧:

00574D88  /$  55            PUSH    EBP
00574D89  |.  8BEC          MOV     EBP, ESP
00574D8B  |.  B9 05000000   MOV     ECX, 0x5
00574D90  |>  6A 00         /PUSH    0x0
00574D92  |.  6A 00         |PUSH    0x0
00574D94  |.  49            |DEC     ECX
00574D95  |.^ 75 F9         \JNZ     SHORT ScreenCa.00574D90
00574D97  |.  51            PUSH    ECX
00574D98  |.  53            PUSH    EBX
00574D99  |.  56            PUSH    ESI
00574D9A  |.  57            PUSH    EDI
00574D9B  |.  8955 FC       MOV     DWORD PTR SS:[EBP-0x4], EDX
00574D9E  |.  8BF8          MOV     EDI, EAX
00574DA0  |.  33C0          XOR     EAX, EAX
00574DA2  |.  55            PUSH    EBP
00574DA3  |.  68 464F5700   PUSH    ScreenCa.00574F46
00574DA8  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
00574DAB  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
00574DAE  |.  8B45 FC       MOV     EAX, DWORD PTR SS:[EBP-0x4]
00574DB1  |.  E8 E2F5E8FF   CALL    ScreenCa.00404398
00574DB6  |.  8D55 F0       LEA     EDX, DWORD PTR SS:[EBP-0x10]
00574DB9  |.  8BC7          MOV     EAX, EDI
00574DBB  |.  E8 60FFFFFF   CALL    ScreenCa.00574D20
00574DC0  |.  8B45 F0       MOV     EAX, DWORD PTR SS:[EBP-0x10]     ;  // 用户名
00574DC3  |.  E8 90F8E8FF   CALL    ScreenCa.00404658
00574DC8  |.  8BF0          MOV     ESI, EAX                         ;  // 用户名长度给 ESI
00574DCA  |.  85F6          TEST    ESI, ESI                         ;  // 测试用户名是否为空
00574DCC  |.  7E 30         JLE     SHORT ScreenCa.00574DFE
00574DCE  |.  BB 01000000   MOV     EBX, 0x1
00574DD3  |>  8D55 E8       /LEA     EDX, DWORD PTR SS:[EBP-0x18]
00574DD6  |.  8BC7          |MOV     EAX, EDI
00574DD8  |.  E8 43FFFFFF   |CALL    ScreenCa.00574D20
00574DDD  |.  8B45 E8       |MOV     EAX, DWORD PTR SS:[EBP-0x18]
00574DE0  |.  0FB64418 FF   |MOVZX   EAX, BYTE PTR DS:[EAX+EBX-0x1]  ;  // 取用户名 ASCII 码
00574DE5  |.  8D4D EC       |LEA     ECX, DWORD PTR SS:[EBP-0x14]
00574DE8  |.  33D2          |XOR     EDX, EDX
00574DEA  |.  E8 3145E9FF   |CALL    ScreenCa.00409320
00574DEF  |.  8B55 EC       |MOV     EDX, DWORD PTR SS:[EBP-0x14]    ;  // 用户名 ASCII 给 EDX
00574DF2  |.  8D45 F8       |LEA     EAX, DWORD PTR SS:[EBP-0x8]
00574DF5  |.  E8 66F8E8FF   |CALL    ScreenCa.00404660
00574DFA  |.  43            |INC     EBX
00574DFB  |.  4E            |DEC     ESI
00574DFC  |.^ 75 D5         \JNZ     SHORT ScreenCa.00574DD3
00574DFE  |>  8B45 F8       MOV     EAX, DWORD PTR SS:[EBP-0x8]      ;  // 算出来的用户名ASCII码给EAX
00574E01  |.  E8 52F8E8FF   CALL    ScreenCa.00404658
00574E06  |.  8BF0          MOV     ESI, EAX                         ;  // ASCII 长度给 ESI
00574E08  |.  85F6          TEST    ESI, ESI                         ;  // ASCII 长度测试
00574E0A  |.  7E 2C         JLE     SHORT ScreenCa.00574E38
00574E0C  |.  BB 01000000   MOV     EBX, 0x1
00574E11  |>  8B45 F8       /MOV     EAX, DWORD PTR SS:[EBP-0x8]     ;  // 用户名ASCII码给EAX
00574E14  |.  E8 3FF8E8FF   |CALL    ScreenCa.00404658
00574E19  |.  2BC3          |SUB     EAX, EBX                        ;  EAX=EAX-EBX
00574E1B  |.  8B55 F8       |MOV     EDX, DWORD PTR SS:[EBP-0x8]     ;  // 用户名 ASCII 给 EDX
00574E1E  |.  8A1402        |MOV     DL, BYTE PTR DS:[EDX+EAX]       ;  // 从右到左依次获取 用户名ASCII最后一个字符的 ASCII
00574E21  |.  8D45 E4       |LEA     EAX, DWORD PTR SS:[EBP-0x1C]
00574E24  |.  E8 57F7E8FF   |CALL    ScreenCa.00404580
00574E29  |.  8B55 E4       |MOV     EDX, DWORD PTR SS:[EBP-0x1C]
00574E2C  |.  8D45 F4       |LEA     EAX, DWORD PTR SS:[EBP-0xC]
00574E2F  |.  E8 2CF8E8FF   |CALL    ScreenCa.00404660
00574E34  |.  43            |INC     EBX
00574E35  |.  4E            |DEC     ESI
00574E36  |.^ 75 D9         \JNZ     SHORT ScreenCa.00574E11
00574E38  |>  8D45 F8       LEA     EAX, DWORD PTR SS:[EBP-0x8]
00574E3B  |.  50            PUSH    EAX
00574E3C  |.  B9 04000000   MOV     ECX, 0x4
00574E41  |.  BA 01000000   MOV     EDX, 0x1
00574E46  |.  8B45 F4       MOV     EAX, DWORD PTR SS:[EBP-0xC]
00574E49  |.  E8 6AFAE8FF   CALL    ScreenCa.004048B8
00574E4E  |.  8D45 F4       LEA     EAX, DWORD PTR SS:[EBP-0xC]
00574E51  |.  50            PUSH    EAX
00574E52  |.  B9 04000000   MOV     ECX, 0x4
00574E57  |.  BA 05000000   MOV     EDX, 0x5
00574E5C  |.  8B45 F4       MOV     EAX, DWORD PTR SS:[EBP-0xC]
00574E5F  |.  E8 54FAE8FF   CALL    ScreenCa.004048B8
00574E64  |.  8B45 F8       MOV     EAX, DWORD PTR SS:[EBP-0x8]      ;  // 用户名 ascii 依次从右往左从第1位开始取4位,即:abcd 变成 dcba
00574E67  |.  E8 ECF7E8FF   CALL    ScreenCa.00404658
00574E6C  |.  83F8 04       CMP     EAX, 0x4
00574E6F  |.  7D 2F         JGE     SHORT ScreenCa.00574EA0
00574E71  |.  8B45 F8       MOV     EAX, DWORD PTR SS:[EBP-0x8]
00574E74  |.  E8 DFF7E8FF   CALL    ScreenCa.00404658
00574E79  |.  8BD8          MOV     EBX, EAX
00574E7B  |.  83FB 03       CMP     EBX, 0x3
00574E7E  |.  7F 20         JG      SHORT ScreenCa.00574EA0
00574E80  |>  8D4D E0       /LEA     ECX, DWORD PTR SS:[EBP-0x20]
00574E83  |.  8BC3          |MOV     EAX, EBX
00574E85  |.  C1E0 02       |SHL     EAX, 0x2
00574E88  |.  33D2          |XOR     EDX, EDX
00574E8A  |.  E8 9144E9FF   |CALL    ScreenCa.00409320
00574E8F  |.  8B55 E0       |MOV     EDX, DWORD PTR SS:[EBP-0x20]
00574E92  |.  8D45 F8       |LEA     EAX, DWORD PTR SS:[EBP-0x8]
00574E95  |.  E8 C6F7E8FF   |CALL    ScreenCa.00404660
00574E9A  |.  43            |INC     EBX
00574E9B  |.  83FB 04       |CMP     EBX, 0x4
00574E9E  |.^ 75 E0         \JNZ     SHORT ScreenCa.00574E80
00574EA0  |>  8B45 F4       MOV     EAX, DWORD PTR SS:[EBP-0xC]      ;  // 用户名 ascii 依次从右往左从第5位开始取4位,即:abcd 变成 dcba
00574EA3  |.  E8 B0F7E8FF   CALL    ScreenCa.00404658
00574EA8  |.  83F8 04       CMP     EAX, 0x4
00574EAB  |.  7D 2F         JGE     SHORT ScreenCa.00574EDC
00574EAD  |.  8B45 F4       MOV     EAX, DWORD PTR SS:[EBP-0xC]
00574EB0  |.  E8 A3F7E8FF   CALL    ScreenCa.00404658
00574EB5  |.  8BD8          MOV     EBX, EAX
00574EB7  |.  83FB 03       CMP     EBX, 0x3
00574EBA  |.  7F 20         JG      SHORT ScreenCa.00574EDC
00574EBC  |>  8D4D DC       /LEA     ECX, DWORD PTR SS:[EBP-0x24]
00574EBF  |.  8BC3          |MOV     EAX, EBX
00574EC1  |.  C1E0 02       |SHL     EAX, 0x2
00574EC4  |.  33D2          |XOR     EDX, EDX
00574EC6  |.  E8 5544E9FF   |CALL    ScreenCa.00409320
00574ECB  |.  8B55 DC       |MOV     EDX, DWORD PTR SS:[EBP-0x24]
00574ECE  |.  8D45 F4       |LEA     EAX, DWORD PTR SS:[EBP-0xC]
00574ED1  |.  E8 8AF7E8FF   |CALL    ScreenCa.00404660
00574ED6  |.  43            |INC     EBX
00574ED7  |.  83FB 04       |CMP     EBX, 0x4
00574EDA  |.^ 75 E0         \JNZ     SHORT ScreenCa.00574EBC
00574EDC  |>  8D45 D8       LEA     EAX, DWORD PTR SS:[EBP-0x28]
00574EDF  |.  50            PUSH    EAX
00574EE0  |.  8B47 04       MOV     EAX, DWORD PTR DS:[EDI+0x4]      ;  // 取固定字符串“PictureRecording86v2013”中的前4个字符,即:Pict给EAX
00574EE3  |.  B9 04000000   MOV     ECX, 0x4
00574EE8  |.  BA 01000000   MOV     EDX, 0x1
00574EED  |.  E8 C6F9E8FF   CALL    ScreenCa.004048B8
00574EF2  |.  FF75 D8       PUSH    DWORD PTR SS:[EBP-0x28]          ;  // 已经获取到的 Pict 与下面的- 连接,注册码的组合
00574EF5  |.  68 5C4F5700   PUSH    ScreenCa.00574F5C                ;  UNICODE "-"
00574EFA  |.  FF75 F8       PUSH    DWORD PTR SS:[EBP-0x8]           ;  // 用户名ascii从右往左从第一位开始获取的4位与上面的注册码连接
00574EFD  |.  8D45 D4       LEA     EAX, DWORD PTR SS:[EBP-0x2C]
00574F00  |.  50            PUSH    EAX
00574F01  |.  8B47 04       MOV     EAX, DWORD PTR DS:[EDI+0x4]
00574F04  |.  B9 05000000   MOV     ECX, 0x5
00574F09  |.  BA 05000000   MOV     EDX, 0x5
00574F0E  |.  E8 A5F9E8FF   CALL    ScreenCa.004048B8
00574F13  |.  FF75 D4       PUSH    DWORD PTR SS:[EBP-0x2C]          ;  // 固定字符串 ureRe
00574F16  |.  68 5C4F5700   PUSH    ScreenCa.00574F5C                ;  UNICODE "-"
00574F1B  |.  FF75 F4       PUSH    DWORD PTR SS:[EBP-0xC]           ;  // 用户名ascii从右往左第5位开始获取的4位与上面的注册码连接
00574F1E  |.  8B45 FC       MOV     EAX, DWORD PTR SS:[EBP-0x4]
00574F21  |.  BA 06000000   MOV     EDX, 0x6
00574F26  |.  E8 EDF7E8FF   CALL    ScreenCa.00404718
00574F2B  |.  33C0          XOR     EAX, EAX
00574F2D  |.  5A            POP     EDX
00574F2E  |.  59            POP     ECX
00574F2F  |.  59            POP     ECX
00574F30  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
00574F33  |.  68 4D4F5700   PUSH    ScreenCa.00574F4D
00574F38  |>  8D45 D4       LEA     EAX, DWORD PTR SS:[EBP-0x2C]
00574F3B  |.  BA 0A000000   MOV     EDX, 0xA
00574F40  |.  E8 77F4E8FF   CALL    ScreenCa.004043BC
00574F45  \.  C3            RETN

一路 F8 后,走出核心算法。

经过分析,cxj98 的 ascii 码为:63 78 6A 39 38
最终计算出来的注册码为:Pict-8393ureRe-A687

输入最终计算出来的注册码,消息提示:注册成功,程序重新打开后生效。

本人不懂编程,所以这里的算法注册机直接忽略。

本文原创于飘云阁论坛,转载请保留完整的信息,谢谢。同时为了尊重国产软件,固将软件的名称以xxxx代替了。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
又见楼主
2014-2-12 14:15
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
与52pojie同步额。。。。
2014-2-12 14:51
0
雪    币: 29
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
与飘云阁同步啊
2014-2-14 13:20
0
游客
登录 | 注册 方可回帖
返回
//