飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3646|回复: 8

三江门诊收费系统3.50算法分析

[复制链接]

该用户从未签到

发表于 2005-11-21 13:29:27 | 显示全部楼层 |阅读模式
【破文标题】三江门诊收费系统3.50算法分析
【破文作者】surge[PYG]
【作者邮箱】surgefree@163.com
【作者主页】无
破解工具】olldbg
【破解平台】win2000
【软件名称】三江门诊收费系统 3.50
【软件大小】1290KB
【原版下载】http://hecz.onlinedown.net/soft/28168.htm
【保护方式】序列号
【软件简介】三江门诊收费系统功能:门诊划价收费、药品进销存管理、医生及科室业绩管理、票据可打印明细,也可只打印大的分类,可以根据用户的要求定制各种发票样式,实现套打功能。本软件可以为用户定制开发多种功能,如优惠收费、欠费管理等。开发者有多年医院工作经验,软件最大的特点为简单实用,欢迎您下载试用并提出宝贵意见!

------------------------------------------------------------------------
【破解过程】
软件无壳Borland Delphi 6.0 - 7.0编译

查找字串参考到这里下断
0058C708   push    ebp
0058C709   mov     ebp, esp
0058C70B   xor     ecx, ecx
0058C70D   push    ecx
0058C70E   push    ecx
0058C70F   push    ecx
0058C710   push    ecx
0058C711   push    ecx
0058C712   push    ecx
0058C713   push    ebx
0058C714   mov     ebx, eax
0058C716   xor     eax, eax
0058C718   push    ebp
0058C719   push    SJMZSF.0058C8B5
0058C71E   push    dword ptr fs:[eax]
0058C721   mov     dword ptr fs:[eax], esp
0058C724   lea     edx, dword ptr ss:[ebp-4]
0058C727   mov     eax, dword ptr ds:[ebx+304]
0058C72D   call    SJMZSF.00478510
0058C732   cmp     dword ptr ss:[ebp-4], 0
0058C736   jnz     short SJMZSF.0058C747
0058C738   mov     eax, SJMZSF.0058C8CC             ;  注册码不能为空
0058C73D   call    SJMZSF.0043BBD0
0058C742   jmp     SJMZSF.0058C885
0058C747   lea     edx, dword ptr ss:[ebp-8]
0058C74A   mov     eax, dword ptr ds:[ebx+304]
0058C750   call    SJMZSF.00478510
0058C755   mov     eax, dword ptr ss:[ebp-8]
0058C758   push    eax
0058C759   lea     eax, dword ptr ss:[ebp-C]
0058C75C   push    eax
0058C75D   lea     edx, dword ptr ss:[ebp-10]
0058C760   mov     eax, dword ptr ds:[ebx+2FC]
0058C766   call    SJMZSF.00478510
0058C76B   mov     edx, dword ptr ss:[ebp-10]       ;  机器码在此出现
0058C76E   mov     eax, dword ptr ds:[592DA4]
0058C773   mov     eax, dword ptr ds:[eax]
0058C775   mov     cx, 64
0058C779   call    SJMZSF.00585BBC                  ;  跟进注册算法
0058C77E   mov     edx, dword ptr ss:[ebp-C]
0058C781   pop     eax
0058C782   call    SJMZSF.0040481C        ;比较
0058C787   jnz     SJMZSF.0058C87B        ;爆破

跟进算法Call之后到这里

00585BBC   push    ebp
00585BBD   mov     ebp, esp
00585BBF   add     esp, -0C
00585BC2   push    ebx
00585BC3   push    esi
00585BC4   push    edi
00585BC5   xor     ebx, ebx
00585BC7   mov     dword ptr ss:[ebp-8], ebx
00585BCA   mov     esi, ecx
00585BCC   mov     dword ptr ss:[ebp-4], edx
00585BCF   xor     eax, eax
00585BD1   push    ebp
00585BD2   push    SJMZSF.00585C5D
00585BD7   push    dword ptr fs:[eax]
00585BDA   mov     dword ptr fs:[eax], esp
00585BDD   mov     eax, dword ptr ss:[ebp-4]
00585BE0   call    SJMZSF.004046D0                  ;  eax返回机器码长度
00585BE5   mov     edx, eax
00585BE7   lea     eax, dword ptr ss:[ebp-8]
00585BEA   call    SJMZSF.00404A5C
00585BEF   mov     eax, dword ptr ss:[ebp-4]
00585BF2   call    SJMZSF.004046D0
00585BF7   test    al, al
00585BF9   jbe     short SJMZSF.00585C3C
00585BFB   mov     byte ptr ss:[ebp-9], al
00585BFE   mov     bl, 1
00585C00   /lea     eax, dword ptr ss:[ebp-8]
00585C03   |call    SJMZSF.00404928                 ;  eax返回计算结果保存地址
00585C08   |mov     edi, ebx
00585C0A   |and     edi, 0FF
00585C10   |mov     edx, dword ptr ss:[ebp-4]
00585C13   |mov     dl, byte ptr ds:[edx+edi-1]     ;  取一个字符
00585C17   |movzx   ecx, si                         ;  si初始值为0x64
00585C1A   |shr     ecx, 8
00585C1D   |xor     dl, cl                          ;  与cl异或0
00585C1F   |mov     byte ptr ds:[eax+edi-1], dl     ;  保存计算结果
00585C23   |mov     eax, dword ptr ss:[ebp-4]
00585C26   |movzx   eax, byte ptr ds:[eax+edi-1]
00585C2B   |add     si, ax                          ;  取一个字符+si
00585C2E   |add     si, 0D                          ;  再加0x0d
00585C32   |add     si, 19                          ;  再加0x19
00585C36   |inc     ebx                             ;  计数加1
00585C37   |dec     byte ptr ss:[ebp-9]             ;  取完所有字符
00585C3A   \jnz     short SJMZSF.00585C00
00585C3C   mov     eax, dword ptr ss:[ebp+8]
00585C3F   mov     edx, dword ptr ss:[ebp-8]
00585C42   call    SJMZSF.00404464
00585C47   xor     eax, eax
00585C49   pop     edx
00585C4A   pop     ecx
00585C4B   pop     ecx
00585C4C   mov     dword ptr fs:[eax], edx
00585C4F   push    SJMZSF.00585C64
00585C54   lea     eax, dword ptr ss:[ebp-8]
00585C57   call    SJMZSF.00404410
00585C5C   retn

上面的循环用C语言描述一下:

int getkey(char * k_dest,char * k_src)
{
        int i,j,k;
        int si=0x64;
       
        j=strlen(k_src);
        for (i=0;i<j;i++)
                {
                k=si;
                *k_dest=*k_src^(k>>8);
                si+=*k_src+0x0d+0x19;
                k_src++;
                k_dest++;
                }
        *k_dest='\0';
        return 0;
}
------------------------------------------------------------------------
【破解总结】适合初学者学算法。
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!
PYG19周年生日快乐!

该用户从未签到

发表于 2005-11-22 09:18:37 | 显示全部楼层
学习了```
PYG19周年生日快乐!
  • TA的每日心情

    5 天前
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2005-12-18 12:43:46 | 显示全部楼层
    学习了```
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 1506 天

    [LV.Master]伴坛终老

    发表于 2006-1-15 11:00:07 | 显示全部楼层
    学一学,备用!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-6-27 16:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2006-2-2 00:21:07 | 显示全部楼层
    厉害!跟着学习一下。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-4-24 14:45
  • 签到天数: 188 天

    [LV.7]常住居民III

    发表于 2006-3-18 20:00:13 | 显示全部楼层
    学习!学习!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-19 15:08:06 | 显示全部楼层
    学习了```
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-1-14 00:02
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2006-6-11 23:52:32 | 显示全部楼层
    厉害..小弟学习了.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-19 16:34:32 | 显示全部楼层
    收藏 ,学习!谢谢
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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