【破文标题】里诺进销存管理软件 2.59注册流程分析
【破文作者】kyc
【破解工具】PEID,OD,
【破解平台】WIN XP sp2
【原版下载】http://www.onlinedown.net/soft/40913.htm
   破解难度: 算法简单。
【破解过程】
该软件原名叫易用进销存软件,现叫里诺进销存管理软件。破解比较简单主要是看注册算法。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
0064BB00      .  57              push edi
0064BB01      .  8945 FC         mov dword ptr ss:[ebp-4],eax
0064BB04      .  33C0            xor eax,eax
0064BB06      .  55              push ebp
0064BB07      .  68 45BC6400     push jxc.0064BC45
0064BB0C      .  64:FF30         push dword ptr fs:[eax]
0064BB0F      .  64:8920         mov dword ptr fs:[eax],esp
0064BB12      .  8B45 FC         mov eax,dword ptr ss:[ebp-4]
0064BB15      .  E8 A6020000     call jxc.0064BDC0
0064BB1A      .  84C0            test al,al
0064BB1C      .  0F84 DB000000   je jxc.0064BBFD
0064BB22      .  33C0            xor eax,eax
0064BB24      .  55              push ebp
0064BB25      .  68 E1BB6400     push jxc.0064BBE1
0064BB2A      .  64:FF30         push dword ptr fs:[eax]
0064BB2D      .  64:8920         mov dword ptr fs:[eax],esp
0064BB30      .  B2 01           mov dl,1
0064BB32      .  A1 C48C4400     mov eax,dword ptr ds:[448CC4]
0064BB37      .  E8 F4D2DFFF     call jxc.00448E30
0064BB3C      .  8BD8            mov ebx,eax
0064BB3E      .  BA 02000080     mov edx,80000002
0064BB43      .  8BC3            mov eax,ebx
0064BB45      .  E8 C2D3DFFF     call jxc.00448F0C
0064BB4A      .  B1 01           mov cl,1
0064BB4C      .  BA 5CBC6400     mov edx,jxc.0064BC5C                                ;  ASCII "Software\zy\JXC"
0064BB51      .  8BC3            mov eax,ebx
0064BB53      .  E8 F8D4DFFF     call jxc.00449050
0064BB58      .  8D55 F4         lea edx,dword ptr ss:[ebp-C]
0064BB5B      .  8B45 FC         mov eax,dword ptr ss:[ebp-4]
0064BB5E      .  8B80 04030000   mov eax,dword ptr ds:[eax+304]
0064BB64      .  E8 07C9E3FF     call jxc.00488470
0064BB69      .  8B45 F4         mov eax,dword ptr ss:[ebp-C]
0064BB6C      .  8D55 F8         lea edx,dword ptr ss:[ebp-8]
0064BB6F      .  E8 D8DEDBFF     call jxc.00409A4C
0064BB74      .  8B4D F8         mov ecx,dword ptr ss:[ebp-8]
0064BB77      .  BA 74BC6400     mov edx,jxc.0064BC74                                ;  ASCII "Name"
0064BB7C      .  8BC3            mov eax,ebx
0064BB7E      .  E8 69D6DFFF     call jxc.004491EC
0064BB83      .  8D55 EC         lea edx,dword ptr ss:[ebp-14]
0064BB86      .  8B45 FC         mov eax,dword ptr ss:[ebp-4]
0064BB89      .  8B80 08030000   mov eax,dword ptr ds:[eax+308]
0064BB8F      .  E8 DCC8E3FF     call jxc.00488470
0064BB94      .  8B45 EC         mov eax,dword ptr ss:[ebp-14]
0064BB97      .  8D55 F0         lea edx,dword ptr ss:[ebp-10]
0064BB9A      .  E8 ADDEDBFF     call jxc.00409A4C
0064BB9F      .  8B4D F0         mov ecx,dword ptr ss:[ebp-10]
0064BBA2      .  BA 84BC6400     mov edx,jxc.0064BC84                                ;  ASCII "Pass"
0064BBA7      .  8BC3            mov eax,ebx
0064BBA9      .  E8 3ED6DFFF     call jxc.004491EC
0064BBAE      .  8BC3            mov eax,ebx
0064BBB0      .  E8 AF7FDBFF     call jxc.00403B64
0064BBB5      .  6A 40           push 40
0064BBB7      .  68 8CBC6400     push jxc.0064BC8C
0064BBBC      .  68 98BC6400     push jxc.0064BC98                                   ;  注册成功
0064BBC1      .  8B45 FC         mov eax,dword ptr ss:[ebp-4]
0064BBC4      .  E8 AF32E4FF     call jxc.0048EE78
0064BBC9      .  50              push eax                                            ; |hOwner
0064BBCA      .  E8 E1C4DBFF     call <jmp.&user32.MessageBoxA>                      ; \MessageBoxA

////////////////////////////////////////////////////////////////////////////////////////////// call jxc.0064BDC0
0064BDC0     /$  55              push ebp
0064BDC1     |.  8BEC            mov ebp,esp
0064BDC3     |.  B9 04000000     mov ecx,4
0064BDC8     |>  6A 00           /push 0
0064BDCA     |.  6A 00           |push 0
0064BDCC     |.  49              |dec ecx
0064BDCD     |.^ 75 F9           \jnz short jxc.0064BDC8
0064BDCF     |.  51              push ecx
0064BDD0     |.  53              push ebx
0064BDD1     |.  56              push esi
0064BDD2     |.  8BF0            mov esi,eax
0064BDD4     |.  33C0            xor eax,eax
0064BDD6     |.  55              push ebp
0064BDD7     |.  68 D5BE6400     push jxc.0064BED5
0064BDDC     |.  64:FF30         push dword ptr fs:[eax]
0064BDDF     |.  64:8920         mov dword ptr fs:[eax],esp
0064BDE2     |.  8D55 F8         lea edx,dword ptr ss:[ebp-8]
0064BDE5     |.  8B86 08030000   mov eax,dword ptr ds:[esi+308]
0064BDEB     |.  E8 80C6E3FF     call jxc.00488470
0064BDF0     |.  8B45 F8         mov eax,dword ptr ss:[ebp-8]                        ;  假码
0064BDF3     |.  8D55 FC         lea edx,dword ptr ss:[ebp-4]
0064BDF6     |.  E8 51DCDBFF     call jxc.00409A4C
0064BDFB     |.  8B45 FC         mov eax,dword ptr ss:[ebp-4]
0064BDFE     |.  50              push eax
0064BDFF     |.  8D55 EC         lea edx,dword ptr ss:[ebp-14]
0064BE02     |.  8B86 04030000   mov eax,dword ptr ds:[esi+304]
0064BE08     |.  E8 63C6E3FF     call jxc.00488470
0064BE0D     |.  8B45 EC         mov eax,dword ptr ss:[ebp-14]                       ;  用户名
0064BE10     |.  8D55 F0         lea edx,dword ptr ss:[ebp-10]
0064BE13     |.  E8 34DCDBFF     call jxc.00409A4C
0064BE18     |.  8B55 F0         mov edx,dword ptr ss:[ebp-10]
0064BE1B     |.  8D4D F4         lea ecx,dword ptr ss:[ebp-C]
0064BE1E     |.  8BC6            mov eax,esi
0064BE20     |.  E8 FF000000     call jxc.0064BF24                                   ;  关键
0064BE25     |.  8B55 F4         mov edx,dword ptr ss:[ebp-C]                        ;  真码
0064BE28     |.  58              pop eax
0064BE29     |.  E8 3690DBFF     call jxc.00404E64
0064BE2E     |.  75 50           jnz short jxc.0064BE80
0064BE30     |.  B3 01           mov bl,1
0064BE32     |.  8D55 E4         lea edx,dword ptr ss:[ebp-1C]
0064BE35     |.  8B86 04030000   mov eax,dword ptr ds:[esi+304]
0064BE3B     |.  E8 30C6E3FF     call jxc.00488470
0064BE40     |.  8B45 E4         mov eax,dword ptr ss:[ebp-1C]
0064BE43     |.  8D55 E8         lea edx,dword ptr ss:[ebp-18]
0064BE46     |.  E8 01DCDBFF     call jxc.00409A4C
0064BE4B     |.  8B55 E8         mov edx,dword ptr ss:[ebp-18]

////////////////////////////////////////////////////////////////////////////////////////////////////////////////// call jxc.0064BF24  关键
0064BF24     /$  55              push ebp
0064BF25     |.  8BEC            mov ebp,esp
0064BF27     |.  51              push ecx
0064BF28     |.  B9 04000000     mov ecx,4
0064BF2D     |>  6A 00           /push 0
0064BF2F     |.  6A 00           |push 0
0064BF31     |.  49              |dec ecx
0064BF32     |.^ 75 F9           \jnz short jxc.0064BF2D
0064BF34     |.  51              push ecx
0064BF35     |.  874D FC         xchg dword ptr ss:[ebp-4],ecx
0064BF38     |.  53              push ebx
0064BF39     |.  56              push esi
0064BF3A     |.  57              push edi
0064BF3B     |.  8BF9            mov edi,ecx
0064BF3D     |.  8955 FC         mov dword ptr ss:[ebp-4],edx
0064BF40     |.  8B45 FC         mov eax,dword ptr ss:[ebp-4]                        ;  用户名
0064BF43     |.  E8 C08FDBFF     call jxc.00404F08
0064BF48     |.  33C0            xor eax,eax
0064BF4A     |.  55              push ebp
0064BF4B     |.  68 E5C06400     push jxc.0064C0E5
0064BF50     |.  64:FF30         push dword ptr fs:[eax]
0064BF53     |.  64:8920         mov dword ptr fs:[eax],esp
0064BF56     |.  8BC7            mov eax,edi
0064BF58     |.  E8 FB8ADBFF     call jxc.00404A58
0064BF5D     |.  8B45 FC         mov eax,dword ptr ss:[ebp-4]
0064BF60     |.  E8 B38DDBFF     call jxc.00404D18                                   ;  用户名长度
0064BF65     |.  8BF0            mov esi,eax
0064BF67     |.  85F6            test esi,esi
0064BF69     |.  7E 26           jle short jxc.0064BF91
0064BF6B     |.  BB 01000000     mov ebx,1
0064BF70     |>  8D4D EC         /lea ecx,dword ptr ss:[ebp-14]
0064BF73     |.  8B45 FC         |mov eax,dword ptr ss:[ebp-4]                       ;  用户名kyc
0064BF76     |.  0FB64418 FF     |movzx eax,byte ptr ds:[eax+ebx-1]                  ;  eax=name[i]
0064BF7B     |.  33D2            |xor edx,edx                                        ;  edx=0
0064BF7D     |.  E8 E2E1DBFF     |call jxc.0040A164
0064BF82     |.  8B55 EC         |mov edx,dword ptr ss:[ebp-14]
0064BF85     |.  8D45 F8         |lea eax,dword ptr ss:[ebp-8]
0064BF88     |.  E8 938DDBFF     |call jxc.00404D20
0064BF8D     |.  43              |inc ebx
0064BF8E     |.  4E              |dec esi
0064BF8F     |.^ 75 DF           \jnz short jxc.0064BF70                             ;  以上循环是提取用户名的ASCII
0064BF91     |>  8B45 F8         mov eax,dword ptr ss:[ebp-8]                        ;  用户名的ASCII=6B7963
0064BF94     |.  E8 7F8DDBFF     call jxc.00404D18                                   ;  用户名的ASCII长度
0064BF99     |.  8BF0            mov esi,eax
0064BF9B     |.  85F6            test esi,esi
0064BF9D     |.  7E 2C           jle short jxc.0064BFCB
0064BF9F     |.  BB 01000000     mov ebx,1                                           ;  EBX=1
0064BFA4     |>  8B45 F8         /mov eax,dword ptr ss:[ebp-8]                       ;  用户名的ASCII
0064BFA7     |.  E8 6C8DDBFF     |call jxc.00404D18                                  ;  EAX=用户名的ASCII长度
0064BFAC     |.  2BC3            |sub eax,ebx                                        ;  EAX=EAX-EBX
0064BFAE     |.  8B55 F8         |mov edx,dword ptr ss:[ebp-8]
0064BFB1     |.  8A1402          |mov dl,byte ptr ds:[edx+eax]
0064BFB4     |.  8D45 E8         |lea eax,dword ptr ss:[ebp-18]
0064BFB7     |.  E8 848CDBFF     |call jxc.00404C40
0064BFBC     |.  8B55 E8         |mov edx,dword ptr ss:[ebp-18]
0064BFBF     |.  8D45 F4         |lea eax,dword ptr ss:[ebp-C]
0064BFC2     |.  E8 598DDBFF     |call jxc.00404D20
0064BFC7     |.  43              |inc ebx
0064BFC8     |.  4E              |dec esi                                            ;  3697B6
0064BFC9     |.^ 75 D9           \jnz short jxc.0064BFA4                             ;  以上循环是对用户名的ASCII进行倒序排列
0064BFCB     |>  8D45 F8         lea eax,dword ptr ss:[ebp-8]
0064BFCE     |.  50              push eax
0064BFCF     |.  B9 04000000     mov ecx,4
0064BFD4     |.  BA 01000000     mov edx,1
0064BFD9     |.  8B45 F4         mov eax,dword ptr ss:[ebp-C]
0064BFDC     |.  E8 978FDBFF     call jxc.00404F78
0064BFE1     |.  8D45 F4         lea eax,dword ptr ss:[ebp-C]
0064BFE4     |.  50              push eax
0064BFE5     |.  B9 04000000     mov ecx,4
0064BFEA     |.  BA 05000000     mov edx,5
0064BFEF     |.  8B45 F4         mov eax,dword ptr ss:[ebp-C]
0064BFF2     |.  E8 818FDBFF     call jxc.00404F78
0064BFF7     |.  8B45 F8         mov eax,dword ptr ss:[ebp-8]
0064BFFA     |.  E8 198DDBFF     call jxc.00404D18                                   ;  用户名的ASCII进行倒序取前4个字符
0064BFFF     |.  83F8 04         cmp eax,4
0064C002     |.  7D 2F           jge short jxc.0064C033
0064C004     |.  8B45 F8         mov eax,dword ptr ss:[ebp-8]
0064C007     |.  E8 0C8DDBFF     call jxc.00404D18
0064C00C     |.  8BD8            mov ebx,eax
0064C00E     |.  83FB 03         cmp ebx,3
0064C011     |.  7F 20           jg short jxc.0064C033
0064C013     |>  8D4D E4         /lea ecx,dword ptr ss:[ebp-1C]
0064C016     |.  8BC3            |mov eax,ebx
0064C018     |.  C1E0 02         |shl eax,2
0064C01B     |.  33D2            |xor edx,edx
0064C01D     |.  E8 42E1DBFF     |call jxc.0040A164
0064C022     |.  8B55 E4         |mov edx,dword ptr ss:[ebp-1C]
0064C025     |.  8D45 F8         |lea eax,dword ptr ss:[ebp-8]
0064C028     |.  E8 F38CDBFF     |call jxc.00404D20
0064C02D     |.  43              |inc ebx
0064C02E     |.  83FB 04         |cmp ebx,4
0064C031     |.^ 75 E0           \jnz short jxc.0064C013
0064C033     |>  8B45 F4         mov eax,dword ptr ss:[ebp-C]
0064C036     |.  E8 DD8CDBFF     call jxc.00404D18                                   ;  取前4个字符
0064C03B     |.  83F8 04         cmp eax,4
0064C03E     |.  7D 2F           jge short jxc.0064C06F
0064C040     |.  8B45 F4         mov eax,dword ptr ss:[ebp-C]
0064C043     |.  E8 D08CDBFF     call jxc.00404D18
0064C048     |.  8BD8            mov ebx,eax
0064C04A     |.  83FB 03         cmp ebx,3
0064C04D     |.  7F 20           jg short jxc.0064C06F
0064C04F     |>  8D4D E0         /lea ecx,dword ptr ss:[ebp-20]
0064C052     |.  8BC3            |mov eax,ebx
0064C054     |.  C1E0 02         |shl eax,2
0064C057     |.  33D2            |xor edx,edx
0064C059     |.  E8 06E1DBFF     |call jxc.0040A164
0064C05E     |.  8B55 E0         |mov edx,dword ptr ss:[ebp-20]
0064C061     |.  8D45 F4         |lea eax,dword ptr ss:[ebp-C]
0064C064     |.  E8 B78CDBFF     |call jxc.00404D20
0064C069     |.  43              |inc ebx
0064C06A     |.  83FB 04         |cmp ebx,4
0064C06D     |.^ 75 E0           \jnz short jxc.0064C04F
0064C06F     |>  8D45 F0         lea eax,dword ptr ss:[ebp-10]
0064C072     |.  BA FCC06400     mov edx,jxc.0064C0FC                                ;  ASCII "JXCw268d58k"
0064C077     |.  E8 748ADBFF     call jxc.00404AF0
0064C07C     |.  8D45 DC         lea eax,dword ptr ss:[ebp-24]
0064C07F     |.  50              push eax
0064C080     |.  B9 04000000     mov ecx,4
0064C085     |.  BA 01000000     mov edx,1
0064C08A     |.  8B45 F0         mov eax,dword ptr ss:[ebp-10]
0064C08D     |.  E8 E68EDBFF     call jxc.00404F78
0064C092     |.  FF75 DC         push dword ptr ss:[ebp-24]
0064C095     |.  68 10C16400     push jxc.0064C110
0064C09A     |.  FF75 F8         push dword ptr ss:[ebp-8]
0064C09D     |.  8D45 D8         lea eax,dword ptr ss:[ebp-28]
0064C0A0     |.  50              push eax
0064C0A1     |.  B9 05000000     mov ecx,5
0064C0A6     |.  BA 05000000     mov edx,5
0064C0AB     |.  8B45 F0         mov eax,dword ptr ss:[ebp-10]                       ;  固定字符串=JXCw268d58k
0064C0AE     |.  E8 C58EDBFF     call jxc.00404F78
0064C0B3     |.  FF75 D8         push dword ptr ss:[ebp-28]
0064C0B6     |.  68 10C16400     push jxc.0064C110
0064C0BB     |.  FF75 F4         push dword ptr ss:[ebp-C]
0064C0BE     |.  8BC7            mov eax,edi
0064C0C0     |.  BA 06000000     mov edx,6
0064C0C5     |.  E8 0E8DDBFF     call jxc.00404DD8
0064C0CA     |.  33C0            xor eax,eax
0064C0CC     |.  5A              pop edx
0064C0CD     |.  59              pop ecx
0064C0CE     |.  59              pop ecx
0064C0CF     |.  64:8910         mov dword ptr fs:[eax],edx
0064C0D2     |.  68 ECC06400     push jxc.0064C0EC

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
总结:算法比较简单,主要利用用户名的ASCII生成字符串后和字符串常量"JXCw268d58k"进行插入,连接形成注册码。
具体实现看注册机源码。
// 进销存软件.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
using namespace std;
void daxie(char *a,int len)
{
  for(int i=0;i<len;i++)
  {
    if (a [i]>='a'&& a[i]<='z')
      a[i]=a[i]-32;
  }
}
void daoxu(char *a,int len)
{
  char str[20]={0};
  for(int i=0;i<len;i++)
  {
    str[len-i-1]=a[i];

  }
  strcpy(a,str);
}

int _tmain(int argc, _TCHAR* argv[])
{
  string stmp;
  char str[]="JXCw268d58k",username[12],sn[20],temp[20]={0},buffer[20]={0},temp1[20]={0},temp2[20]={0},temp3[20]={0};
  char sn1[20]={0},sn2[20]={0},sn3[20]={0},sn4[20];
  unsigned long key,key2;
  int i=0;
  cin>>username;
  int len=strlen(username);
  for(int i=0;i<len;i++)
  {
    key=username[i];
    _itoa( key, buffer, 16 );
    strcat(temp,buffer);
  }
  daxie(temp,strlen(temp));//转换成大写
  daoxu(temp,strlen(temp));


  key2=2;
  key=key2;
  __asm shl key,2
    _itoa( key, buffer, 16 );
  strcat(temp1,buffer);
  key2+=1;
  key=key2;
  __asm shl key,2
    _itoa( key, buffer, 16 );
  strcat(temp1,buffer);

  daxie(temp1,strlen(temp1));//转换成大写

  key2=0;
  key=key2;
  __asm shl key,2
    _itoa( key, buffer, 16 );
  strcat(temp2,buffer);
  key2+=1;
  key=key2;
  __asm shl key,2
    _itoa( key, buffer, 16 );
  strcat(temp2,buffer);

  daxie(temp2,strlen(temp2));//转换成大写
  strcat(temp3,temp2);
  strcat(temp2,temp1);

  cout<<"你的注册码:";//8c

  strncat(sn1,str,4);
  if(strlen(username)==1)
  {
    strcpy(sn2,temp);
    strcat(sn2,temp1);
    strcat(sn2,"268d5");
    strcpy(sn3,temp2);


    cout<<sn1<<"-"<<sn2<<"-"<<sn3<<endl;

  }
  if(strlen(username)==2)
  {
    strcpy(sn2,temp);
    strcat(sn2,"268d5");
    strcpy(sn3,temp2);


    cout<<sn1<<"-"<<sn2<<"-"<<sn3<<endl;

  }
  if(strlen(username)==3)
  {
    strncat(sn2,temp,4);
    strcat(sn2,"268d5");
    while(i<2)
    {
      sn3[i]=temp[i+4];
      i++;
    }

    strcat(sn3,temp1);


    cout<<sn1<<"-"<<sn2<<"-"<<sn3<<endl;

  }
  if(strlen(username)>=4)
  {
    strncat(sn2,temp,4);
    strcat(sn2,"268d5");
    while(i<4)
    {
      sn3[i]=temp[i+4];
      i++;
    }

    cout<<sn1<<"-"<<sn2<<"-"<<sn3<<endl;

  }
  system("pause");
  return 0;
}
编译平台XP SP2,VC.NET
写的很烂,请高手多多批评指正。