Windows Vista i wykonywanie poleceń przy starcie systemu


(Alan Elektro) #1

Witam!

Czy zna ktoś z Was może sposób na wykonywanie poleceń MS DOS, przy starcie Windows Vista, ale jeszcze przed załadowaniem wszystkich plików, chodzi mi o to aby móc np. podmienić plik shell32.dll, w grę nie wchodzi konsola systemowa, gdyż chcę zaprogramować program, który musi niestety podmienić kilka plików w Windowsie. Autoexec.bat chyba na niewiele się zda.., w Viście

.., a może jest jakieś polecenie, dzięki któremu można podmienić używane pliki..,?

Za ewentualne odpowiedzi serdecznie dziękuję!


(Szyszek) #2

Jeśli chcesz tylko podmienić parę plików to spróbuj na Knoppixie. Wystarczy go ściągnąć (pod Winem) i wypalić na płytkę. Bootuje się z CD. Powineneś móc podmieniać pliki Winowsowskie na tym systemie :wink:.


(Witam200) #3

Tak. http://www.winbeta-forum.yoyo.pl/viewtopic.php?t=428 i http://www.winbeta-forum.yoyo.pl/viewtopic.php?t=161


(sCooBy^) #4

[gdyż chcę zaprogramować program,] - ehehehehee :lol: :lol: :lol:

Nie ma żadnej możliwości wykonywania poleceń (jak to nazywasz) dosa przy starcie Visty - nie ma dosa w tym systemie !!

Z "zaprogramowaniem programu" do podmiany plików systemowych będzie trudniej:

Zastosowanie:

TakeOwnership("nazwa_pliku.xxx")

po czym możesz za pomocą wywołań: RenameFile("plik.org","plikkopia.org"); // zminiasz nazwe oryginalnego i CopyFileA("source","destin..."); // kopiujesz docelowo Tu masz kod w C++ 3 funckji. 2 pierwsze potrzebne są trzeciej która służy do przejęcia pliku na własność z poziomu kodu:

#include 

#include 


BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)

{

  TOKEN_PRIVILEGES tp;


  LUID luid;


  if(!LookupPrivilegeValue(NULL,lpszPrivilege, luid))

  {

    return FALSE;

  }

  else

  {

     //error

  }


  tp.PrivilegeCount = 1;

  tp.Privileges[0].Luid = luid;


  if(bEnablePrivilege)

  {

    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

  }

  else

  {

    tp.Privileges[0].Attributes = 0;

  }


  if(!AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL))

  {

    return FALSE;

  }

  else

  {

   //error

  }

  return TRUE;

}


BOOL CreateMyACL(SECURITY_ATTRIBUTES * pSA)


{

    TCHAR * szSD = TEXT("D:") // DACL

    TEXT("(D;OICI;GRLOFR;;;AN)")          

    TEXT("(A;;RPWPCCDCLCRCWOWDSDSW;;;SY)") 

    TEXT("(A;OICI;GACCFA;;;LA)")          

    TEXT("(A;OICI;GACCFA;;;S-1-5-11)")     

    TEXT("S:") // SACL

    TEXT("(OU;SAFA;RPWPCCDCLCRCWOWDSDSW;;;S-1-5-18)") 

    TEXT("(OU;SAFA;GACCFA;;;AU)")  

    TEXT("(OU;SAFA;GAWPFW;;;LA)");


    if(pSA == NULL) return FALSE;


   return ConvertStringSecurityDescriptorToSecurityDescriptor(

      szSD,                       

      SDDL_REVISION_1,        

      (pSA-lpSecurityDescriptor), 

      NULL);               

}


BOOL TakeOwnership(LPTSTR lpszOwnFile)

{


    BOOL bRetval = FALSE;


    HANDLE hToken = NULL;

    PSID pSIDAdmin = NULL;

    PSID pSIDEveryone = NULL;

    PACL pACL = NULL;

    SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;

    SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;

	const int NUM_ACES = 2;

    EXPLICIT_ACCESS ea[NUM_ACES];

    DWORD dwRes;


    if (!AllocateAndInitializeSid(SIDAuthWorld, 1,

                     SECURITY_WORLD_RID,

                     0,

                     0, 0, 0, 0, 0, 0,

                     pSIDEveryone)) 

    {

		printf("AllocateAndInitializeSid (Everyone) error %u\n", GetLastError());

        goto Cleanup;

    }


    if (!AllocateAndInitializeSid(SIDAuthNT, 2,

                     SECURITY_BUILTIN_DOMAIN_RID,

                     DOMAIN_ALIAS_RID_ADMINS,

                     0, 0, 0, 0, 0, 0,

                     pSIDAdmin)) 

    {

        printf("AllocateAndInitializeSid (Admin) error %u\n", GetLastError());

        goto Cleanup;

    }


    ZeroMemory(ea, NUM_ACES * sizeof(EXPLICIT_ACCESS));


    ea[0].grfAccessPermissions = GENERIC_READ;

    ea[0].grfAccessMode = SET_ACCESS;

    ea[0].grfInheritance = NO_INHERITANCE;

    ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;

    ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;

    ea[0].Trustee.ptstrName = (LPTSTR) pSIDEveryone;


    ea[1].grfAccessPermissions = GENERIC_ALL;

    ea[1].grfAccessMode = SET_ACCESS;

    ea[1].grfInheritance = NO_INHERITANCE;

    ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID;

    ea[1].Trustee.TrusteeType = TRUSTEE_IS_GROUP;

    ea[1].Trustee.ptstrName = (LPTSTR) pSIDAdmin;


    if (ERROR_SUCCESS != SetEntriesInAcl(NUM_ACES,

                                         ea,

                                         NULL,

                                         pACL))

    {

        printf("Failed SetEntriesInAcl\n");

        goto Cleanup;

    }


    dwRes = SetNamedSecurityInfo(

        lpszOwnFile,               

        SE_FILE_OBJECT,            

        DACL_SECURITY_INFORMATION,  

        NULL, NULL,               

        pACL,                      

        NULL);                     


    if (ERROR_SUCCESS == dwRes) 

    {

        printf("Successfully changed DACL\n");

        bRetval = TRUE;

        // No more processing needed.

		goto Cleanup;

    }

    if (dwRes != ERROR_ACCESS_DENIED)

    {

        printf("First SetNamedSecurityInfo call failed: %u\n", dwRes); 

        goto Cleanup;

    }



    if (!OpenProcessToken(GetCurrentProcess(), 

                          TOKEN_ADJUST_PRIVILEGES, 

                          hToken)) 

       {

          printf("OpenProcessToken failed: %u\n", GetLastError()); 

          goto Cleanup; 

       } 


    if (!SetPrivilege(hToken, SE_TAKE_OWNERSHIP_NAME, TRUE))

    {

        printf("You must be logged on as Administrator.\n");

        goto Cleanup; 

    }


   dwRes = SetNamedSecurityInfo(

        lpszOwnFile,               

        SE_FILE_OBJECT,         

        OWNER_SECURITY_INFORMATION, 

        pSIDAdmin,                 

        NULL,

        NULL,

        NULL); 


    if (dwRes != ERROR_SUCCESS) 

    {

        printf("Could not set owner. Error: %u\n", dwRes); 

        goto Cleanup;

	}


     if (!SetPrivilege(hToken, SE_TAKE_OWNERSHIP_NAME, FALSE)) 

    {

        printf("Failed SetPrivilege call unexpectedly.\n");

        goto Cleanup;

    }


    dwRes = SetNamedSecurityInfo(

        lpszOwnFile,                

        SE_FILE_OBJECT,      

        DACL_SECURITY_INFORMATION,   

        NULL, NULL,                

        pACL,                   

        NULL);                    


    if (dwRes == ERROR_SUCCESS)

    {

        printf("Successfully changed DACL\n");

        bRetval = TRUE; 

    }

    else

    {

        printf("Second SetNamedSecurityInfo call failed: %u\n", dwRes); 

    }


Cleanup:


    if (pSIDAdmin)

        FreeSid(pSIDAdmin); 


    if (pSIDEveryone)

        FreeSid(pSIDEveryone); 


    if (pACL)

       LocalFree(pACL);


    if (hToken)

       CloseHandle(hToken);


    return bRetval;


}

(Alan Elektro) #5

pewnie że nie ma ale mi chodziło tylko o emulacje polecenia.. :slight_smile:

sCooBy^ - dzięki za przykładowe źródełko