2010-01-29 10 views
6

Mi stavo chiedendo se è possibile sostituire Loader (programma di caricamento eseguibile non il boot loader) di un sistema operativo (Windows è la mia scelta). Sono disponibili caricatori di terze parti in grado di patchare quello predefinito.È possibile sostituire Loader di un SO? Un modo per ottenere il controllo su Loader?

Esiste un modo per ottenere il controllo sul caricatore del sistema operativo? Voglio dire, voglio che le cose che sta facendo siano visibili a me (ogni singolo passo).

Se mi chiedete perché voglio fare questo, For learning purposes.

+1

Caricatore di avvio o caricatore eseguibile? –

+0

'loader eseguibile' – claws

risposta

2

Poiché ognuna delle risposte & commenti sta dando informazioni utili. Ho appena compilato, tutte le risposte & commenti in un unico post.

Mi stavo chiedendo se è possibile sostituire Loader (programma eseguibile loader non il boot loader) di un sistema operativo (Windows è la mia scelta).

No, in finestre di creazione di processo e il caricatore in modalità utente in ntdll sono legati insieme (PsCreateProcess mapperà direttamente ntdll e saltare ad esso in modo che possa finire risolvere i moduli e la creazione di processo), non è possibile sostituiscilo.

ma ci sono risorse disponibili che descrivono il formato e il caricamento dei processi.

Qui è piuttosto un vecchio ma ancora uptodate articolo di MSDN per quanto riguarda i file PE (EXE + dll)

  1. Part I. An In-Depth Look into the Win32 Portable Executable File Format di Matt Pietrek (MSDN Magazine, febbraio 2002)
  2. Part II. An In-Depth Look into the Win32 Portable Executable File Format da Matt Pietrek (MSDN Magazine , marzo 2002)

È possibile utilizzare questo ho informazioni per scrivere un'app che avvia un determinato eseguibile.

Se sei più interessato a linux e al formato elfo troverai tutto ciò che ti serve su google.

Esiste un modo per consentire a di ottenere il controllo sul caricatore del sistema operativo? Voglio dire, voglio che le cose che sta facendo a siano visibili a me (ogni passo).

Su di Windows, è possibile ottenere una certa visibilità nel caricatore al lavoro attivando Loader Snaps. Lo fai con (parte di Strumenti di debug per Windows). C'è un bel riferimento http://www.osronline.com/DDKx/ddtools/gflags_4n77.htm. Con Show Loader Snaps abilitato, è possibile visualizzare i messaggi di traccia del caricatore avviando l'applicazione in un debugger (WinDBG).

Se vuoi giocare con questo genere di cose allora Linux è la migliore strada da percorrere.

Il caricatore fa parte del kernal, ma poiché si ha accesso a tutta la sorgente kernal, si può giocare con esso al contenuto del proprio cuore.

I caricatori per vari formati binari sono in fs/binfmt_*.c nella sorgente Linux (fs/binfmt_elf.c è il caricatore utilizzato per gli eseguibili in formato ELF, ovvero la maggior parte).

Il caricatore dinamico /lib{,64}/ld-linux.so.2 viene utilizzato anche per i binari collegati dinamicamente - è un esempio di un "interprete", come riferimento il codice binfmt_elf.c.

Linux ha formati di file eseguibili inseribili, quindi è possibile aggiungere un caricatore di programma aggiuntivo che eseguirà le proprie cose personalizzate con file eseguibili, piuttosto che quelli standard (ELF, script di shell, binfmt_misc).

Il modulo binfmt_misc consente di scrivere caricatori personalizzati per i programmi eseguibili interamente nello spazio utente; questo è comunemente usato per eseguire binari non nativi o binari interpretati come Java, eseguibili CLR ecc.

D'altro canto, se si desidera sostituire il caricatore ELF con qualcos'altro, è possibile creare un modulo binfmt direttamente nel kernel . Guarda fs/binfmt_* per esempi. Il caricatore ELF stesso è lì dentro.

5

No, la creazione di processo e il caricatore in modalità utente in ntdll sono legate tra loro (PsCreateProcess mapperà direttamente ntdll e saltare ad esso in modo che possa terminare la risoluzione dei moduli e impostare il processo), non è possibile sostituirlo.

+0

Non sarà bello, ma non sarebbe almeno possibile, attraverso qualcosa come [Hooking API] (http://www.codeproject.com/Articles/2082/API-hooking-revealed) o simili tecniche di intercettazione di basso livello? – rubenvb

3

Se vuoi giocare con questo genere di cose, allora Linux è la strada da percorrere.

Il caricatore fa parte del kernel, ma poiché si ha accesso a tutta la sorgente del kernel, si può giocare con esso al contenuto del proprio cuore.

+1

In realtà, il loader in Linux è /lib{.64}/ld-linux.so.2. –

+3

I caricatori per vari formati binari sono in 'fs/binfmt _ *. C' nel sorgente Linux (' fs/binfmt_elf.c' è il caricatore utilizzato per gli eseguibili in formato ELF, ovvero la maggior parte). Il caricatore dinamico 'ld-linux.so.2' che Ignacio indica viene anche usato per i binari collegati dinamicamente - è un esempio di un" interprete "a cui fa riferimento il codice in' binfmt_elf.c'. – caf

1

No, non è possibile sostituire il caricatore del sistema operativo, ma sono disponibili risorse che descrivono il formato e il caricamento dei processi.

Qui è piuttosto un vecchio ma ancora uptodate articolo di MSDN per quanto riguarda i file PE (EXE + dll) http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

È possibile utilizzare queste informazioni per scrivere un app che inizia un dato eseguibile.

Se sei più interessato a linux e al formato elfo troverai tutto ciò che ti serve su google.

2

Linux ha formati di file eseguibili inseribili, quindi è possibile aggiungere un caricatore di programma aggiuntivo che eseguirà le proprie applicazioni personalizzate con file eseguibili, anziché con quelli standard (ELF, script di shell, binfmt_misc).

Il modulo binfmt_misc consente di scrivere caricatori personalizzati per i programmi eseguibili interamente nello spazio utente; questo è comunemente usato per eseguire i binari non nativi o binari interpretati come Java, CLR eseguibili ecc

D'altra parte, se si voleva sostituire il caricatore ELF con qualcos'altro si può fare un modulo binfmt direttamente in il kernel. Guarda fs/binfmt_ * per gli esempi. Il caricatore ELF stesso è lì dentro.

1

Esiste un modo per ottenere il controllo sul caricatore del sistema operativo?Voglio dire, voglio che le cose che sta facendo siano visibili a me (ogni singolo passo).

Su Windows, è possibile ottenere una certa visibilità del caricatore al lavoro abilitando i Caricatori a scatto. Lo fai con gflags.exe (parte di Debugging Tools per Windows). C'è un bel riferimento a gflags.exe here. Con Show Loader Snaps abilitato, è possibile visualizzare i messaggi di traccia del caricatore avviando l'applicazione in un debugger (WinDBG).