- UID
- 43801
注册时间2007-12-30
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 开心 2024-5-12 21:54 |
---|
签到天数: 39 天 [LV.5]常住居民I
|
本帖最后由 cxj98 于 2014-3-9 18:16 编辑
【破文标题】超级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 /[ 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:[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 /[ 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:[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] ; // 取固定字符串“PictureRecording86v2013”中的字符串 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
输入最终计算出来的注册码,消息提示:注册成功,程序重新打开后生效。
算法总结:固定字符串 PictureRe 中取 Pict 为注册码的第一组, 用户名最后两个字符的 ASCII 码的倒序与 ureRe 连接形成注册码的第2组,取用户名减去最后两位的之前两位字符的 ASCII 码的倒序,形注册码的第3组,中间用 - 符号连接。由于本人不懂编程,所以这里的算法注册机直接忽略。
本文由 cxj98 原创发表,转载时请保留完整的文章内容等信息,谢谢。同时为了尊重国产软件,固将软件的名称以xxxx代替了。
|
评分
-
查看全部评分
|