飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6690|回复: 13

[原创] 半仙算命V2007 build 11.01 算法简单分析(高手飞过)

[复制链接]

该用户从未签到

发表于 2007-11-10 12:05:52 | 显示全部楼层 |阅读模式
半仙算命V2007 build 11.01 算法简单分析(高手飞过)
【文章标题】: 半仙算命V2007 build 11.01 算法简单分析(高手飞过)
【文章作者】: 网络断魂
【软件名称】: 半仙算命V2007 build 11.01
【下载地址】: http://www.newhua.com/soft/45454.htm
【加壳方式】: ASPACK
【保护方式】: 用户名+注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD
【操作平台】: winxp2
【作者声明】: 菜鸟学习算法,失误之处请多指教!

发完破文后发现网络上好像有人分析过早期版本!不过学习嘛,并无影响

1、查壳:ASPack 2.12 -> Alexey Solodovnikov
2、用脱壳机或ESP定律脱壳修复后:Borland Delphi 6.0 - 7.0
3、进入软件后点“软件注册”,输入假码后无提示,(注册成功才有提示)
4、根据字符串,找到注册算法函数,

0055BCB0  /.  55            push    ebp
0055BCB1  |.  8BEC          mov     ebp, esp
0055BCB3  |.  B9 18000000   mov     ecx, 18
0055BCB8  |>  6A 00         /push    0
0055BCBA  |.  6A 00         |push    0
0055BCBC  |.  49            |dec     ecx
0055BCBD  |.^ 75 F9         \jnz     short 0055BCB8
0055BCBF  |.  53            push    ebx
0055BCC0  |.  56            push    esi
0055BCC1  |.  57            push    edi
0055BCC2  |.  8BD8          mov     ebx, eax
0055BCC4  |.  33C0          xor     eax, eax
0055BCC6  |.  55            push    ebp
0055BCC7  |.  68 A9BF5500   push    0055BFA9
0055BCCC  |.  64:FF30       push    dword ptr fs:[eax]
0055BCCF  |.  64:8920       mov     dword ptr fs:[eax], esp
0055BCD2  |.  B2 01         mov     dl, 1
0055BCD4  |.  A1 00324700   mov     eax, dword ptr [473200]
0055BCD9  |.  E8 2276F1FF   call    00473300
0055BCDE  |.  8BF0          mov     esi, eax
0055BCE0  |.  BA 02000080   mov     edx, 80000002
0055BCE5  |.  8BC6          mov     eax, esi
0055BCE7  |.  E8 B476F1FF   call    004733A0
0055BCEC  |.  B1 01         mov     cl, 1
0055BCEE  |.  BA C4BF5500   mov     edx, 0055BFC4                    ;  software\microsoft\yhds
0055BCF3  |.  8BC6          mov     eax, esi
0055BCF5  |.  E8 0A77F1FF   call    00473404
0055BCFA  |.  68 80000000   push    80                               ; /BufSize = 80 (128.)
0055BCFF  |.  8D85 7BFFFFFF lea     eax, dword ptr [ebp-85]          ; |
0055BD05  |.  50            push    eax                              ; |Buffer
0055BD06  |.  E8 E1B5EAFF   call    <jmp.&kernel32.GetSystemDirector>; \GetSystemDirectoryA
0055BD0B  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
0055BD0E  |.  8D95 7BFFFFFF lea     edx, dword ptr [ebp-85]
0055BD14  |.  B9 81000000   mov     ecx, 81
0055BD19  |.  E8 CE8EEAFF   call    00404BEC
0055BD1E  |.  8D95 70FFFFFF lea     edx, dword ptr [ebp-90]
0055BD24  |.  8BBB FC020000 mov     edi, dword ptr [ebx+2FC]
0055BD2A  |.  8BC7          mov     eax, edi
0055BD2C  |.  E8 AFC1EEFF   call    00447EE0                         ;  //取用户名及长度
0055BD31  |.  8B85 70FFFFFF mov     eax, dword ptr [ebp-90]          ;  //送用户名
0055BD37  |.  8D95 74FFFFFF lea     edx, dword ptr [ebp-8C]
0055BD3D  |.  E8 8AD5EAFF   call    004092CC
0055BD42  |.  8B95 74FFFFFF mov     edx, dword ptr [ebp-8C]          ;  //送用户名
0055BD48  |.  8BC7          mov     eax, edi
0055BD4A  |.  E8 C1C1EEFF   call    00447F10
0055BD4F  |.  8D95 68FFFFFF lea     edx, dword ptr [ebp-98]
0055BD55  |.  8BBB 04030000 mov     edi, dword ptr [ebx+304]
0055BD5B  |.  8BC7          mov     eax, edi
0055BD5D  |.  E8 7EC1EEFF   call    00447EE0                         ;  //取假码及长度
0055BD62  |.  8B85 68FFFFFF mov     eax, dword ptr [ebp-98]          ;  //送假码
0055BD68  |.  8D95 6CFFFFFF lea     edx, dword ptr [ebp-94]
0055BD6E  |.  E8 59D5EAFF   call    004092CC
0055BD73  |.  8B95 6CFFFFFF mov     edx, dword ptr [ebp-94]          ;  //送假码
0055BD79  |.  8BC7          mov     eax, edi
0055BD7B  |.  E8 90C1EEFF   call    00447F10
0055BD80  |.  8D95 64FFFFFF lea     edx, dword ptr [ebp-9C]
0055BD86  |.  8B83 04030000 mov     eax, dword ptr [ebx+304]
0055BD8C  |.  E8 4FC1EEFF   call    00447EE0
0055BD91  |.  83BD 64FFFFFF>cmp     dword ptr [ebp-9C], 0            ;  //较验注册码是否为空
0055BD98  |.  74 1A         je      short 0055BDB4                   ;  //跳往注册信息未写全,
0055BD9A  |.  8D95 60FFFFFF lea     edx, dword ptr [ebp-A0]
0055BDA0  |.  8B83 FC020000 mov     eax, dword ptr [ebx+2FC]
0055BDA6  |.  E8 35C1EEFF   call    00447EE0                         ;  //取用户名及长度
0055BDAB  |.  83BD 60FFFFFF>cmp     dword ptr [ebp-A0], 0            ;  //较验用户名是否为空
0055BDB2  |.  75 0F         jnz     short 0055BDC3
0055BDB4  |>  B8 E4BF5500   mov     eax, 0055BFE4                    ;  注册信息没有填写齐全
0055BDB9  |.  E8 AE4EEEFF   call    00440C6C
0055BDBE  |.  E9 5E010000   jmp     0055BF21
0055BDC3  |>  8D95 5CFFFFFF lea     edx, dword ptr [ebp-A4]
0055BDC9  |.  8B83 04030000 mov     eax, dword ptr [ebx+304]
0055BDCF  |.  E8 0CC1EEFF   call    00447EE0                         ;  //取假码及长度
0055BDD4  |.  8B85 5CFFFFFF mov     eax, dword ptr [ebp-A4]          ;  //送假码
0055BDDA  |.  50            push    eax                              ;  //入栈
0055BDDB  |.  8D95 54FFFFFF lea     edx, dword ptr [ebp-AC]
0055BDE1  |.  8B83 FC020000 mov     eax, dword ptr [ebx+2FC]
0055BDE7  |.  E8 F4C0EEFF   call    00447EE0                         ;  //取用户名及长度
0055BDEC  |.  8B85 54FFFFFF mov     eax, dword ptr [ebp-AC]          ;  //送用户名
0055BDF2  |.  E8 89D8EAFF   call    00409680                         ;  //用户名转换为16进制
0055BDF7  |.  B9 4C030000   mov     ecx, 34C                         ;  //34C==》844(除数)
0055BDFC  |.  99            cdq                                      ;  //双字节扩展,把EAX中的字的符号扩展到EDX中去
0055BDFD  |.  F7F9          idiv    ecx                              ;  //有符号除法,EAX/ECX,商回送AX,余数回送DX
0055BDFF  |.  8BC2          mov     eax, edx                         ;  //余数送给EAX
0055BE01  |.  8D95 58FFFFFF lea     edx, dword ptr [ebp-A8]
0055BE07  |.  E8 B0FDFFFF   call    0055BBBC                         ;  //关键,得出真码
0055BE0C  |.  8B95 58FFFFFF mov     edx, dword ptr [ebp-A8]          ;  //作内存注册机的位置,软件好像会反内存注册机
0055BE12  |.  58            pop     eax
0055BE13  |.  E8 688FEAFF   call    00404D80                         ;  //是否注册的较验
0055BE18  |.  0F85 E9000000 jnz     0055BF07                         ;  //跳过本软件已注册
0055BE1E  |.  A1 807D5700   mov     eax, dword ptr [577D80]
0055BE23  |.  8B00          mov     eax, dword ptr [eax]
0055BE25  |.  8B80 2C040000 mov     eax, dword ptr [eax+42C]
0055BE2B  |.  BA 04C05500   mov     edx, 0055C004                    ;  本软件已注册
0055BE30  |.  E8 DBC0EEFF   call    00447F10
0055BE35  |.  8D95 50FFFFFF lea     edx, dword ptr [ebp-B0]
0055BE3B  |.  8B83 FC020000 mov     eax, dword ptr [ebx+2FC]
0055BE41  |.  E8 9AC0EEFF   call    00447EE0
0055BE46  |.  8B8D 50FFFFFF mov     ecx, dword ptr [ebp-B0]
0055BE4C  |.  BA 1CC05500   mov     edx, 0055C01C                    ;  ssbxr
0055BE51  |.  8BC6          mov     eax, esi
0055BE53  |.  E8 4877F1FF   call    004735A0
0055BE58  |.  8D85 4CFFFFFF lea     eax, dword ptr [ebp-B4]
0055BE5E  |.  B9 2CC05500   mov     ecx, 0055C02C                    ;  \c31l.dll
0055BE63  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
0055BE66  |.  E8 1D8EEAFF   call    00404C88
0055BE6B  |.  8B8D 4CFFFFFF mov     ecx, dword ptr [ebp-B4]
0055BE71  |.  B2 01         mov     dl, 1
0055BE73  |.  A1 B0224700   mov     eax, dword ptr [4722B0]
0055BE78  |.  E8 E364F1FF   call    00472360
0055BE7D  |.  8BF0          mov     esi, eax
0055BE7F  |.  8D95 48FFFFFF lea     edx, dword ptr [ebp-B8]
0055BE85  |.  8B83 04030000 mov     eax, dword ptr [ebx+304]
0055BE8B  |.  E8 50C0EEFF   call    00447EE0
0055BE90  |.  8B85 48FFFFFF mov     eax, dword ptr [ebp-B8]
0055BE96  |.  50            push    eax
0055BE97  |.  B9 40C05500   mov     ecx, 0055C040                    ;  dd
0055BE9C  |.  BA 4CC05500   mov     edx, 0055C04C                    ;  sysetup
0055BEA1  |.  8BC6          mov     eax, esi
0055BEA3  |.  8B38          mov     edi, dword ptr [eax]
0055BEA5  |.  FF57 04       call    dword ptr [edi+4]
0055BEA8  |.  8D95 44FFFFFF lea     edx, dword ptr [ebp-BC]
0055BEAE  |.  8B83 FC020000 mov     eax, dword ptr [ebx+2FC]
0055BEB4  |.  E8 27C0EEFF   call    00447EE0
0055BEB9  |.  8B85 44FFFFFF mov     eax, dword ptr [ebp-BC]
0055BEBF  |.  50            push    eax
0055BEC0  |.  B9 5CC05500   mov     ecx, 0055C05C                    ;  zc
0055BEC5  |.  BA 4CC05500   mov     edx, 0055C04C                    ;  sysetup
0055BECA  |.  8BC6          mov     eax, esi
0055BECC  |.  8B30          mov     esi, dword ptr [eax]
0055BECE  |.  FF56 04       call    dword ptr [esi+4]
0055BED1  |.  8D85 40FFFFFF lea     eax, dword ptr [ebp-C0]
0055BED7  |.  B9 2CC05500   mov     ecx, 0055C02C                    ;  \c31l.dll
0055BEDC  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
0055BEDF  |.  E8 A48DEAFF   call    00404C88
0055BEE4  |.  8B85 40FFFFFF mov     eax, dword ptr [ebp-C0]
0055BEEA  |.  BA 02000000   mov     edx, 2
0055BEEF  |.  E8 B8DAEAFF   call    004099AC
0055BEF4  |.  B8 68C05500   mov     eax, 0055C068                    ;  注册成功!
0055BEF9  |.  E8 6E4DEEFF   call    00440C6C
0055BEFE  |.  8BC3          mov     eax, ebx
0055BF00  |.  E8 439AF0FF   call    00465948
0055BF05  |.  EB 1A         jmp     short 0055BF21
0055BF07  |>  33D2          xor     edx, edx
0055BF09  |.  8B83 FC020000 mov     eax, dword ptr [ebx+2FC]
0055BF0F  |.  E8 FCBFEEFF   call    00447F10
0055BF14  |.  33D2          xor     edx, edx
0055BF16  |.  8B83 04030000 mov     eax, dword ptr [ebx+304]
0055BF1C  |.  E8 EFBFEEFF   call    00447F10
0055BF21  |>  33C0          xor     eax, eax
0055BF23  |.  5A            pop     edx
0055BF24  |.  59            pop     ecx
0055BF25  |.  59            pop     ecx
0055BF26  |.  64:8910       mov     dword ptr fs:[eax], edx
0055BF29  |.  68 B3BF5500   push    0055BFB3
0055BF2E  |>  8D85 40FFFFFF lea     eax, dword ptr [ebp-C0]
0055BF34  |.  E8 4B8AEAFF   call    00404984
0055BF39  |.  8D85 44FFFFFF lea     eax, dword ptr [ebp-BC]
0055BF3F  |.  BA 02000000   mov     edx, 2
0055BF44  |.  E8 5F8AEAFF   call    004049A8
0055BF49  |.  8D85 4CFFFFFF lea     eax, dword ptr [ebp-B4]
0055BF4F  |.  E8 308AEAFF   call    00404984
0055BF54  |.  8D85 50FFFFFF lea     eax, dword ptr [ebp-B0]
0055BF5A  |.  BA 02000000   mov     edx, 2
0055BF5F  |.  E8 448AEAFF   call    004049A8
0055BF64  |.  8D85 58FFFFFF lea     eax, dword ptr [ebp-A8]
0055BF6A  |.  E8 158AEAFF   call    00404984
0055BF6F  |.  8D85 5CFFFFFF lea     eax, dword ptr [ebp-A4]
0055BF75  |.  BA 04000000   mov     edx, 4
0055BF7A  |.  E8 298AEAFF   call    004049A8
0055BF7F  |.  8D85 6CFFFFFF lea     eax, dword ptr [ebp-94]
0055BF85  |.  E8 FA89EAFF   call    00404984
0055BF8A  |.  8D85 70FFFFFF lea     eax, dword ptr [ebp-90]
0055BF90  |.  E8 EF89EAFF   call    00404984
0055BF95  |.  8D85 74FFFFFF lea     eax, dword ptr [ebp-8C]
0055BF9B  |.  E8 E489EAFF   call    00404984
0055BFA0  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
0055BFA3  |.  E8 DC89EAFF   call    00404984
0055BFA8  \.  C3            retn
0055BFA9   .^ E9 7A82EAFF   jmp     00404228
0055BFAE   .^ E9 7BFFFFFF   jmp     0055BF2E
0055BFB3   .  5F            pop     edi
0055BFB4   .  5E            pop     esi
0055BFB5   .  5B            pop     ebx
0055BFB6   .  8BE5          mov     esp, ebp
0055BFB8   .  5D            pop     ebp
0055BFB9   .  C3            retn


跟进算法CALL:0055BE07  |.  E8 B0FDFFFF   call    0055BBBC

0055BBBC  /$  55            push    ebp
0055BBBD  |.  8BEC          mov     ebp, esp
0055BBBF  |.  33C9          xor     ecx, ecx
0055BBC1  |.  51            push    ecx
0055BBC2  |.  51            push    ecx
0055BBC3  |.  51            push    ecx
0055BBC4  |.  51            push    ecx
0055BBC5  |.  53            push    ebx
0055BBC6  |.  56            push    esi
0055BBC7  |.  8BF2          mov     esi, edx
0055BBC9  |.  8BD8          mov     ebx, eax                         ;  //余数送给EBX
0055BBCB  |.  33C0          xor     eax, eax
0055BBCD  |.  55            push    ebp
0055BBCE  |.  68 8CBC5500   push    0055BC8C
0055BBD3  |.  64:FF30       push    dword ptr fs:[eax]
0055BBD6  |.  64:8920       mov     dword ptr fs:[eax], esp
0055BBD9  |.  81F3 F1250B00 xor     ebx, 0B25F1                      ;  //余数异或OB25F1(730609)
0055BBDF  |.  8BC3          mov     eax, ebx                         ;  //结果送给EAX
0055BBE1  |.  33D2          xor     edx, edx
0055BBE3  |.  52            push    edx                              ; /Arg2 => 00000000
0055BBE4  |.  50            push    eax                              ; |Arg1
0055BBE5  |.  8D45 FC       lea     eax, dword ptr [ebp-4]           ; |
0055BBE8  |.  E8 5FDAEAFF   call    0040964C                         ; \//结果转换为十进制,作为注册码前面N位
0055BBED  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0055BBF0  |.  0FB600        movzx   eax, byte ptr [eax]              ;  //取第一位
0055BBF3  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
0055BBF6  |.  0FB652 01     movzx   edx, byte ptr [edx+1]            ;  //取第二位
0055BBFA  |.  03C2          add     eax, edx                         ;  //第一位+第二位
0055BBFC  |.  B9 05000000   mov     ecx, 5                           ;  //送5
0055BC01  |.  99            cdq
0055BC02  |.  F7F9          idiv    ecx                              ;  //结果除以5
0055BC04  |.  80C2 34       add     dl, 34                           ;  //余数+34
0055BC07  |.  8855 F8       mov     byte ptr [ebp-8], dl             ;  //存结果(作为注册码第N+1位)
0055BC0A  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0055BC0D  |.  0FB640 02     movzx   eax, byte ptr [eax+2]            ;  //取第三位
0055BC11  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
0055BC14  |.  0FB652 03     movzx   edx, byte ptr [edx+3]            ;  //取第四位
0055BC18  |.  03C2          add     eax, edx                         ;  //第三位+第四位
0055BC1A  |.  B9 05000000   mov     ecx, 5                           ;  //送5
0055BC1F  |.  99            cdq
0055BC20  |.  F7F9          idiv    ecx                              ;  //结果除以5
0055BC22  |.  8BDA          mov     ebx, edx
0055BC24  |.  80C3 33       add     bl, 33                           ;  //余数+33
0055BC27  |.  885D F9       mov     byte ptr [ebp-7], bl             ;  //存结果(作为注册码第N+2位)
0055BC2A  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
0055BC2D  |.  8A55 F8       mov     dl, byte ptr [ebp-8]
0055BC30  |.  E8 2F8FEAFF   call    00404B64
0055BC35  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
0055BC38  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
0055BC3B  |.  B9 1B000000   mov     ecx, 1B
0055BC40  |.  E8 D792EAFF   call    00404F1C
0055BC45  |.  8D45 F0       lea     eax, dword ptr [ebp-10]
0055BC48  |.  8BD3          mov     edx, ebx
0055BC4A  |.  E8 158FEAFF   call    00404B64
0055BC4F  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
0055BC52  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
0055BC55  |.  B9 19000000   mov     ecx, 19
0055BC5A  |.  E8 BD92EAFF   call    00404F1C
0055BC5F  |.  8BC6          mov     eax, esi
0055BC61  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
0055BC64  |.  E8 6F8DEAFF   call    004049D8
0055BC69  |.  33C0          xor     eax, eax
0055BC6B  |.  5A            pop     edx
0055BC6C  |.  59            pop     ecx
0055BC6D  |.  59            pop     ecx
0055BC6E  |.  64:8910       mov     dword ptr fs:[eax], edx
0055BC71  |.  68 93BC5500   push    0055BC93
0055BC76  |>  8D45 F0       lea     eax, dword ptr [ebp-10]
0055BC79  |.  BA 02000000   mov     edx, 2
0055BC7E  |.  E8 258DEAFF   call    004049A8
0055BC83  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
0055BC86  |.  E8 F98CEAFF   call    00404984
0055BC8B  \.  C3            retn
0055BC8C   .^ E9 9785EAFF   jmp     00404228
0055BC91   .^ EB E3         jmp     short 0055BC76
0055BC93   .  5E            pop     esi
0055BC94   .  5B            pop     ebx
0055BC95   .  8BE5          mov     esp, ebp
0055BC97   .  5D            pop     ebp
0055BC98   .  C3            retn


算法总结:

1、用户名(纯数字)转换为十六进制除以34C(844),取余数,
2、余数与OB25F1(730609)进行异或运算,结果转换为十进制作为注册码前N位,
3、(第一位ASCII值+第二位ASCII值)除以5,余数+34 转换为数字作为第N+1位注册码,
4、(第三位ASCII值+第四位ASCII值)除以5,余数+33 转换为数字作为第N+2位注册码。

[ 本帖最后由 网络断魂 于 2007-11-10 13:46 编辑 ]
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2023-12-2 20:17
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2007-11-10 12:18:18 | 显示全部楼层
    牛叉,/:good
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    3 天前
  • 签到天数: 112 天

    [LV.6]常住居民II

    发表于 2007-11-11 08:52:48 | 显示全部楼层
    这个在ICG看过啊..在这边也支持啊..
    下了你这个动画来看看啊...
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2007-11-12 10:05:57 | 显示全部楼层
    /:018
    谢谢支持,嘎嘎
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-12 17:38:49 | 显示全部楼层
    /:09 不错 欢迎兄弟继续和大家分享算法分析文章
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2007-11-12 23:11:20 | 显示全部楼层
    NISY,牛人,我的奋斗目标!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-14 15:58:32 | 显示全部楼层
    嘿嘿,看过了,不过还是支持
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-14 22:21:59 | 显示全部楼层
    哎呀,看不太明白,还是支持
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-18 00:44:35 | 显示全部楼层
    呵呵,这么一说,明白了不少。谢谢楼主
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-18 20:53:49 | 显示全部楼层
    谢楼主,学习学习...
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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