能力值:
( LV2,RANK:10 )
|
-
-
2 楼
顶一个先!
|
能力值:
( LV12,RANK:2670 )
|
-
-
3 楼
原密码表:"071362de9f8ab45c"
但是,算法密码表为:"71362de9f8ab45c"
对不?
Game Over
Name:KuNgBiM
Serial:ca5a85a5ad4ca1
|
能力值:
( LV9,RANK:170 )
|
-
-
4 楼
|
能力值:
( LV9,RANK:1250 )
|
-
-
5 楼
最初由 KuNgBiM 发布 原密码表:"071362de9f8ab45c" 但是,算法密码表为:"71362de9f8ab45c"
对不?
........
你观察得很仔细!的确如你所说。
|
能力值:
( LV9,RANK:1250 )
|
-
-
6 楼
最初由 xsy3660 发布
你做得很棒!
能做出软件的算法注册机而非内存注册机就更完美了!
|
能力值:
( LV9,RANK:290 )
|
-
-
7 楼
注册方法代码:VC的
void CKeyMakerDlg::OnButton1()
{
DWORD Vol1,Vol2,dw_ex,dw_Usr;
float a,b;
CString CSUsrName,CSRegKey;
CString ori;
ori = "071362de9f8ab45c";
GetDlgItemText(IDC_EDIT_USRNAME,CSUsrName);
GetVolumeInformation("C:\\",NULL,12,&Vol1,NULL,NULL,NULL,10);
GetVolumeInformation("D:\\",NULL,12,&Vol2,NULL,NULL,NULL,10);
a = float(Vol1);
b = float(Vol2);
a = a * a;
b = b * b;
a += b;
b = sqrt(a);
dw_ex = DWORD(b);
dw_Usr = 1;
for(int i = 0; i < CSUsrName.GetLength(); i++)
{
dw_Usr *= int(CSUsrName.GetAt(i));
}
_asm
{
mov eax,dw_Usr
rol eax,0x1
mov dw_Usr,eax
}
dw_Usr |= dw_ex;
dw_Usr &= 0xFFFFFFF;
while(dw_Usr != 0)
{
CSRegKey += ori.GetAt(dw_Usr % 0x10);
dw_Usr /= 0x4;
}
SetDlgItemText(IDC_EDIT_REGKEY,CSRegKey);
}
编译以后要用OD来改一改:
004013B7 |. 68 20304000 push KeyMaker.00403020 ; |RootPathName = "D:\"
004013BC |. FFD6 call esi ; \GetVolumeInformationA
004013BE |. 8B45 E0 mov eax,dword ptr ss:[ebp-20]
004013C1 |. 8B4D DC mov ecx,dword ptr ss:[ebp-24]
004013C4 |. 8945 D4 mov dword ptr ss:[ebp-2C],eax
004013C7 |. 895D D8 mov dword ptr ss:[ebp-28],ebx
004013CA |. DF6D D4 fild qword ptr ss:[ebp-2C]
004013CD |. 894D D4 mov dword ptr ss:[ebp-2C],ecx
004013D0 |. 895D D8 mov dword ptr ss:[ebp-28],ebx
004013D3 |. DF6D D4 fild qword ptr ss:[ebp-2C]
004013D6 |. D9C0 fld st
004013D8 |. D8C9 fmul st,st(1)
把QWORD的两项改为DWORD
004013C7 |. 895D D8 mov dword ptr ss:[ebp-28],ebx
004013CA DB45 D4 fild dword ptr ss:[ebp-2C]
004013CD |. 894D D4 mov dword ptr ss:[ebp-2C],ecx
004013D0 |. 895D D8 mov dword ptr ss:[ebp-28],ebx
004013D3 DB45 D4 fild dword ptr ss:[ebp-2C]
004013D6 |. D9C0 fld st
004013D8 |. D8C9 fmul st,st(1)
BTW:请问高手们,有没有办法在原代码里面修改呢?
float明明是4个字节的啊,应该是DWORD的,不应该是QWORD的
是不是VC编译器有问题了?
|
能力值:
( LV9,RANK:1250 )
|
-
-
8 楼
最初由 Pr0Zel 发布 注册方法代码:VC的 void CKeyMakerDlg::OnButton1() { DWORD Vol1,Vol2,dw_ex,dw_Usr; float a,b; ........ 恭喜!
你的注册算法是正确的!
因为俺不会用VC所以无法回答你的BTW^_^
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
俺发一个tc的注册机,(测试通过,在本机上可以使用)请高手指点一下,我的c水平有限您就将就一下吧!!
#include "stdio.h"
#include "conio.h"
unsigned long sn=0x1,temp=1,len,d,e,e1,temp1;
double a=1,b,c=2147483647;
char str1[]="071362de9f8ab45c";
char str2[50] ;
int k=0,k1;
main(){
char name[100];
int i;
i=1;
temp=1;
len=strlen(name);
printf("Please enter your name: ");
scanf("%s",name);
len=strlen(name);
for(i=0;i<len;i++)
{ temp*=name[i];
a*=name[i];
if(a>temp)
{ k1=(a-temp)/(2*c);
temp=temp+k1;
a=temp;
}
}
e=temp ;
temp=(e<<1)+(e1>>31);
temp=temp|0x38a1b332;
temp=temp&0x0fffffff;
while (temp!=0)
{temp1=temp%0x10 ;
if( temp1<0x10)
{
str2[k]=str1[temp1];
}
k+=1;
temp/=4;
}
printf("your sn is: ");
for(i=0;i<k;i++){
printf("%c",str2[i]);}
printf("\n\n");
getch();
}
|
能力值:
( LV9,RANK:290 )
|
-
-
10 楼
temp=temp|0x38a1b332;
这一句不正确,
那个0x38A1B332是由C,D盘的序列号算出来的
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
高手就是高手!!那一句我确实偷懒了。
以后还要向您多多学习!!
还有我在试“111222333”时结果是不对的,算法肯定有问题,请帮忙看一下!! Pr0Zel ---》我希望和你做个朋友!!
|
能力值:
( LV6,RANK:90 )
|
-
-
12 楼
我是个刚学破解10来天的菜菜鸟,这个CrackMe我跟了好久(15个钟以上),我最后也勉强跟出本机注册码及大致算法了,但像个别朋友一样都没有像PrOZel那样分析出最关键的用C、D盘序列号算出来的那个变化值,我明白这就是差距(当然是我差得最远)。
后来看了PrOZel的算法后,又跟了好久,终于完全明白了。这个CrackMe让我学到不少东西,非常感谢happytown(我还在学习你的另一篇“对一个CrackMe的分析”)和PrOZel。
PrOZel提到的浮点和Dword,我的理解不知道对不对:
00401062 |. DB45 08 fild [arg.1] ; C盘序列号
00401065 |. D9C0 fld st
00401067 |. DEC9 fmulp st(1),st ; 自乘
00401069 |. DB45 0C fild [arg.2] ; D盘序列号
0040106C |. D9C0 fld st
0040106E |. DEC9 fmulp st(1),st ; 自乘
00401070 |. DEC1 faddp st(1),st ; 相加
00401072 |. D9FA fsqrt ; 平方根
00401074 |. DB5D FC fistp [local.1] ; 以整数存储
最后化为整数存储,所以是否应该先用浮点变量,计算出结果后用函数将浮点变量化为长整数。
|
能力值:
( LV9,RANK:1250 )
|
-
-
13 楼
最初由 hud 发布 这个CrackMe让我学到不少东西,非常感谢happytown(我还在学习你的另一篇“对一个CrackMe的分析”)和PrOZel。
PrOZel提到的浮点和Dword,我的理解不知道对不对: ........
建议你看看intel指令集对浮点指令的解释,然后就会明白那段代码是干什么用的。
还有,共同提高,共同进步。
|
能力值:
( LV6,RANK:90 )
|
-
-
14 楼
谢谢你,我后来把这段的意义弄明白了。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
下来看看,,
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
刚开始学,用msam没有搞定,不懂算法,只好用oll了
goodfriend
8d24ccccce24c3
不会上传图片
|
能力值:
( LV9,RANK:1250 )
|
-
-
17 楼
最初由 silkroad 发布 刚开始学,用msam没有搞定,不懂算法,只好用oll了 goodfriend 8d24ccccce24c3 不会上传图片
不懂算法没关系,能找到明码也是一种进步;至于算法,慢慢来!
但一定要学,多看一些教程。比如,看雪的CrackMe精华就很不错。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
不太明白.........
|
能力值:
( LV13,RANK:410 )
|
-
-
19 楼
晕,刚作出注册机,不让传附件.源代码太长,不贴了
|