能力值:
( LV12,RANK:370 )
在线值:
2 楼
结合dede设置断点很容易来到计算注册码处:
00454B4C |> /8B4D F4 /mov ecx,dword ptr ss:[ebp-C] ; 计算你输入的code的ascii和
00454B4F |. |0FB64C11 FF |movzx ecx,byte ptr ds:[ecx+edx-1]
00454B54 |. |014D E8 |add dword ptr ss:[ebp-18],ecx
00454B57 |. |42 |inc edx
00454B58 |. |48 |dec eax
00454B59 |.^\75 F1 \jnz short bos9.00454B4C
00454B5B |> 8B45 F0 mov eax,dword ptr ss:[ebp-10]
00454B5E |. E8 69F6FAFF call bos9.004041CC
00454B63 |. 85C0 test eax,eax
00454B65 |. 7E 14 jle short bos9.00454B7B
00454B67 |. BA 01000000 mov edx,1
00454B6C |> 8B4D F0 /mov ecx,dword ptr ss:[ebp-10] ; 计算固定字符串"bos"的ascii和
00454B6F |. 0FB64C11 FF |movzx ecx,byte ptr ds:[ecx+edx-1]
00454B74 |. 014D E4 |add dword ptr ss:[ebp-1C],ecx
00454B77 |. 42 |inc edx
00454B78 |. 48 |dec eax
00454B79 |.^ 75 F1 \jnz short bos9.00454B6C
00454B7B |> 8B45 EC mov eax,dword ptr ss:[ebp-14]
00454B7E |. E8 49F6FAFF call bos9.004041CC
00454B83 |. 85C0 test eax,eax
00454B85 |. 7E 14 jle short bos9.00454B9B
00454B87 |. BA 01000000 mov edx,1
00454B8C |> 8B4D EC /mov ecx,dword ptr ss:[ebp-14] ; 计算serial number的ascii和
00454B8F |. 0FB64C11 FF |movzx ecx,byte ptr ds:[ecx+edx-1]
00454B94 |. 014D E0 |add dword ptr ss:[ebp-20],ecx
00454B97 |. 42 |inc edx
00454B98 |. 48 |dec eax
00454B99 |.^ 75 F1 \jnz short bos9.00454B8C
00454B9B |> 335D E8 xor ebx,dword ptr ss:[ebp-18] ; ebx=sum_of_code xor sum_of_name
00454B9E |. 8B45 E4 mov eax,dword ptr ss:[ebp-1C] ; 取sum_of_string_bos
00454BA1 |. F76D E0 imul dword ptr ss:[ebp-20] ; eax=sum_of_string_bos * serialsum
00454BA4 3BD8 cmp ebx,eax ; ebx=eax?
00454BA6 74 1D je short bos9.00454BC5
计算过程如注释,因为异或是可以逆的,所以很容易逆向得到注册码.
注册机代码(编程很烂,凑合看吧):
/*-------------keygen.cpp------------------*/
#include <iostream>
#include <fstream>
using namespace std;
int sum(char *);
void main()
{
char FixString[]="bos";
char name[20];
char serial[20];
int SumOfName(0),SumOfSerial(0),SumOfString(0),SumOfCode(0);
char ch;
cout<<"Your name:";
cin>>name;
cout<<"\nSerial number:";
cin>>serial;
SumOfName=sum(name);
SumOfSerial=sum(serial);
SumOfString=sum(FixString);
SumOfCode=(SumOfString*SumOfSerial)^SumOfName;
fstream file;
file.open("code.txt",ios::out);
if(!file)
cout<<"file create error!";
else
{
if((SumOfCode%0x7a)>=0x30)
{
for(int i=1;i<=(SumOfCode/0x7a);i++)
{
ch='z';
file.write(&ch,sizeof(char));
}
ch=SumOfCode%0x7a;
file.write(&ch,sizeof(char));
}
else
{
for(int i=1;i<=(SumOfCode/0x7a-1);i++)
{
ch='z';
file.write(&ch,sizeof(char));
}
ch='A';
file.write(&ch,sizeof(char));
ch=SumOfCode%0x7a+0x7a-'A';
file.write(&ch,sizeof(char));
}
file.close();
}
cout<<"\nPlease open code.txt to get your register code.\n"
<<"Press any key to exit."<<endl;
cin.get();
cin.get();
}
int sum(char *s)
{
int sum(0);
for(int i=0;s[i]!='\0';i++)
sum+=s[i];
return sum;
}
/*---------end----------*/
能力值:
( LV2,RANK:10 )
3 楼
为什么dede还是可以用呢?
能力值:
( LV12,RANK:980 )
4 楼
不用DEDE能找到关键处吗?
能力值:
( LV2,RANK:10 )
5 楼
dede可以用原来是我发错了文件啦..修改了一下代码..试多一次啊
能力值:
( LV12,RANK:370 )
在线值:
6 楼
最初由 csjwaman 发布 不用DEDE能找到关键处吗?
dede只是方便对delphi程序结构和对应事件的分析、定位,能不能用对能否破解的影响最多是花时间的多少吧
能力值:
( LV12,RANK:980 )
7 楼
最初由 ikki 发布 dede只是方便对delphi程序结构和对应事件的分析、定位,能不能用对能否破解的影响最多是花时间的多少吧
我的DEDE好象不能用,提示文件被加壳。
能力值:
( LV12,RANK:370 )
在线值:
8 楼
可能是dede版本不同的原因吧,我的dede是在看雪这的工具下载里下的。
能力值:
( LV4,RANK:50 )
在线值:
9 楼
To IKKI
用一定的方法直接用UEDIT修改EXE文件后,DEDE无法打开。
能力值:
( LV12,RANK:370 )
在线值:
10 楼
delphi我没学过,对于这样来anti dede的方法更是毫无了解。 蓝色光芒如果愿意,可以说说,让大家都学点东西。:
能力值:
( LV12,RANK:2670 )
11 楼
最初由 ikki 发布 delphi我没学过,对于这样来anti dede的方法更是毫无了解。 蓝色光芒如果愿意,可以说说,让大家都学点东西。:
ikki兄真是"
killer for bos crackme! "