hdshanshi 发表于 2008-4-6 15:48:52

“起名正宗 V1.31”算法的简单分析(如有雷同,纯属巧合)

【破文标题】“起名正宗 V1.31”算法的简单分析(起名正宗 V1.32算法相同,不在重复,只是多了个壳)
【破文作者】hdshanshi
【作者邮箱】[email protected]
【破解工具】OD ,PEID
【破解平台】Win9x/NT/2000/XP
【软件名称】起名正宗 V1.31 完全版
【软件大小】3809 KB
【原版下载】http://www.skycn.com/soft/4248.html
【保护方式】注册码
【软件简介】根据五格剖象法结合四柱。1、提供个人名分析,个人辅助起名;2、提供完备的公司、品牌、行业起名方案及行业名分析;3、提供每个汉字的解释;提供判断号码吉凶的功能;4、不须 ODBC 或 BDE 支持,速度快、功能全、代码小;5、可将分析的人名加注存档,是姓名研究者的得力工具;6、包括百家姓的来源;7、新增姓名八卦卦象分析(是姓名优劣的重要参数之一)。完整版包括简装版和解释库。
【破解声明】不为宣传迷信,只为学习交流.

------------------------------------------------------------------------
【破解过程】
       首先用peid查壳,无壳,软件为:Borland Delphi 6.0 - 7.0.OD载入,利用od的字符串插件找到错误提示"注册码错误!".

004C5F47|.E8 F4ECF3FF   call    00404C40
004C5F4C|.8B45 EC       mov   eax, dword ptr
004C5F4F|.50            push    eax
004C5F50|.8B8B 34030000 mov   ecx, dword ptr
004C5F56|.8B93 38030000 mov   edx, dword ptr
004C5F5C|.8B83 2C030000 mov   eax, dword ptr
004C5F62|.E8 41F7FFFF   call    004C56A8                        ;F2下断点,F7进入call

004C5F67|.84C0          test    al, al
004C5F69|.74 20         je      short 004C5F8B                  ;关键跳,跳走则注册失败.
004C5F6B|.6A 00         push    0
004C5F6D|.66:8B0D F05F4>mov   cx, word ptr
004C5F74|.B2 02         mov   dl, 2
004C5F76|.B8 28604C00   mov   eax, 004C6028                  ;您已经注册成功!
004C5F7B|.E8 68BDF7FF   call    00441CE8
004C5F80|.B2 01         mov   dl, 1
004C5F82|.8BC3          mov   eax, ebx
004C5F84|.E8 CFFCFFFF   call    004C5C58
004C5F89|.EB 15         jmp   short 004C5FA0
004C5F8B|>6A 00         push    0
004C5F8D|.66:8B0D F05F4>mov   cx, word ptr
004C5F94|.33D2          xor   edx, edx
004C5F96|.B8 44604C00   mov   eax, 004C6044                  ;注册码错误!
004C5F9B|.E8 48BDF7FF   call    00441CE8

   在004C5F62 处下断点,F9运行 输入用户名:hdshanshi和注册码:147258369 后,点"注册", 停在004C5F62 处,F7进入004C56A8.

004C56A8/$55            push    ebp
004C56A9|.8BEC          mov   ebp, esp
004C56AB|.81C4 60FDFFFF add   esp, -2A0
004C56B1|.53            push    ebx
004C56B2|.56            push    esi
004C56B3|.57            push    edi
004C56B4|.33DB          xor   ebx, ebx
004C56B6|.899D 60FEFFFF mov   dword ptr , ebx
004C56BC|.895D F8       mov   dword ptr , ebx
004C56BF|.894D FC       mov   dword ptr , ecx
004C56C2|.8BDA          mov   ebx, edx
004C56C4|.8BF8          mov   edi, eax
004C56C6|.8B45 08       mov   eax, dword ptr
004C56C9|.E8 0EF7F3FF   call    00404DDC
004C56CE|.33C0          xor   eax, eax
004C56D0|.55            push    ebp
004C56D1|.68 51584C00   push    004C5851
004C56D6|.64:FF30       push    dword ptr fs:
004C56D9|.64:8920       mov   dword ptr fs:, esp
004C56DC|.8D95 60FEFFFF lea   edx, dword ptr
004C56E2|.8B45 08       mov   eax, dword ptr
004C56E5|.E8 C638F4FF   call    00408FB0
004C56EA|.83BD 60FEFFFF>cmp   dword ptr , 0
004C56F1|.75 07         jnz   short 004C56FA
004C56F3|.33DB          xor   ebx, ebx
004C56F5|.E9 2E010000   jmp   004C5828
004C56FA|>8B4D 08       mov   ecx, dword ptr
004C56FD|.8BD3          mov   edx, ebx
004C56FF|.8BC7          mov   eax, edi
004C5701|.E8 72FAFFFF   call    004C5178                  ; 关键call,F7进入      
004C5706|.8BF0          mov   esi, eax
004C5708|.3B75 FC       cmp   esi, dword ptr       ;真假码的16进制形式比较,esi中放的是真码的16进制形式.可以做内存注册机.
004C570B|.0F85 15010000 jnz   004C5826                   ;关键跳.跳走则注册失败.
004C5711|.E8 EA58F4FF   call    0040B000
004C5716|.DD5D B0       fstp    qword ptr
004C5719|.9B            wait
004C571A|.E8 E158F4FF   call    0040B000
004C571F|.DD5D B8       fstp    qword ptr
004C5722|.9B            wait
004C5723|.C645 C0 01    mov   byte ptr , 1
004C5727|.C645 C1 00    mov   byte ptr , 0
004C572B|.895D C4       mov   dword ptr , ebx
004C572E|.8D85 60FDFFFF lea   eax, dword ptr
004C5734|.8B55 08       mov   edx, dword ptr
004C5737|.B9 FF000000   mov   ecx, 0FF
004C573C|.E8 8FF4F3FF   call    00404BD0
004C5741|.8D95 60FDFFFF lea   edx, dword ptr
004C5747|.8D45 C8       lea   eax, dword ptr
004C574A|.B1 14         mov   cl, 14
004C574C|.E8 93D8F3FF   call    00402FE4
004C5751|.8975 E0       mov   dword ptr , esi
004C5754|.8D85 60FDFFFF lea   eax, dword ptr
004C575A|.8B57 4C       mov   edx, dword ptr
004C575D|.B9 FF000000   mov   ecx, 0FF
004C5762|.E8 69F4F3FF   call    00404BD0

    F8单步跟踪,来到 004C5701 处.F7进入 004C5178.


004C5178/$55            push    ebp
004C5179|.8BEC          mov   ebp, esp
004C517B|.83C4 F4       add   esp, -0C
004C517E|.53            push    ebx
004C517F|.56            push    esi
004C5180|.57            push    edi
004C5181|.894D F8       mov   dword ptr , ecx
004C5184|.8955 FC       mov   dword ptr , edx
004C5187|.8B45 F8       mov   eax, dword ptr
004C518A|.E8 4DFCF3FF   call    00404DDC
004C518F|.33C0          xor   eax, eax
004C5191|.55            push    ebp
004C5192|.68 39524C00   push    004C5239
004C5197|.64:FF30       push    dword ptr fs:
004C519A|.64:8920       mov   dword ptr fs:, esp
004C519D|.8B45 F8       mov   eax, dword ptr
004C51A0|.E8 4FFAF3FF   call    00404BF4                   ;计算 固定汉字"起名正宗"+"用户名"的长度.
004C51A5|.85C0          test    eax, eax                  ;长度放入eax中.
004C51A7|.75 04         jnz   short 004C51AD
004C51A9|.33DB          xor   ebx, ebx
004C51AB|.EB 76         jmp   short 004C5223
004C51AD|>33F6          xor   esi, esi
004C51AF|.85C0          test    eax, eax                  
004C51B1|.7E 13         jle   short 004C51C6
004C51B3|.BA 01000000   mov   edx, 1
004C51B8|>8B4D F8       /mov   ecx, dword ptr    
004C51BB|.0FB64C11 FF   |movzx   ecx, byte ptr ;依次取 固定汉字"起名正宗"+"用户名"的ascii码放入ecx中
004C51C0|.03F1          |add   esi, ecx            ;esi+ecx 结果放入esi.
004C51C2|.42            |inc   edx                  ;edx自加1
004C51C3|.48            |dec   eax                  ;eax自减1
004C51C4|.^ 75 F2         \jnz   short 004C51B8         ;这个循环是计算 固定汉字"起名正宗"+"用户名"的ascii码之和 结果放到esi中, 我们把这个数值记为:A
004C51C6|>8BC6          mov   eax, esi                ;A 放入eax中
004C51C8|.B9 DF000000   mov   ecx, 0DF                ;固定数值0DF 放入ecx中.
004C51CD|.99            cdq                 ;EDX清零
004C51CE|.F7F9          idiv    ecx            ;EAX除以ECX,商放在EAX,余数在EDX
004C51D0|.8BDA          mov   ebx, edx         ;第一个余数放入ebx中,记为:B  
004C51D2|.8BC6          mov   eax, esi         ;A 放入eax中
004C51D4|.B9 85000000   mov   ecx, 85          ;固定数值85 放入ecx中.
004C51D9|.99            cdq                 ;EDX清零
004C51DA|.F7F9          idiv    ecx            ;EAX除以ECX,商放在EAX,余数在EDX
004C51DC|.8855 F7       mov   byte ptr , dl  ;第二个余数放入:byte ptr 中,记为:C
004C51DF|.8BC6          mov   eax, esi                ;A 放入eax中
004C51E1|.B9 AF000000   mov   ecx, 0AF                ;固定数值0AF 放入ecx中.
004C51E6|.99            cdq                           ;EDX清零
004C51E7|.F7F9          idiv    ecx                     ;EAX除以ECX,商放在EAX,余数在EDX
004C51E9|.8BC2          mov   eax, edx                ;第三个余数放入eax中记为:D
004C51EB|.33D2          xor   edx, edx                ;edx清零.
004C51ED|.8AD3          mov   dl, bl           ;第一个余数B放入dl中.
004C51EF|.8BF2          mov   esi, edx          ;第一个余数B放入esi中.
004C51F1|.C1E6 0C       shl   esi, 0C          ;B左移0C位,及=B*1000
004C51F4|.2BF2          sub   esi, edx               ;B*1000-B 放入esi中.
004C51F6|.33C9          xor   ecx, ecx               ;ecx清零
004C51F8|.8A4D F7       mov   cl, byte ptr    ;第二个余数C放入cl中.
004C51FB|.8BF9          mov   edi, ecx          ;第二个余数C放入edi. 
004C51FD|.C1E7 08       shl   edi, 8           ;C左移8位,及=C*100.
004C5200|.2BF9          sub   edi, ecx               ;C*100-C 放入edi中.
004C5202|.03F7          add   esi, edi                  ; (B*1000-B) + (C*100-C)
004C5204|.8BF8          mov   edi, eax                  ;第三个余数D放入edi中.
004C5206|.81E7 FF000000 and   edi, 0FF           
004C520C|.6BFF 0F       imul    edi, edi, 0F        ;D*0F 放入edi中
004C520F|.03F7          add   esi, edi               ;(B*1000-B)+(C*100-C)+D*0F放入esi中
004C5211|.03F2          add   esi, edx          ;(B*1000-B)+(C*100-C)+D*0F +B 放入esi中
004C5213|.03F1          add   esi, ecx               ;(B*1000-B)+(C*100-C)+D*0F +B+C 放入esi中
004C5215|.25 FF000000   and   eax, 0FF               
004C521A|.03F0          add   esi, eax               ;(B*1000-B)+(C*100-C)+D*0F +B+C+D 放入esi中
(B*1000-B)+(C*100-C)+D*0F +B+C+D 可以简化为:B*1000+C*100+D*10 把结果记为:M放入esi中(注:以上都是16进制形式).
004C521C|.8BC6          mov   eax, esi         ;M 放入eax
004C521E|.8B5D FC       mov   ebx, dword ptr  ;dword ptr 是机器码的16进制, 机器码的16进制形式放入ebx.
004C5221|.33D8          xor   ebx, eax         ;ebx和eax异或的结果放入ebx中.(ebx中存放的是真正注册码的16进制形式.)
004C5223|>33C0          xor   eax, eax         ;eax清零.
004C5225|.5A            pop   edx
004C5226|.59            pop   ecx
004C5227|.59            pop   ecx
004C5228|.64:8910       mov   dword ptr fs:, edx
004C522B|.68 40524C00   push    004C5240      
004C5230|>8D45 F8       lea   eax, dword ptr
004C5233|.E8 04F7F3FF   call    0040493C
004C5238\.C3            retn

------------------------------------------------------------------------
【破解总结】 这个软件的算法还是挺简单的.
   固定汉字("起名正宗"+"用户名")的ascii码之和:A, 除以 三个固定的数值0DF , 85 , 0AF 的余数分别记为: B, C, D 然后 B*1000+C*100+D*10 之和.xor 机器码的16进制形式的结果,转换成10进制 就是注册码.
注册码存放在:WINDOWS目录下的"_!!35759._Si"文件中.删除可以重新注册.
注册机不会写,有待进一步学习,另外本人分析的难免有错误的地方,请大家批评指正.!!!
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!

[ 本帖最后由 hdshanshi 于 2008-4-6 15:57 编辑 ]

magic659117852 发表于 2008-4-6 18:36:35

/:001 很好,,下载来看一下

一品天下 发表于 2008-4-8 09:28:48

强大~~去下个软件试试看先~谢谢楼主分享经验!!

fxygm 发表于 2008-4-8 09:38:48

谢谢分享啊
研究学习中

ws027302 发表于 2008-4-8 12:34:14

学习中,谢谢!!!!!

ttt0001 发表于 2008-4-8 13:54:41

原帖由 hdshanshi 于 2008-4-6 15:48 发表 https://www.chinapyg.com/images/common/back.gif
【破文标题】“起名正宗 V1.31”算法的简单分析(起名正宗 V1.32算法相同,不在重复,只是多了个壳)
【破文作者】hdshanshi
【作者邮箱】[email protected]
【破解工具】OD ,PEID
【破解平台】Win9x/NT/2000/XP
【 ...






我来发一个起名正宗 v1.32 的注册机

blitz 发表于 2008-4-9 10:58:23

学习了..楼主的教程很详细..

blitz 发表于 2008-4-9 10:59:33

原帖由 ttt0001 于 8/4/2008 13:54 发表 https://www.chinapyg.com/images/common/back.gif







我来发一个起名正宗 v1.32 的注册机


不晓得阁下是否可以贴出源码?

ttt0001 发表于 2008-4-9 11:23:40

回复 8# 的帖子

不知道你说的是什么源码,要是注册分析的话,楼主分析的很详细了!

anson2416 发表于 2008-4-9 15:03:30

很详细
慢慢学习、。。。
页: [1] 2
查看完整版本: “起名正宗 V1.31”算法的简单分析(如有雷同,纯属巧合)