ACCESS 加密方法
来源:互联网 发布:养小香猪的血泪史 知乎 编辑:程序博客网 时间:2024/05/22 01:45
1、修改MDB文件头
2、破解数据库密码读取
只在 ACCESS2003 上测试成功;
由于 mdb 打开后会产生一个 .ldb 的临时文件,如果你的系统安装了office 将会有提示access 的字样
修改一下注册表对 .ldb 的识别。
如果使用 ADOConnction 来连接数据库的话,
把ADOConnection.Mode设为cmShareExclusive就可以以独占方式打开数据库。
PS:ACCESS几乎无安全性可言。
=======================================================
另附 ACCESS 加密原理(转自网络):
用UltraEdi(二进制编译器)打开Access 2000 所建的数据库,在库文件的地址00000042处开始的40个字节是Access2000库的密码位。如果一个未加密的库,这40个字节原始数据依次为:29 77 EC 37 F2 C8 9C FA 69 D2 28 E6BC 3A 8A 60 FB 18 7B 36 5A FE DF B1 D8 78 13 43 60 23 B1 33 9B ED 79 5B3D 39 7C 2A 。当你给数据库设置了密码后,这40个字节就变成了密钥。因此,要破解密码而不需保持原库的密码,只要将00000042处开始的40个字节还原成原始数据就行了。要做到这一点,你可用磁盘编辑工具或将以下所附的程序稍加修改,把以上所列40个数据填到00000042开始处。
但是,有没有办法既能破解密码又能保持原密码呢?有。要做到这一点,必须搞清楚Access 2000库的加密原理。事实上,Access 2000库的加密原理很简单。当你设置了密码后,Access 2000就将你的密码(请注意你所输入的密码是ASCII字符)的ASCII码与以上的40个字节数据进行异或操作,因此,从库文件的地址00000042开始的40个字节就变成了密钥了。例如,如果你设置的密码为12345678901234567890(注意:最多只能设20个ASCII字符),经过异或操作后,则从00000042处开始的40个字节的数据就变成了 18 77 DE 37 C1 C8 A8 FA 5C D2 1E E6 8B 3AB2 60 C2 18 4B 36 6B FE ED B1 EB 78 27 43 55 23 87 33 AC ED 41 5B 04 394C 2A 。大家都知道,一个数据经过一次异或操作后,再一次经过同样的异或操作就可还原了。因此,对已经设置了密码的Access2000库,只要将40个密钥数据与原始的40个数据进行一次异或操作就可得到密码了。
顺便提一下,由于ACCESS 2000对每个密码字符采用双字节表示,故40个字节原始数据可依次分为20组,每组代表一个密码字符,进行异或操作的是每组的第一个字节,第二个字节不变。
2、破解数据库密码读取
- unit main;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
- const
- FileHead1:array[0..15] of byte=($00,$01,$00,$00,$53,$74,$61,$6E,$64,$61,$72,$64,$20,$4A,$65,$74) ;//对应MDB文件的前16个字节
- FileHead2:array[0..15] of byte=($43,$6f,$70,$79,$72,$69,$67,$68,$74,$20,$4a,$6f,$65,$4c,$6f,$20) ;
- //从64开始,长度也是64
- Pwd1 :array[0..63] of Byte=($79,$5b,$df,$2e,$7c,$2a,$22,$d4,$7c,$99,$05,$13,
- $98,$fd,$a5,$da,$d3,$88,$c0,$57,$83,$66,$5f,$95,$f8,$d0,$89,$24,
- $85,$67,$c6,$1f,$27,$44,$d2,$ee,$cf,$65,$ed,$ff,$07,$c7,$46,$a1,
- $78,$16,$0c,$ed,$e9,$2d,$62,$d4,$54,$06,$00,$00,$34,$2e,$30,$00,
- $00,$00,$00,$00);
- //随机
- Pwd2 :array[0..63] of Byte=($b9,$6b,$d0,$ee,$bc,$ea,$ee,$d0,$bc,$99,$06,$fd,
- $98,$0d,$a6,$da,$dd,$88,$c0,$6b,$8d,$66,$60,$96,$08,$d0,$89,$e0,
- $86,$6b,$c6,$f0,$eb,$00,$de,$ee,$c0,$66,$ed,$00,$0b,$cb,$06,$af,
- $b8,$f6,$0c,$ed,$e9,$ed,$6e,$d0,$60,$06,$00,$00,$d0,$ee,$d0,$00,
- $00,$00,$00,$00);
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- OpenDialog1: TOpenDialog;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- //加解密函数。
- procedure EncryptDecryptMDB(filename:string; Enc:Boolean);
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- { TForm1 }
- procedure TForm1.EncryptDecryptMDB(filename: string; Enc:Boolean);
- var
- f:TFileStream;
- begin
- if not FileExists(filename ) then Exit;
- F:=TFileStream.Create(filename,fmOpenWrite);
- try
- f.Seek($00,soFromBeginning);
- if Enc then
- f.Write(FileHead2,16)
- else
- f.Write(FileHead1,16);
- f.Seek($64,soFromBeginning);
- if Enc then
- f.Write(pwd2,64)
- else
- f.Write(pwd1,64);
- finally
- f.Free;
- end;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- var
- fn :string;
- begin
- if OpenDialog1.Execute then
- fn :=OpenDialog1.FileName;
- EncryptDecryptMDB(fn,True);
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- var
- fn :string;
- begin
- if OpenDialog1.Execute then
- fn :=OpenDialog1.FileName;
- EncryptDecryptMDB(fn,False);
- end;
- end.
只在 ACCESS2003 上测试成功;
由于 mdb 打开后会产生一个 .ldb 的临时文件,如果你的系统安装了office 将会有提示access 的字样
修改一下注册表对 .ldb 的识别。
- with TRegistry.Create do begin
- try
- RootKey:=HKEY_CLASSES_ROOT;
- OpenKey('.ldb');
- WriteString('','tempfile');
- closekey;
- finally
- free;
- end;
- end;
如果使用 ADOConnction 来连接数据库的话,
把ADOConnection.Mode设为cmShareExclusive就可以以独占方式打开数据库。
PS:ACCESS几乎无安全性可言。
=======================================================
另附 ACCESS 加密原理(转自网络):
用UltraEdi(二进制编译器)打开Access 2000 所建的数据库,在库文件的地址00000042处开始的40个字节是Access2000库的密码位。如果一个未加密的库,这40个字节原始数据依次为:29 77 EC 37 F2 C8 9C FA 69 D2 28 E6BC 3A 8A 60 FB 18 7B 36 5A FE DF B1 D8 78 13 43 60 23 B1 33 9B ED 79 5B3D 39 7C 2A 。当你给数据库设置了密码后,这40个字节就变成了密钥。因此,要破解密码而不需保持原库的密码,只要将00000042处开始的40个字节还原成原始数据就行了。要做到这一点,你可用磁盘编辑工具或将以下所附的程序稍加修改,把以上所列40个数据填到00000042开始处。
但是,有没有办法既能破解密码又能保持原密码呢?有。要做到这一点,必须搞清楚Access 2000库的加密原理。事实上,Access 2000库的加密原理很简单。当你设置了密码后,Access 2000就将你的密码(请注意你所输入的密码是ASCII字符)的ASCII码与以上的40个字节数据进行异或操作,因此,从库文件的地址00000042开始的40个字节就变成了密钥了。例如,如果你设置的密码为12345678901234567890(注意:最多只能设20个ASCII字符),经过异或操作后,则从00000042处开始的40个字节的数据就变成了 18 77 DE 37 C1 C8 A8 FA 5C D2 1E E6 8B 3AB2 60 C2 18 4B 36 6B FE ED B1 EB 78 27 43 55 23 87 33 AC ED 41 5B 04 394C 2A 。大家都知道,一个数据经过一次异或操作后,再一次经过同样的异或操作就可还原了。因此,对已经设置了密码的Access2000库,只要将40个密钥数据与原始的40个数据进行一次异或操作就可得到密码了。
顺便提一下,由于ACCESS 2000对每个密码字符采用双字节表示,故40个字节原始数据可依次分为20组,每组代表一个密码字符,进行异或操作的是每组的第一个字节,第二个字节不变。
- ACCESS 加密方法
- ACCESS加密方法
- 安全的ACCESS加密方法
- 安全的ACCESS加密方法
- VC + ADO + Access数据文件简单加密方法
- 连接加密Access数据库的字符串设置方法
- 连接加密Access数据库的字符串设置方法
- Access数据库加密后在项目中的连接方法
- 连接加密Access数据库的字符串设置方法
- 连接加密Access数据库的字符串设置方法
- 加密Access数据库
- access数据库加密
- ADOX加密access数据库
- Access数据库连接(加密/不加密)
- 加密你的Access数据库
- Delphi对Access文件加密
- Delphi对Access文件加密
- Access 2007 数据库加密解密
- Flex2与Struts整合配置 -续搭建免费的flex开发环境flashdevelop
- DB小问题汇总
- 支票作废证明
- dialog中使用toolbar
- 第四章 格式化文字
- ACCESS 加密方法
- 用友问题集锦
- ipp2p中使用tc+iptables限速(脚本)
- Web 程序创建类
- 使用bool 类型变量赋值时的一个错误
- 纳税情况说明报告
- Hook简介
- 卷动列
- hibernate问题