Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[C++] Problem z odczytem plikow rejestru Windows XP

Pascalt 02 Apr 2008 01:35 1587 2
  • #1
    Pascalt
    Level 22  
    Witam,
    jak wiadomo rejestr systemu Windows XP sklada sie z kilku plikow, ktore w momencie uruchamiania/logowania uzytkownika lacza sie w jedna calosc i tworza rejestr. Lokalizacje poszczegolnych plikow mozna znalezc w kluczu HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\HiveList. HiveList zawiera wpisy lokalizację katalogu rejestru (nazwa wpisu) oraz fizyczną lokalizację katalogu (jako wartość wpisu).

    Jednak przy probie odczytania tego pliku (oczywiscie mowa o programie uruchamianym z konta administratora), pojawia sie problem... Funkcja good() zwraca false. Zgodnie z dokumentacja - zwraca ona taka wartosc w przypadku, kiedy plik nie istnieje na dysku lub gdy brak jest uprawnien do otwarcia tego pliku...
    Ponizej przedstawiam fragment kod, ktory uzylem:

    Code:

    fstream plik("\Device\HarddiskVolume1\Documents and Settings\LocalService\NTUSER.DAT",std::ios::in|std::ios::binary);
       fstream plik1("c:/rejestr1.dat",std::ios::out|std::ios::binary);
       if (plik.good()==0)
       {
          printf("ZONK");
          getch();
       }
       plik.seekg (0, ios::end);
       int length = plik.tellg();
       plik.seekg (0, ios::beg);

       char *buffer = new char [length];
       plik.read (buffer,length);

       cout.write (buffer,length);
       plik1.write(buffer,length);



       plik.close();
       plik1.close();

       plik.write (buffer,length);

       delete[] buffer;


    Kod oczywiscie jak na razie tylko prowizoryczny - praktycznie bez zadnych zabezpieczen.
    Moje pytanie jest takie - w jaki sposob skopiowac (chodzi glownie o odczyt, bo jesli bedzie w buforze, to po problemie) taki plik. Czy obedzie sie bez wstawki asemlerowej? Bo z asemblerem stoje jak na razie srednio. A moze ktos wrzuci kod w asemblerze, ktory zrobilby te robote. Moze jakies inne pomysly...

    Bede wdzieczny za kazda podpowiedz.
    Pozdrawiam.

    Moderated By Marek_Skalski:

    Temat zamykam.

  • Helpful post
    #2
    elektryk
    Level 42  
    Wg mnie kod jest dobrze napisany (nie testowałem programu, oceniam wzrokowo) ale nie zadziała. Wynika to z tego że ten plik jest cały czas otwarty do odczytu/zapisu przez system operacyjny w trybie wyłączności, czyli żaden inny program nie może go odczytać. Niby tak, ale jest sposób jak to obejść, to z Readme do programu pwdump7:
    Why another pwdump software?
    -------------------------------------------
    Every pwdump / samdump applications have their own way to work,
    for example creating services, inyecting code to lsass process however there
    are always ways to stop that software for working like for example just disabling
    administrative shares most pwdump applications will stop working.

    However, pwdump7 works in a different way. This software works with their own
    filesytem driver ( from rkdetector.com technology) so users with administrative
    privileges are able to dump directly from disk both SYSTEM and SAM registry hives.

    PS napisz co w ogóle chcesz osiągnąć grzebiąc w tych plikach.
  • Helpful post
    #3
    jakubw
    Level 18  
    ten temat juz sie przewinął
    chociaż nie apropos C++

    pliki te niestety ( lub stety ) są otwarte przez system
    i nawet admin nie może ich ręcznie skopiować
    czyli zrobić backupu bo system na to nie pozwala.

    Programami typu "Unlock" też sie nie da odblokować
    bo system zaczyna się zachowywac niestabilnie i wymaga po chwili restartu.

    Kopie itp numery można robić inaczej

    albo ręcznie eksport z regedita
    albo z lini poleceń ... bo są takie polecenia, które wyeksportują cotylko zechcesz: całość, gałąź, klucz ... tylko trzeba poszukać.

    pisałem gdzieś o tym
    szukaj

    pozdrawiam

    PS ... a C++ ... no cóż ... możesz do niego te polecenia wrzucić :D