您的位置:首页 > 数据库

C#破解access数据库密码方法

2017-05-23 10:08 477 查看
using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace Demo

{

    class Program

    {

        [STAThread]

        static void Main(string[] args)

        {

            OpenFileDialog f = new OpenFileDialog();

            if (f.ShowDialog() != DialogResult.OK) return;

            MessageBox.Show("密码:[" + GetPassword(f.FileName) + "]", "密码");

        }

 

        // 获取密码

        static string GetPassword(string file)

        {                       // 未加密的文件0x42开始至0x61之前的每间隔一字节的数值

            byte[] baseByte = { 0xbe, 0xec, 0x65, 0x9c, 0xfe, 0x28, 0x2b, 0x8a, 0x6c, 0x7b, 0xcd, 0xdf, 0x4f, 0x13, 0xf7, 0xb1, };

            byte flagByte = 0x0c; // 标志 0x62 处的数值

            string password = "";

            try

            {

                FileStream fs = File.OpenRead(file);

                fs.Seek(0x14, SeekOrigin.Begin);

                byte ver = (byte)fs.ReadByte();     // 取得版本, 1为Access2000, 0为Access97

                fs.Seek(0x42, SeekOrigin.Begin);

                byte[] bs = new byte[33];

                if (fs.Read(bs, 0, 33) != 33) return "";

                byte flag = (byte)(bs[32] ^ flagByte);

                for (int i = 0; i < 16; i++)

                {

                    byte b = (byte)(baseByte[i] ^ (bs[i * 2]));

                    if (i % 2 == 0 && ver == 1) b ^= flag;  //Access 2000

                    if (b > 0)

                    {

                        var ch = (char) b;

                        password +=ch;

                    }

                }

            }

            catch { }

            return password;

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Access