2017-01-03 4 views
0

создание приложения C#, которое считывает файл базы данных доступа. Каждая база данных будет иметь на ней другой пароль. В настоящее время я использую Access Passview http://www.nirsoft.net/utils/accesspv.html (freeware), чтобы прочитать пароль, но я хочу, чтобы его можно было автоматизировать, поэтому я могу назначить его строке для строки подключения OLEDB. (снимок экрана еха при исполнении)Получить доступ к паролю базы данных .mdb с помощью C#

enter image description here

ех можно запустить из командной строки, что то, что я пытался реализовать в своем приложении

var proc = new Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = "accesspv.exe", 
      Arguments = _filePath, 
      UseShellExecute = false, 
      RedirectStandardOutput = true, 
      CreateNoWindow = true,  
     } 
    }; 

    proc.Start(); 
    while (!proc.StandardOutput.EndOfStream) 
    { 
     string line = proc.StandardOutput.ReadToEnd(); 
     Console.WriteLine(line); 
     _password2016 = line; 
    } 

Это не работайте для меня, поскольку доступ passview exe работает как обычно, и пароль не отображается в консоли.

Мой главный вопрос: 1. Можно ли прочитать пароль, как назначить его переменной для моей строки соединения? 2. Имейте это в виду, что accesspv.exe работает в фоновом режиме, поэтому конечный пользователь не видит его?

спасибо.

+0

Если его открытый исходный код, вы могли бы сделать консольную версию .... в противном случае вам нужно screenscrape пароля из там, как ни один не Wouldnt подобрать слова, как его не на стандартный вывод .. – BugFinder

+0

извините , моя ошибка, его просто бесплатное ПО, а не с открытым исходным кодом – CM99

ответ

2

Исходный код этого утилиты можно найти на веб-сайте here. Вы можете просто написать тот же код в C#.

public class Program 
{ 
    private static readonly byte[] XorBytes = { 
     0x86, 0xFB, 0xEC, 0x37, 0x5D, 0x44, 0x9C, 0xFA, 0xC6, 
     0x5E, 0x28, 0xE6, 0x13, 0xB6, 0x8A, 0x60, 0x54, 0x94 
    }; 

    public static void Main(string[] args) 
    { 
     var filePath = args[0]; 
     var fileBytes = new byte[256]; 

     using (var fileReader = File.OpenRead(filePath)) 
     { 
      fileReader.Read(fileBytes, 0, fileBytes.Length); 
     } 

     var passwordBytes = XorBytes 
      .Select((x, i) => (byte) (fileBytes[i + 0x42]^x)) 
      .TakeWhile(x => x != 0); 
     var password = Encoding.ASCII.GetString(passwordBytes.ToArray()); 

     Console.WriteLine($"Password is \"{password}\""); 
     Console.ReadKey(); 
    } 
} 
+0

Примечание для будущих читателей: Как указано в исходном исходном коде VB6: «Он работает только с Access 95 или 97 [файлы базы данных]». –

+0

Спасибо Мэтту, это огромная помощь! – CM99

Смежные вопросы