设为主页 | 加入收藏 | 繁體中文

破解*.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:
评论加载中...
内容:
评论者: 验证码: