- UID
- 48119
注册时间2008-3-4
阅读权限10
最后登录1970-1-1
周游历练
TA的每日心情 | 开心 2018-5-24 12:03 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
【破文标题】【yqlxj申请加入PYG】 里诺进销存管理软件(单机版)V3.30算法分析及注册机 (二)
【破文作者】yqlxj
【作者邮箱】[email protected]
【破解工具】PEID OD
【破解平台】XP SP2
【软件名称】里诺进销存管理软件(单机版)V3.30
【软件大小】
【原版下载】http://www.onlinedown.net/soft/40913.htm
【保护方式】无
【软件简介】里诺进销存管理系统是是一个集“进、销、存、财”四位一体的全功能商贸管理软件。软件界面设计简洁,美观。
其人性化的软件流程,使普通用户不需培训也能很快掌握软件操作使用方法,上手极易。强大报表与集成查询功
能是本软件的最大特色,所有功能在用户需要的使用地方自然体现,不用打开多个窗口重复查询。
------------------------------------------------------------------------
【算法分析过程 】:
用PEID查,无壳,Borland Delphi 6.0 - 7.0.
OD载入,查找到字符串'注册失败,请检查您的注册名和注册码!',双击来到,
注册开始:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
0070E2F6 push ebp
0070E2F7 push 0070E435
0070E2FC push dword ptr fs:[eax]
0070E2FF mov dword ptr fs:[eax], esp
0070E302 mov eax, dword ptr [ebp-4]
0070E305 call 0070E5B0 ; 关键CALL
0070E30A test al, al
0070E30C je 0070E3ED
0070E312 xor eax, eax
0070E314 push ebp
0070E315 push 0070E3D1
0070E31A push dword ptr fs:[eax]
0070E31D mov dword ptr fs:[eax], esp
0070E320 mov dl, 1
0070E322 mov eax, dword ptr [44F400]
0070E327 call 0044F624
0070E32C mov ebx, eax
0070E32E mov edx, 80000002
0070E333 mov eax, ebx
0070E335 call 0044F700
0070E33A mov cl, 1
0070E33C mov edx, 0070E44C ; software\zy\jxc
0070E341 mov eax, ebx
0070E343 call 0044F844
0070E348 lea edx, dword ptr [ebp-C]
0070E34B mov eax, dword ptr [ebp-4]
0070E34E mov eax, dword ptr [eax+304]
0070E354 call 00491D84
0070E359 mov eax, dword ptr [ebp-C]
0070E35C lea edx, dword ptr [ebp-8]
0070E35F call 0040A440
0070E364 mov ecx, dword ptr [ebp-8]
0070E367 mov edx, 0070E464 ; name
0070E36C mov eax, ebx
0070E36E call 0044FD94
0070E373 lea edx, dword ptr [ebp-14]
0070E376 mov eax, dword ptr [ebp-4]
0070E379 mov eax, dword ptr [eax+308]
0070E37F call 00491D84
0070E384 mov eax, dword ptr [ebp-14]
0070E387 lea edx, dword ptr [ebp-10]
0070E38A call 0040A440
0070E38F mov ecx, dword ptr [ebp-10]
0070E392 mov edx, 0070E474 ; pass
0070E397 mov eax, ebx
0070E399 call 0044FD94
0070E39E mov eax, ebx
0070E3A0 call 00403FA0
0070E3A5 push 40
0070E3A7 push 0070E47C ; 软件注册
0070E3AC push 0070E488 ; 注册成功,本程序所有功能限制下次启动时将被自动解除,欢迎您成为我们正式版本用户!
0070E3B1 mov eax, dword ptr [ebp-4]
0070E3B4 call 00498834
0070E3B9 push eax ; |hOwner
0070E3BA call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0070E3BF mov eax, dword ptr [ebp-4]
0070E3C2 call 004AFBBC
0070E3C7 xor eax, eax
0070E3C9 pop edx
0070E3CA pop ecx
0070E3CB pop ecx
0070E3CC mov dword ptr fs:[eax], edx
0070E3CF jmp short 0070E407
0070E3D1 jmp 00404480
0070E3D6 mov eax, dword ptr [ebp-4]
0070E3D9 call 004AFBBC
0070E3DE mov eax, dword ptr [ebp-4]
0070E3E1 call 0070E4FC
0070E3E6 call 004048AC
0070E3EB jmp short 0070E407
0070E3ED push 40
0070E3EF push 0070E47C ; 软件注册
0070E3F4 push 0070E4D8 ; 注册失败,请检查您的注册名和注册码!
0070E3F9 mov eax, dword ptr [ebp-4]
0070E3FC call 00498834
0070E401 push eax ; |hOwner
0070E402 call <jmp.&user32.MessageBoxA> ; \MessageBoxA
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
关键CALL:
0070E5B0 push ebp
0070E5B1 mov ebp, esp
0070E5B3 mov ecx, 4
0070E5B8 /push 0
0070E5BA |push 0
0070E5BC |dec ecx
0070E5BD \jnz short 0070E5B8
0070E5BF push ecx
0070E5C0 push ebx
0070E5C1 push esi
0070E5C2 mov esi, eax
0070E5C4 xor eax, eax
0070E5C6 push ebp
0070E5C7 push 0070E6C5
0070E5CC push dword ptr fs:[eax]
0070E5CF mov dword ptr fs:[eax], esp
0070E5D2 lea edx, dword ptr [ebp-8]
0070E5D5 mov eax, dword ptr [esi+308]
0070E5DB call 00491D84 ; 得到假码的长度
0070E5E0 mov eax, dword ptr [ebp-8] ; ebx-8存放着假注册码
0070E5E3 lea edx, dword ptr [ebp-4]
0070E5E6 call 0040A440
0070E5EB mov eax, dword ptr [ebp-4]
0070E5EE push eax
0070E5EF lea edx, dword ptr [ebp-14]
0070E5F2 mov eax, dword ptr [esi+304]
0070E5F8 call 00491D84 ; 得到序列号的长度
0070E5FD mov eax, dword ptr [ebp-14] ; 把序列号放到EAX中
0070E600 lea edx, dword ptr [ebp-10]
0070E603 call 0040A440
0070E608 mov edx, dword ptr [ebp-10]
0070E60B lea ecx, dword ptr [ebp-C]
0070E60E mov eax, esi
0070E610 call 0070E714 ; 关键算法CALL
0070E615 mov edx, dword ptr [ebp-C]
0070E618 pop eax
0070E619 call 004052D0 ; ?
------------------------------------------------------------------------------------------------------------------------------------------------------
关键算法CALL:
0070E714 push ebp
0070E715 mov ebp, esp
0070E717 push ecx
0070E718 mov ecx, 4
0070E71D /push 0
0070E71F |push 0
0070E721 |dec ecx
0070E722 \jnz short 0070E71D
0070E724 push ecx
0070E725 xchg dword ptr [ebp-4], ecx
0070E728 push ebx
0070E729 push esi
0070E72A push edi
0070E72B mov edi, ecx
0070E72D mov dword ptr [ebp-4], edx
0070E730 mov eax, dword ptr [ebp-4] ; EDX的值给EAX 机器码放到EAX中
0070E733 call 00405374 ; EDX=2
0070E738 xor eax, eax
0070E73A push ebp
0070E73B push 0070E8D5
0070E740 push dword ptr fs:[eax]
0070E743 mov dword ptr fs:[eax], esp
0070E746 mov eax, edi
0070E748 call 00404EB4
0070E74D mov eax, dword ptr [ebp-4]
0070E750 call 00405184 ; 机器码位数EAX中 是取字符串长度的函数
0070E755 mov esi, eax ; ESI=EAX
0070E757 test esi, esi
0070E759 jle short 0070E781
0070E75B mov ebx, 1
0070E760 /lea ecx, dword ptr [ebp-14]
0070E763 |mov eax, dword ptr [ebp-4] ; 机器码放到EAX中
0070E766 |movzx eax, byte ptr [eax+ebx-1] ; 按位取各自的ASCII码值放到EAX中
0070E76B |xor edx, edx ; EDX清零
0070E76D |call 0040AD5C
0070E772 |mov edx, dword ptr [ebp-14] ; 机器码放到EDX中
0070E775 |lea eax, dword ptr [ebp-8]
0070E778 |call 0040518C
0070E77D |inc ebx ; +1
0070E77E |dec esi ; -1
0070E77F \jnz short 0070E760 ; 循环取每一位的ASCII码值
0070E781 mov eax, dword ptr [ebp-8] ; 把所有得到ASCII值连接在一起放到EAX中
0070E784 call 00405184 ; eax=10 取连接在一起的字符串长度
0070E789 mov esi, eax
0070E78B test esi, esi
0070E78D jle short 0070E7BB
0070E78F mov ebx, 1
0070E794 /mov eax, dword ptr [ebp-8]
0070E797 |call 00405184 ; eax=10 取连接在一起的字符串长度
0070E79C |sub eax, ebx ; eax-1
0070E79E |mov edx, dword ptr [ebp-8] ; 把所有得到ASCII值连接在一起放到EdX中
0070E7A1 |mov dl, byte ptr [edx+eax] ; 可以认为地址从后往前指 把取得的值放到DL中去
0070E7A4 |lea eax, dword ptr [ebp-18]
0070E7A7 |call 0040509C
0070E7AC |mov edx, dword ptr [ebp-18]
0070E7AF |lea eax, dword ptr [ebp-C]
0070E7B2 |call 0040518C
0070E7B7 |inc ebx ; +1
0070E7B8 |dec esi
0070E7B9 \jnz short 0070E794
0070E7BB lea eax, dword ptr [ebp-8]
0070E7BE push eax
0070E7BF mov ecx, 4
0070E7C4 mov edx, 1
0070E7C9 mov eax, dword ptr [ebp-C]
0070E7CC call 004053E4
0070E7D1 lea eax, dword ptr [ebp-C]
0070E7D4 push eax
0070E7D5 mov ecx, 4
0070E7DA mov edx, 5
0070E7DF mov eax, dword ptr [ebp-C]
0070E7E2 call 004053E4 ; 取前4位字符
0070E7E7 mov eax, dword ptr [ebp-8] ; 放到EAX中去
0070E7EA call 00405184 ; 得到长度
0070E7EF cmp eax, 4 ; 和4比较 相等跳
0070E7F2 jge short 0070E823
0070E7F4 mov eax, dword ptr [ebp-8]
0070E7F7 call 00405184
0070E7FC mov ebx, eax
0070E7FE cmp ebx, 3
0070E801 jg short 0070E823
0070E803 /lea ecx, dword ptr [ebp-1C]
0070E806 |mov eax, ebx
0070E808 |shl eax, 2
0070E80B |xor edx, edx
0070E80D |call 0040AD5C
0070E812 |mov edx, dword ptr [ebp-1C]
0070E815 |lea eax, dword ptr [ebp-8]
0070E818 |call 0040518C
0070E81D |inc ebx
0070E81E |cmp ebx, 4
0070E821 \jnz short 0070E803
0070E823 mov eax, dword ptr [ebp-C] ; 把次四位放到EAX中
0070E826 call 00405184 ; 取长度
0070E82B cmp eax, 4 ; 比较
0070E82E jge short 0070E85F
0070E830 mov eax, dword ptr [ebp-C]
0070E833 call 00405184
0070E838 mov ebx, eax
0070E83A cmp ebx, 3
0070E83D jg short 0070E85F
0070E83F /lea ecx, dword ptr [ebp-20]
0070E842 |mov eax, ebx
0070E844 |shl eax, 2
0070E847 |xor edx, edx
0070E849 |call 0040AD5C
0070E84E |mov edx, dword ptr [ebp-20]
0070E851 |lea eax, dword ptr [ebp-C]
0070E854 |call 0040518C
0070E859 |inc ebx
0070E85A |cmp ebx, 4
0070E85D \jnz short 0070E83F
0070E85F lea eax, dword ptr [ebp-10]
0070E862 mov edx, 0070E8EC ; jxcw268d58k 固定字符
0070E867 call 00404F4C
0070E86C lea eax, dword ptr [ebp-24]
0070E86F push eax
0070E870 mov ecx, 4
0070E875 mov edx, 1
0070E87A mov eax, dword ptr [ebp-10]
0070E87D call 004053E4 ; 取固定字符的前四位
0070E882 push dword ptr [ebp-24]
0070E885 push 0070E900 ; -
0070E88A push dword ptr [ebp-8] ; 倒序后字符的前四位
0070E88D lea eax, dword ptr [ebp-28]
0070E890 push eax
0070E891 mov ecx, 5
0070E896 mov edx, 5
0070E89B mov eax, dword ptr [ebp-10]
0070E89E call 004053E4
0070E8A3 push dword ptr [ebp-28] ; 取固定268d5
0070E8A6 push 0070E900 ; -
0070E8AB push dword ptr [ebp-C] ; 倒序后的次四位
0070E8AE mov eax, edi
0070E8B0 mov edx, 6
0070E8B5 call 00405244
0070E8BA xor eax, eax
0070E8BC pop edx
0070E8BD pop ecx
0070E8BE pop ecx
0070E8BF mov dword ptr fs:[eax], edx
0070E8C2 push 0070E8DC
0070E8C7 lea eax, dword ptr [ebp-28]
0070E8CA mov edx, 0A
0070E8CF call 00404ED8
0070E8D4 retn
------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------
【算法总结】:
1).序列号取按位取每个字符16进制ASCII码,排列起来.
2).然后进行颠倒顺序,。
3).取前8个字符,组成两个字符串前四个字符a,后四个字符b
4).然后和JXCw268d58k进行有序连接 JXCw-a268d5-b
5).最后输出
------------------------------------------------------------------------
【注册机源码(c语言)】:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int i=0,j=0,k=0,g=0,h=0,l=0;
char *p,a[10]={0},*p2,*p3,c;
char sernumber[10]={0};
printf("请输入机器码:");
scanf("%s",sernumber);
int length,length2;
length=strlen(sernumber);
for(i=0;i<8;i++)
{
p=hex10to16((int)sernumber[length-1]);
a=*p;
a[i+1]=*(p+1);
i++;
length--;
}
printf("注册码:JXCw-");
for(i=0;i<8;i++)
{
if((int)a>58)
{
printf("%c",a);
}
else
{
printf("%d",a);
}
h++;
if(h==4)
{
printf("268d5-");
}
}
printf("\n");
printf("手动输入得到的注册码,直接关掉黑色界面\n");
scanf("%s",sernumber); //输入用户名
}
char *hex10to16(int n)
{
char s[10]={0};
char v,*p;
int div;
int rev;
int i=0;
div = n;
if(div<16)
s[0] = div;
else
{
do{
rev = div%16;
s[1] = change1(rev);
div = div/16;
}
while(div >= 16);
s[0] = change1(div);
}
v=s[0];
s[0]=s[1];
s[1]=v;
p=&s[0];
return (p);
}
change1(int m)
{
char s;
switch(m)
{
case 10: s = 'A';
break;
case 11: s = 'B';
break;
case 12: s = 'C';
break;
case 13: s = 'D';
break;
case 14: s = 'E';
break;
case 15: s = 'F';
break;
default: s = m;
break;
}
return(s);
}
----------------------------------------------------------------------
【版权声明】本文原创于PYG论坛,转载请注明作者并保持文章的完整, 谢谢! |
|