吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14230|回复: 30
收起左侧

[原创] 清灵起名软件 1.6 算法分析及算法注册机

[复制链接]
zaas 发表于 2010-3-27 11:00
本帖最后由 zaas 于 2010-3-27 11:32 编辑

【破文标题】清灵起名软件 1.6 算法分析及算法注册机
【破文作者】zaas[PYG][FCT]
破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【软件名称】清灵起名软件 1.6
【更新时间】2010-3-25
【软件类别】国产软件/测字算命
【软件语言】简体中文
【应用平台】WinXP/2000/2003/Vista
【软件性质】共享(收费)软件
【软件大小】848KB
【原版下载】http://www.newhua.com/soft/95584.htm
【保护方式】注册码
【软件简介】常言道:赐子千金,不如教一艺在身。教子一艺,不如赐子好名字。
足见父母为子女取好名的重要意义。因名以定形,名以定事,事以验名。
姓名关系到人一生的事业、健康、婚姻、父母和人际关系等等,一个好的名字是您送给孩子无价的财富。
孔子说:“名不正则言不顺”。
苏东坡说:“世间唯名实不可欺”。
严复说:“一名之立,旬月踟躅”。
诸先贤都道出了姓名对人的重要性。
清灵起名软件, 根据输入的出生日期, 给出起名建议. 用户可进行五行, 笔画, 部首, 格局评分, 三才五格等进行筛选.

【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)年后忙的一塌糊涂,可悲可叹。
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------

**************************************************************
用PEiD查壳,Borland Delphi 6.0 - 7.0
**************************************************************
DEDE查找按钮事件,注册按钮的RVA在:004A445C
OD载入,下断分析。发现启动验证也在这里。
004A445C  /.  55            push    ebp
004A445D  |.  8BEC          mov     ebp, esp
004A445F  |.  6A 00         push    0
004A4461  |.  6A 00         push    0
004A4463  |.  6A 00         push    0
004A4465  |.  53            push    ebx
004A4466  |.  8BD8          mov     ebx, eax
004A4468  |.  33C0          xor     eax, eax
004A446A  |.  55            push    ebp
004A446B  |.  68 2D454A00   push    004A452D
004A4470  |.  64:FF30       push    dword ptr fs:[eax]
004A4473  |.  64:8920       mov     dword ptr fs:[eax], esp
004A4476  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
004A4479  |.  8B83 18030000 mov     eax, dword ptr [ebx+318]
004A447F  |.  E8 A05AFCFF   call    00469F24
004A4484  |.  8B55 F8       mov     edx, dword ptr [ebp-8]
004A4487  |.  B8 44454A00   mov     eax, 004A4544                    ;  假码
004A448C  |.  E8 73F6FFFF   call    004A3B04
004A4491  |.  E8 6EF7FFFF   call    004A3C04
004A4496  |.  8D55 F4       lea     edx, dword ptr [ebp-C]
004A4499  |.  8B83 18030000 mov     eax, dword ptr [ebx+318]
004A449F  |.  E8 805AFCFF   call    00469F24
004A44A4  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
004A44A7  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
004A44AA  |.  E8 5545F6FF   call    00408A04
004A44AF  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004A44B2  |.  E8 39FAFFFF   call    004A3EF0                         ;  验证1次,关键call
004A44B7  |.  84C0          test    al, al                           ;  跳向试用版
004A44B9  |.  74 3A         je      short 004A44F5
004A44BB  |.  6A 00         push    0
004A44BD  |.  66:8B0D 4C454>mov     cx, word ptr [4A454C]
004A44C4  |.  B2 02         mov     dl, 2
004A44C6  |.  A1 588B5B00   mov     eax, dword ptr [5B8B58]
004A44CB  |.  E8 1C3AF9FF   call    00437EEC
004A44D0  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004A44D3  |.  E8 18FAFFFF   call    004A3EF0                         ;  再一次验证。al值作为参数使用
004A44D8  |.  8B15 D0755D00 mov     edx, dword ptr [5D75D0]          ;  清灵起名.005B8B30
004A44DE  |.  8802          mov     byte ptr [edx], al
004A44E0  |.  A1 54765D00   mov     eax, dword ptr [5D7654]
004A44E5  |.  8B00          mov     eax, dword ptr [eax]
004A44E7  |.  E8 0C360700   call    00517AF8
004A44EC  |.  8BC3          mov     eax, ebx
004A44EE  |.  E8 512DFEFF   call    00487244
004A44F3  |.  EB 15         jmp     short 004A450A
既然al的赋值是问题的关键,自然要跟进关键call看看:
004A3EF0  /[        DISCUZ_CODE_1        ]nbsp; 55            push    ebp
004A3EF1  |.  8BEC          mov     ebp, esp
004A3EF3  |.  33C9          xor     ecx, ecx
004A3EF5  |.  51            push    ecx
004A3EF6  |.  51            push    ecx
004A3EF7  |.  51            push    ecx
004A3EF8  |.  51            push    ecx
004A3EF9  |.  51            push    ecx
004A3EFA  |.  51            push    ecx
004A3EFB  |.  51            push    ecx
004A3EFC  |.  53            push    ebx
004A3EFD  |.  8945 FC       mov     dword ptr [ebp-4], eax
004A3F00  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004A3F03  |.  E8 1C08F6FF   call    00404724
004A3F08  |.  33C0          xor     eax, eax
004A3F0A  |.  55            push    ebp
004A3F0B  |.  68 3D404A00   push    004A403D
004A3F10  |.  64:FF30       push    dword ptr fs:[eax]
004A3F13  |.  64:8920       mov     dword ptr fs:[eax], esp
004A3F16  |.  B3 01         mov     bl, 1                            ;标志位赋值
004A3F18  |.  8D55 F4       lea     edx, dword ptr [ebp-C]
004A3F1B  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004A3F1E  |.  E8 E14AF6FF   call    00408A04
004A3F23  |.  8B55 F4       mov     edx, dword ptr [ebp-C]
004A3F26  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
004A3F29  |.  E8 DE03F6FF   call    0040430C
004A3F2E  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004A3F31  |.  E8 FE05F6FF   call    00404534
004A3F36  |.  83F8 20       cmp     eax, 20                          ;  注册码32位
004A3F39  |.  74 07         je      short 004A3F42                   ;  不等则死
004A3F3B  |.  33DB          xor     ebx, ebx
004A3F3D  |.  E9 E0000000   jmp     004A4022
004A3F42  |>  8D45 F0       lea     eax, dword ptr [ebp-10]
004A3F45  |.  E8 9EFEFFFF   call    004A3DE8                         ;  机器码字符串
004A3F4A  |.  8B55 F0       mov     edx, dword ptr [ebp-10]
004A3F4D  |.  A1 B48D5D00   mov     eax, dword ptr [5D8DB4]
004A3F52  |.  E8 2907F6FF   call    00404680
004A3F57  |.  74 07         je      short 004A3F60
004A3F59  |.  33DB          xor     ebx, ebx
004A3F5B  |.  E9 C2000000   jmp     004A4022
004A3F60  |>  FF35 548B5B00 push    dword ptr [5B8B54]               ;  qingling
004A3F66  |.  FF35 B48D5D00 push    dword ptr [5D8DB4]               ;  机器码
004A3F6C  |.  FF35 508B5B00 push    dword ptr [5B8B50]               ;  CQL
004A3F72  |.  8D45 EC       lea     eax, dword ptr [ebp-14]
004A3F75  |.  BA 03000000   mov     edx, 3
004A3F7A  |.  E8 7506F6FF   call    004045F4                         ;  组合
004A3F7F  |.  8B45 EC       mov     eax, dword ptr [ebp-14]
004A3F82  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
004A3F85  |.  E8 0AF0FFFF   call    004A2F94                         ;  MD5--》STR1
004A3F8A  |.  B8 01000000   mov     eax, 1
004A3F8F  |>  8BD0          /mov     edx, eax                        ;  比较
004A3F91  |.  03D2          |add     edx, edx
004A3F93  |.  8B4D FC       |mov     ecx, dword ptr [ebp-4]
004A3F96  |.  8A5411 FE     |mov     dl, byte ptr [ecx+edx-2]        ;  取假码奇数位
004A3F9A  |.  8B4D F8       |mov     ecx, dword ptr [ebp-8]          ;  STR1
004A3F9D  |.  3A5401 FF     |cmp     dl, byte ptr [ecx+eax-1]
004A3FA1  |.  74 04         |je      short 004A3FA7
004A3FA3  |.  33DB          |xor     ebx, ebx
004A3FA5  |.  EB 7B         |jmp     short 004A4022
004A3FA7  |>  40            |inc     eax
004A3FA8  |.  83F8 10       |cmp     eax, 10                         ;  比较15位
004A3FAB  |.^ 75 E2         \jnz     short 004A3F8F
004A3FAD  |.  8D45 E4       lea     eax, dword ptr [ebp-1C]
004A3FB0  |.  50            push    eax
004A3FB1  |.  B9 10000000   mov     ecx, 10
004A3FB6  |.  BA 11000000   mov     edx, 11
004A3FBB  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
004A3FBE  |.  E8 D107F6FF   call    00404794                         ;  MD5字符串后半段
004A3FC3  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
004A3FC6  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
004A3FC9  |.  E8 C6EFFFFF   call    004A2F94                         ;  MD5之--》STR2
004A3FCE  |.  8B55 E8       mov     edx, dword ptr [ebp-18]
004A3FD1  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
004A3FD4  |.  E8 3303F6FF   call    0040430C
004A3FD9  |.  B8 01000000   mov     eax, 1
004A3FDE  |>  8BD0          /mov     edx, eax
004A3FE0  |.  03D2          |add     edx, edx
004A3FE2  |.  8B4D FC       |mov     ecx, dword ptr [ebp-4]          ;  假码
004A3FE5  |.  8A5411 FF     |mov     dl, byte ptr [ecx+edx-1]        ;  第偶数位
004A3FE9  |.  8B4D F8       |mov     ecx, dword ptr [ebp-8]          ;  STR2
004A3FEC  |.  3A5401 0F     |cmp     dl, byte ptr [ecx+eax+F]        ;  STR2后半段
004A3FF0  |.  74 04         |je      short 004A3FF6
004A3FF2  |.  33DB          |xor     ebx, ebx
004A3FF4  |.  EB 2C         |jmp     short 004A4022
004A3FF6  |>  40            |inc     eax
004A3FF7  |.  83F8 10       |cmp     eax, 10                         ;  比较15位
004A3FFA  |.^ 75 E2         \jnz     short 004A3FDE
004A3FFC  |.  A1 B48D5D00   mov     eax, dword ptr [5D8DB4]          ;  机器码
004A4001  |.  8A40 03       mov     al, byte ptr [eax+3]             ;  第四位
004A4004  |.  8B55 FC       mov     edx, dword ptr [ebp-4]           ;  假码
004A4007  |.  3A42 1E       cmp     al, byte ptr [edx+1E]            ;  第31位
004A400A  |.  74 04         je      short 004A4010                   ;  不等跳死
004A400C  |.  33DB          xor     ebx, ebx
004A400E  |.  EB 12         jmp     short 004A4022
004A4010  |>  A1 B48D5D00   mov     eax, dword ptr [5D8DB4]          ;  机器码
004A4015  |.  8A40 0A       mov     al, byte ptr [eax+A]             ;  第11位
004A4018  |.  8B55 FC       mov     edx, dword ptr [ebp-4]           ;  假码
004A401B  |.  3A42 1F       cmp     al, byte ptr [edx+1F]            ;  第32位
004A401E  |.  74 02         je      short 004A4022                   ;  不等跳死
004A4020  |.  33DB          xor     ebx, ebx                         ;  bl为标志位,跳到这里的都死
004A4022  |>  33C0          xor     eax, eax
004A4024  |.  5A            pop     edx
004A4025  |.  59            pop     ecx
004A4026  |.  59            pop     ecx
004A4027  |.  64:8910       mov     dword ptr fs:[eax], edx
004A402A  |.  68 44404A00   push    004A4044
004A402F  |>  8D45 E4       lea     eax, dword ptr [ebp-1C]
004A4032  |.  BA 07000000   mov     edx, 7
004A4037  |.  E8 5C02F6FF   call    00404298
004A403C  \.  C3            retn
004A403D   .^ E9 B2FBF5FF   jmp     00403BF4
004A4042   .^ EB EB         jmp     short 004A402F
004A4044   .  8BC3          mov     eax, ebx                         ;  bl给al赋值,爆破点
004A4046   .  5B            pop     ebx
004A4047   .  8BE5          mov     esp, ebp
004A4049   .  5D            pop     ebp
004A404A   .  C3            retn
算法不复杂。根据堆栈中传递的字符串可以看出注册算法为明显的MD5算法,用MD5计算器验证发现为标准MD5.
爆破点也很清晰,在:
004A4044   .  8BC3          mov     eax, ebx  
修改为 inc eax,两个字节即可搞定。

【算法总结】软件用了个简单的方法避免明码比较。
第一步:把序列号和“Qingling”,“CQL”组合求MD5.得到STR1
第二步:Str1后半段求MD5,取MD5结果的后半段得到STR2
第三步:STR1的前15位作为注册码的1-30位中的奇数位;
Str2的前15位作为注册码的1-30位中的偶数位;
机器码的第四位作为注册码的第31位;
机器码的第11位作为注册码的第32位。

综上所述,写出VB注册机。注册机关键代码如下:
    Dim Str1 As String
    Dim Str2 As String
    Str1 = "Qingling" & id & "CQL"
    Str1 = Md5(Str1)
    Str2 = Right(Md5(Right(Str1, 16)), 16)
    Dim Regcode(32) As String
    For A = 1 To 15
        Regcode(2 * A - 1) = Mid(Str1, A, 1)
        Regcode(2 * A) = Mid(Str2, A, 1)
    Next
    Regcode(31) = Mid(id, 4, 1)
    Regcode(32) = Mid(id, 11, 1)
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

missviola 发表于 2010-3-27 11:09
[s:235]大侠的算法分析很高产啊,支持下!
Rookietp 发表于 2010-3-27 13:22
lovelili008 发表于 2010-3-27 13:39
binarying 发表于 2010-3-28 19:17
学习一下
Hmily 发表于 2010-3-31 17:46
感谢发布原创作品,吾爱破解有你更精彩,加精鼓励!
头像被屏蔽
yasas 发表于 2010-5-9 19:35
学习了 ````
li7011 发表于 2010-5-13 15:31
支持一下   ,我是个菜鸟 ,直接破解了就好了
头像被屏蔽
上帝是姑娘 发表于 2010-5-13 16:56
看不懂。。。  但是还是非常支持
kankan007 发表于 2010-5-13 17:18
学习了~呵呵 谢谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-11 04:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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