cxj98 发表于 2014-2-12 13:42

[BRET Team 系列破解教程之中级篇] 超级XXXX专家 v1.10 算法分析

本帖最后由 cxj98 于 2014-2-13 14:41 编辑

【破文标题】超级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:往上看,0058833C|.E8 EFCDFEFF   CALL    ScreenCa.00575130
00588341|.8B83 EC040000 MOV   EAX, DWORD PTR DS:
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:
0058836F|.8B10          MOV   EDX, DWORD PTR DS:
00588371|.FF92 C4000000 CALL    NEAR DWORD PTR DS:
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, EAXF7 进入关键 Call 去看一看:005750D0/[      DISCUZ_CODE_24      ]nbsp; 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:
005750E3|.64:8920       MOV   DWORD PTR FS:, 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:
005750F2|.8BC3          MOV   EAX, EBX
005750F4|.E8 8FFCFFFF   CALL    ScreenCa.00574D88                ;// 核心算法,F7 进去瞧瞧
005750F9|.8B55 FC       MOV   EDX, DWORD PTR SS:      ;// 真码,此处可内存注册机
005750FC|.8B43 14       MOV   EAX, DWORD PTR DS:
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:, EDX
00575114|.68 29515700   PUSH    ScreenCa.00575129
00575119|>8D45 FC       LEA   EAX, DWORD PTR SS:
0057511C|.E8 77F2E8FF   CALL    ScreenCa.00404398
00575121\.C3            RETNF7 进核心算法瞧瞧:00574D88/[      DISCUZ_CODE_25      ]nbsp; 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:, 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:
00574DAB|.64:8920       MOV   DWORD PTR FS:, ESP
00574DAE|.8B45 FC       MOV   EAX, DWORD PTR SS:
00574DB1|.E8 E2F5E8FF   CALL    ScreenCa.00404398
00574DB6|.8D55 F0       LEA   EDX, DWORD PTR SS:
00574DB9|.8BC7          MOV   EAX, EDI
00574DBB|.E8 60FFFFFF   CALL    ScreenCa.00574D20
00574DC0|.8B45 F0       MOV   EAX, DWORD PTR SS:   ;// 用户名
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:
00574DD6|.8BC7          |MOV   EAX, EDI
00574DD8|.E8 43FFFFFF   |CALL    ScreenCa.00574D20
00574DDD|.8B45 E8       |MOV   EAX, DWORD PTR SS:
00574DE0|.0FB64418 FF   |MOVZX   EAX, BYTE PTR DS:;// 取用户名 ASCII 码
00574DE5|.8D4D EC       |LEA   ECX, DWORD PTR SS:
00574DE8|.33D2          |XOR   EDX, EDX
00574DEA|.E8 3145E9FF   |CALL    ScreenCa.00409320
00574DEF|.8B55 EC       |MOV   EDX, DWORD PTR SS:    ;// 用户名 ASCII 给 EDX
00574DF2|.8D45 F8       |LEA   EAX, DWORD PTR SS:
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:      ;// 算出来的用户名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:   ;// 用户名ASCII码给EAX
00574E14|.E8 3FF8E8FF   |CALL    ScreenCa.00404658
00574E19|.2BC3          |SUB   EAX, EBX                        ;EAX=EAX-EBX
00574E1B|.8B55 F8       |MOV   EDX, DWORD PTR SS:   ;// 用户名 ASCII 给 EDX
00574E1E|.8A1402      |MOV   DL, BYTE PTR DS:       ;// 从右到左依次获取 用户名ASCII最后一个字符的 ASCII
00574E21|.8D45 E4       |LEA   EAX, DWORD PTR SS:
00574E24|.E8 57F7E8FF   |CALL    ScreenCa.00404580
00574E29|.8B55 E4       |MOV   EDX, DWORD PTR SS:
00574E2C|.8D45 F4       |LEA   EAX, DWORD PTR SS:
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:
00574E3B|.50            PUSH    EAX
00574E3C|.B9 04000000   MOV   ECX, 0x4
00574E41|.BA 01000000   MOV   EDX, 0x1
00574E46|.8B45 F4       MOV   EAX, DWORD PTR SS:
00574E49|.E8 6AFAE8FF   CALL    ScreenCa.004048B8
00574E4E|.8D45 F4       LEA   EAX, DWORD PTR SS:
00574E51|.50            PUSH    EAX
00574E52|.B9 04000000   MOV   ECX, 0x4
00574E57|.BA 05000000   MOV   EDX, 0x5
00574E5C|.8B45 F4       MOV   EAX, DWORD PTR SS:
00574E5F|.E8 54FAE8FF   CALL    ScreenCa.004048B8
00574E64|.8B45 F8       MOV   EAX, DWORD PTR SS:      ;// 用户名 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:
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:
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:
00574E92|.8D45 F8       |LEA   EAX, DWORD PTR SS:
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:      ;// 用户名 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:
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:
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:
00574ECE|.8D45 F4       |LEA   EAX, DWORD PTR SS:
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:
00574EDF|.50            PUSH    EAX
00574EE0|.8B47 04       MOV   EAX, DWORD PTR DS:      ;// 取固定字符串“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:          ;// 已经获取到的 Pict 与下面的- 连接,注册码的组合
00574EF5|.68 5C4F5700   PUSH    ScreenCa.00574F5C                ;UNICODE "-"
00574EFA|.FF75 F8       PUSH    DWORD PTR SS:         ;// 用户名ascii从右往左从第一位开始获取的4位与上面的注册码连接
00574EFD|.8D45 D4       LEA   EAX, DWORD PTR SS:
00574F00|.50            PUSH    EAX
00574F01|.8B47 04       MOV   EAX, DWORD PTR DS:
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:          ;// 取固定字符串“PictureRecording86v2013”中的字符串 ureRe
00574F16|.68 5C4F5700   PUSH    ScreenCa.00574F5C                ;UNICODE "-"
00574F1B|.FF75 F4       PUSH    DWORD PTR SS:         ;// 用户名ascii从右往左第5位开始获取的4位与上面的注册码连接
00574F1E|.8B45 FC       MOV   EAX, DWORD PTR SS:
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:, EDX
00574F33|.68 4D4F5700   PUSH    ScreenCa.00574F4D
00574F38|>8D45 D4       LEA   EAX, DWORD PTR SS:
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代替了。

℡Black星辰 发表于 2014-2-12 13:47

沙发,支持一下

wuaixuexioen 发表于 2014-2-12 13:54

支持一下

吾爱-路人甲 发表于 2014-2-12 13:58

难道就是昨天只分析了10%的那个?

vipcrack 发表于 2014-2-12 14:01

应该是超级屏幕录像机,看开头的PICT好像是。

zzzzyy 发表于 2014-2-12 14:13

谢谢分享,不错的资料

飘舞的雪花 发表于 2014-2-12 14:53

谢谢楼主。

bansjs 发表于 2014-2-12 22:21



谢谢!用你的方法破解了。

夜依 发表于 2014-3-12 08:57

我只是想问下,这个格式是某个记事本的功能吧,似乎看见过。@cxj98

www52pojiecn 发表于 2014-3-12 14:28

样本名没说全,无法复现啊
页: [1] 2
查看完整版本: [BRET Team 系列破解教程之中级篇] 超级XXXX专家 v1.10 算法分析