破解*.mdb目前所有版本的密码
//这里界说的是13个字节作为Access2000异或的源码。与之绝对应的加密标志是0x13,ccrun特此注明
//当然你可以用这一组:BE EC 65 9C FE 28 2B 8A 6C 7B CD DF 4F 与这一组绝对应的加密标志是0x0c
//呵呵.程序有些乱,盼望各人能看的懂。
char PassSource2k[13]={0xa1,0xec,0x7a,0x9c,0xe1,0x28,0x34,0x8a,0x73,0x7b,0xd2,0xdf,0x50};
//Access97的异或源码
char PassSource97[13]={0x86,0xfb,0xec,0x37,0x5d,0x44,0x9c,0xfa,0xc6,0x5e,0x28,0xe6,0x13};
void __fastcall TMainForm::GetMdbPass()
{
char PassStrTemp[26],Ver,EncrypFlag,t1;
int FileHandle;
String MdbPassword,MdbVersion,MdbFileName;
FileHandle=FileOpen(MdbFileName,fmOpenRead);
if(FileHandle<0)
{
ShowMessage("文件打开错误!");
return;
}
//取得数据库版本
FileSeek(FileHandle,0x14,0);
FileRead(FileHandle,&Ver,1);
//取得加密标志
FileSeek(FileHandle,0x62,0);
FileRead(FileHandle,&EncrypFlag,1);
//读取加密后的密码到缓冲区
FileSeek(FileHandle,0x42,0);
FileRead(FileHandle,&PassStrTemp,26);
FileClose(FileHandle);
if(Ver<1)
{
MdbVersion="Access 97";
if(int(PassStrTemp[0]^PassSource97[0])==0)
MdbPassword="密码为空!";
else
{
MdbPassword="";
for(int i=0;i<13;i++)
MdbPassword=MdbPassword+char(PassStrTemp[i]^PassSource97[i]);
}
}
else
{
MdbVersion="Access 2000 or 2002";
MdbPassword="";
for(int i=0;i<13;i++)
{
if(i%2==0)
t1=char(0x13^EncrypFlag^PassStrTemp[i*2]^PassSource2k[i]);
//每隔一个字节就与加密标志相异或。这里的加密标志为0x13
else
t1=char(PassStrTemp[i*2]^PassSource2k[i]);
MdbPassword=MdbPassword+t1;
}
}
if(MdbPassword[1]<0x20||MdbPassword[1]>0x7e)
MdbPassword="密码为空!";
EditMdbFileName->Text=MdbFileName;
EditMdbPassword->Text=MdbPassword;
EditMdbVersion->Text=MdbVersion;
}
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|
上一篇: 破解Email密码的三种方法
下一篇: 解除网吧封锁限制 尽享畅游下载