zaas 发表于 2010-3-27 11:00

清灵起名软件 1.6 算法分析及算法注册机

本帖最后由 zaas 于 2010-3-27 11:32 编辑

【破文标题】清灵起名软件 1.6 算法分析及算法注册机
【破文作者】zaas
【破解工具】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:
004A4473|.64:8920       mov   dword ptr fs:, esp
004A4476|.8D55 F8       lea   edx, dword ptr
004A4479|.8B83 18030000 mov   eax, dword ptr
004A447F|.E8 A05AFCFF   call    00469F24
004A4484|.8B55 F8       mov   edx, dword ptr
004A4487|.B8 44454A00   mov   eax, 004A4544                  ;假码
004A448C|.E8 73F6FFFF   call    004A3B04
004A4491|.E8 6EF7FFFF   call    004A3C04
004A4496|.8D55 F4       lea   edx, dword ptr
004A4499|.8B83 18030000 mov   eax, dword ptr
004A449F|.E8 805AFCFF   call    00469F24
004A44A4|.8B45 F4       mov   eax, dword ptr
004A44A7|.8D55 FC       lea   edx, dword ptr
004A44AA|.E8 5545F6FF   call    00408A04
004A44AF|.8B45 FC       mov   eax, dword ptr
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
004A44C4|.B2 02         mov   dl, 2
004A44C6|.A1 588B5B00   mov   eax, dword ptr
004A44CB|.E8 1C3AF9FF   call    00437EEC
004A44D0|.8B45 FC       mov   eax, dword ptr
004A44D3|.E8 18FAFFFF   call    004A3EF0                         ;再一次验证。al值作为参数使用
004A44D8|.8B15 D0755D00 mov   edx, dword ptr           ;清灵起名.005B8B30
004A44DE|.8802          mov   byte ptr , al
004A44E0|.A1 54765D00   mov   eax, dword ptr
004A44E5|.8B00          mov   eax, dword ptr
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 , eax
004A3F00|.8B45 FC       mov   eax, dword ptr
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:
004A3F13|.64:8920       mov   dword ptr fs:, esp
004A3F16|.B3 01         mov   bl, 1                            ;标志位赋值
004A3F18|.8D55 F4       lea   edx, dword ptr
004A3F1B|.8B45 FC       mov   eax, dword ptr
004A3F1E|.E8 E14AF6FF   call    00408A04
004A3F23|.8B55 F4       mov   edx, dword ptr
004A3F26|.8D45 FC       lea   eax, dword ptr
004A3F29|.E8 DE03F6FF   call    0040430C
004A3F2E|.8B45 FC       mov   eax, dword ptr
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
004A3F45|.E8 9EFEFFFF   call    004A3DE8                         ;机器码字符串
004A3F4A|.8B55 F0       mov   edx, dword ptr
004A3F4D|.A1 B48D5D00   mov   eax, dword ptr
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                ;qingling
004A3F66|.FF35 B48D5D00 push    dword ptr                ;机器码
004A3F6C|.FF35 508B5B00 push    dword ptr                ;CQL
004A3F72|.8D45 EC       lea   eax, dword ptr
004A3F75|.BA 03000000   mov   edx, 3
004A3F7A|.E8 7506F6FF   call    004045F4                         ;组合
004A3F7F|.8B45 EC       mov   eax, dword ptr
004A3F82|.8D55 F8       lea   edx, dword ptr
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
004A3F96|.8A5411 FE   |mov   dl, byte ptr       ;取假码奇数位
004A3F9A|.8B4D F8       |mov   ecx, dword ptr           ;STR1
004A3F9D|.3A5401 FF   |cmp   dl, byte ptr
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
004A3FB0|.50            push    eax
004A3FB1|.B9 10000000   mov   ecx, 10
004A3FB6|.BA 11000000   mov   edx, 11
004A3FBB|.8B45 F8       mov   eax, dword ptr
004A3FBE|.E8 D107F6FF   call    00404794                         ;MD5字符串后半段
004A3FC3|.8B45 E4       mov   eax, dword ptr
004A3FC6|.8D55 E8       lea   edx, dword ptr
004A3FC9|.E8 C6EFFFFF   call    004A2F94                         ;MD5之--》STR2
004A3FCE|.8B55 E8       mov   edx, dword ptr
004A3FD1|.8D45 F8       lea   eax, dword ptr
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           ;假码
004A3FE5|.8A5411 FF   |mov   dl, byte ptr       ;第偶数位
004A3FE9|.8B4D F8       |mov   ecx, dword ptr           ;STR2
004A3FEC|.3A5401 0F   |cmp   dl, byte ptr       ;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           ;机器码
004A4001|.8A40 03       mov   al, byte ptr              ;第四位
004A4004|.8B55 FC       mov   edx, dword ptr          ;假码
004A4007|.3A42 1E       cmp   al, byte ptr             ;第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           ;机器码
004A4015|.8A40 0A       mov   al, byte ptr              ;第11位
004A4018|.8B55 FC       mov   edx, dword ptr          ;假码
004A401B|.3A42 1F       cmp   al, byte ptr             ;第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:, edx
004A402A|.68 44404A00   push    004A4044
004A402F|>8D45 E4       lea   eax, dword ptr
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

大侠的算法分析很高产啊,支持下!

Rookietp 发表于 2010-3-27 13:22

顶了! 很牛X

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

学习了~呵呵 谢谢分享!
页: [1] 2 3 4
查看完整版本: 清灵起名软件 1.6 算法分析及算法注册机