Hot Unload del thread

di il
18 risposte

Hot Unload del thread

Salve,

Mi stavo cimentando in un esperimento. Attualmente quando avvio il "mio" exe su windows,come di norma, vengono caricati i file dll a lui annesso.

Ora mi chiedo: è possibile scollegare le librerie dinamiche mentre il programma è in esecuzione? Nell'esatto esempio, vediamo qui la mia applicazione



vi sono i tre file dll chiamati "LCgg.dll". Tramite questa console, è possibile fare tasto destro, unload, e automaticamente cancellarli. Io vorrei crare un processo console in c++ per eseguire l'unload dei Threads

18 Risposte

  • Re: Hot Unload del thread

    Non hai spiegato chiaramente ma ho capito solo che tu voglia bloccare il thread che protegge un game da piratare ...

    Argomenti vietati in questo (e in qualsiasi) forum.
  • Re: Hot Unload del thread

    oregon ha scritto:


    Non hai spiegato chiaramente ma ho capito solo che tu voglia bloccare il thread che protegge un game da piratare ...

    Argomenti vietati in questo (e in qualsiasi) forum.
    Anzi tutto grazie per la risposta. In secondo luogo il "game da piratare sarebbe il mio stesso".

    lcgameguard è una libreria dinamica creata con le source di codex, un anti hack opensource. Se volessi piratare l'avrei gia fatto, difatti la console che ho mostrato nell'immagine mi consente di fare "tasto destro" unload dll. è proprio quel processo di unload del dll che io invece volgio studiare, e per farlo ho utilizzato le source di un vecchio gioco compilate con questo antihack. Se vi fa stare "professionalmente più sicuri" posso creare un exe qualcunque e attaccarci un dll.

    Ora, chiarito questo, se c'è qualche informazione che posso aggiungere per rendere il tutto più comprensibile chiedi pure Oregon, sono qui per capire e imparare( è anche possibile disattivare il dll direttamente con ollydbg, cosa che ho gia testato. Non è nel mio interesse hackerare, voglio solo capire l'hot unload e come potrei applicarlo)
  • Re: Hot Unload del thread

    Onde evitare lo sharing Hack, posto questo video (privato) per farvi comprendere che e avessi realmente voluto fare hacking, l'avrei gia fatto. La mia è genuina curiosità verso il dll unload e il thread killing

    https://youtu.be/0Wk7WJcurD

    Nella prima parte, metto offline lcgameguard e riesco ad abilitare tutti i sistemi di hacking senza problemi
    Nella seconda parte, riavvio il lcient senza mettere off il sistema di controllo, ed ovviamente vengo disconesso
  • Re: Hot Unload del thread

    La tua curiosità è mirata a scrivere codice tutto tuo per fare quello che fa il tool.

    In ogni caso la API TerminateThread termina un thread.
  • Re: Hot Unload del thread

    oregon ha scritto:


    La tua curiosità è mirata a scrivere codice tutto tuo per fare quello che fa il tool.

    In ogni caso la API TerminateThread termina un thread.

    E perchè dovrei se esiste il tool non ha senso? Tra l'altro la source del tool è anche pubblica ore ... ti ringrazio per la dritta, cerco !
  • Re: Hot Unload del thread

    Allora, in base a quello che mi hai detto, ho cercato. In c++ la sintassi è la seguente:

    BOOL TerminateThread(
    HANDLE hThread,
    DWORD dwExitCode
    );

    Il problema è che sorgono molti dubbi:

    HANDLE hThread a quanto ho capito è il parametro che ha il nome del thread.
    DWORD dwExitCode invece è la variabile che fa uscire la funzione dopo la terminazione (if nonzero then success else problem detected)
    La funzione è BOOL proprio perchè il "return" dovrebbe essere il risultato 1/0 nel caso in cui la funzione sia riuscita o meno a chiudere il thread
    Non serve fare un "process_get" per capire a quale processo ci riferiamo ?
  • Re: Hot Unload del thread

    Non capisco la domanda.

    Il thread lo blocchi a partire dal suo id che è un numero. Che devi trovare con altri strumenti ... che devi studiare in base a quello che effettivamente devi fare e che dovresti dire chiaramente.
  • Re: Hot Unload del thread

    Voglio fare un hotunload del dll, esattamente come fa la cosole, però mi piacerebbe capire com'è sviluppato questo processo. Come si termina un thread, come si disconnette un dll
  • Re: Hot Unload del thread

    Non scarichi la DLL ma termini il thread il cui TID è indicato nella riga. Il thread, come ti ho detto, termina con quella API. Attento però che quella API è un po' "brutale" in quanto non notifica il termine alla DLL e non libera le risorse. Va usata con cautela.
  • Re: Hot Unload del thread

    oregon ha scritto:


    Non scarichi la DLL ma termini il thread il cui TID è indicato nella riga. Il thread, come ti ho detto, termina con quella API. Attento però che quella API è un po' "brutale" in quanto non notifica il termine alla DLL e non libera le risorse. Va usata con cautela.
    Ti ringrazio Oregon. Il mio vero obbiettivo è proprio imparare. Sono gia a conoscienza del fatto che il killing thread è pericoloso perchè non notifica e perchè rimangono le risorse allocate,ma questi sono test iniziali!

    Ho cercato l'API da te suggerita nel sito microsoft e l'avevo gia analizzata. Ho creato un piccolo programmino che dovrebbe analizzare tutti i processi di windows. I problemi che si presentano sono i seguenti:

    -il TID (per quanto ho capito) varia ad ogni lancio dell'applicazione, quindi sarebbe difficile poter terminare il programma in maniera automatica, se tutte le volte varia. Rischi di terminare un thread importante, o comunque, di non terminare tutti quelli necessari.

    -Il secondo problema è che nell'esempio corrente, sono riuscito a collegarmi al processo e a ottenerne il PID (così da analizzaare i TIDs che variano ogni volta. Nella mia testa, se mi collego al PID e lo analizo, DOVREI trovare tutti i TIDs a lui annesso), ma non riesco a capire come posso filtrare i threads in base al PID. Facendo una stampa di tutti i threads (come nel caso corrente), me ne ritrovo milioni




    Codice (C++/C)
    
    https://pastebin.com/DedcCVVN
    
    Quindi, ricapitolando, sono riuscito a ottenere il PID collegandomi alla finestra per nome ( c'erano modi più eleganti, ma diciamo che per ora va), sono riuscito a stampare anche tutti i threads nel mio pc ( a quanto ho capito), mi basterebbe ora filtrarli ora ... ma la vedo dura ... dici che sono sulla buona strada ?
  • Re: Hot Unload del thread

    In Windows NON ESISTE il concetto di "unload di una DLL" per il semplice fatto che la DLL NON VIENE CARICATA, come avviene in Linux, ad esempio.
    Viene utilizzata la tecnica del "memory mapped file", cioe' il file viene mappato in un'area di memoria e la parte di codice effetivamente in memoria e' responsabilita' del gestore della memoria virtuale associata al processo.

    In LInux, anche se una libreria dinamica e' utilizzata da un'applicazione in esecuzione (i file ".so"), puo' essere tranquillamente cancellata, perche' esiste una copia in memoria.

    In Windows, se un file e' in uso, NON PUO' ESSERE CANCELLATO! E questo e' vero NON SOLO per i file normali, ma anche e sopprattutto per le componendi di un processo.

    E' facile dimostrarlo, basta usare le API per caricare e scaricare a runtime una DLL. Le DLL caricate "staticamente" sono caricate al momento della partenza dell'applicazione e risulteranno "intoccabili" fino a che l'applicazione e' in esecuzione. Una DLL caricata "dinamicamente", e' cancellabile prima di essere usata dall'applicazione e DOPO essere rilasciata dall'applicazione stessa. NON durante il suo utilizzo.


    Nota:
    - si impara STUDIANDO e mettendo in pratica quello che si e' studiato
    - si STUDIA SUI LIBRI, NON sperando di trovare informazioni a spizzichi e bocconi su Internet
  • Re: Hot Unload del thread

    Zenek ... alcune cose che vorresti fare non è detto si possano fare o non si possono fare facilmente. Nessuna applicazione andrebbe a cercare tra TUTTI i thread per terminare un thread preciso, ecco perché trovi difficoltà.

    Non ha ALCUN senso esaminare tutti i thread che girano nel PC alla ricerca di uno specifico.
    Non dirmi che è solo a livello di studio perché non si studia l'aria fritta ma si studia per arrivare ad una applicazione concreta.

    Preferirei che tu mi dicessi esattamente cosa stai scrivendo prima di continuare la discussione. Se vuoi.


    @Migliorabile ... in Windows esiste la API FreeLibrary che decrementa il reference count di una DLL (su base processo) e se questo va a zero la scarica dall'address space del processo stesso.
  • Re: Hot Unload del thread

    migliorabile ha scritto:


    In Windows NON ESISTE il concetto di "unload di una DLL" per il semplice fatto che la DLL NON VIENE CARICATA, come avviene in Linux, ad esempio.
    Viene utilizzata la tecnica del "memory mapped file", cioe' il file viene mappato in un'area di memoria e la parte di codice effetivamente in memoria e' responsabilita' del gestore della memoria virtuale associata al processo.

    In LInux, anche se una libreria dinamica e' utilizzata da un'applicazione in esecuzione (i file ".so"), puo' essere tranquillamente cancellata, perche' esiste una copia in memoria.

    In Windows, se un file e' in uso, NON PUO' ESSERE CANCELLATO! E questo e' vero NON SOLO per i file normali, ma anche e sopprattutto per le componendi di un processo.

    E' facile dimostrarlo, basta usare le API per caricare e scaricare a runtime una DLL. Le DLL caricate "staticamente" sono caricate al momento della partenza dell'applicazione e risulteranno "intoccabili" fino a che l'applicazione e' in esecuzione. Una DLL caricata "dinamicamente", e' cancellabile prima di essere usata dall'applicazione e DOPO essere rilasciata dall'applicazione stessa. NON durante il suo utilizzo.


    Nota:
    - si impara STUDIANDO e mettendo in pratica quello che si e' studiato
    - si STUDIA SUI LIBRI, NON sperando di trovare informazioni a spizzichi e bocconi su Internet
    Anzi tutto ti ringrazio per la risposta molto esaustiva! La mia curiosità nasce proprio per lo studio, volevo capire come fosse possibile e a questo punto non capisco come riesce la console a killare la libreria. La "disatacca" dall'eseguibile madre chiudendola definitivamente. Forse una dll (in windows) viene mantenuta collegata ad un processo tramite uno specifico thread?
  • Re: Hot Unload del thread

    oregon ha scritto:


    Zenek ... alcune cose che vorresti fare non è detto si possano fare o non si possono fare facilmente. Nessuna applicazione andrebbe a cercare tra TUTTI i thread per terminare un thread preciso, ecco perché trovi difficoltà.

    Non ha ALCUN senso esaminare tutti i thread che girano nel PC alla ricerca di uno specifico.
    Non dirmi che è solo a livello di studio perché non si studia l'aria fritta ma si studia per arrivare ad una applicazione concreta.

    Preferirei che tu mi dicessi esattamente cosa stai scrivendo prima di continuare la discussione. Se vuoi.


    @Migliorabile ... in Windows esiste la API FreeLibrary che decrementa il reference count di una DLL (su base processo) e se questo va a zero la scarica dall'address space del processo stesso.
    Ho scritto molti script che non ho mai pubblicato. Questo perchè lo studio che puoi trarre da alcuni sistemi è essenziale. Non è necessario arrivare sempre a pubblicare un qualcosa, ma se il processo che stai eseguendo di porta a toccare con mano, a sperimentare e a capire, molto probabilmente vale di più di un "applicazione concreta".

    Ti vedo ancora dubbioso, e forse perchè pensi che tutt'ora cerco di bypassare un qualcosa. La realtà è che quella protezione è gia nel mio server, e ho gia dimostrato che se volevo fare danni lo facevo. Non è nel mio interesse distruggere, non è nel mio interesse pubblicare un applicazione. Grazie a Migliorabile ho gia capito (in maniera sommatoria ma concisa) come funzionano le librerie su windows e cosa hanno di diverso su linux. E se mai non arriverò alla fine del mio "progetto di studi" avrò imparato qualcosa da questa esperienza. Utilizzando uno strumento scritto da terzi sono riuscito a mettere offline la protezione. Ma come funziona questo processo? Perchè c'è riuscito? cos'è un thread? Cos'è un hot unload del dll? cos'è una dll?

    Tutte domande a cui puoi rispondere mettendoti sotto, provando e studiando, ed il mio programmino per i threads, è tanto inutile quando produttivo perchè so cosa ho scritto e so cosa non posso fare. Anche questa è una vittoria per me.

    Al termine del discorso filosofico, la console che ho mostrato, consente di andare nella sezione "threads" di un processo, e di mostrare tutti i vari processi annessi all'eseguibile. Successivamente facendo tasto destro ne puoi terminarne quanti ne vuoi. Se non è un hot unload del dll ( per la spiegazione appena data da Migliorabile) se non posso ricercare uno specifico thread per chiuderlo, cosa fa quella sezione di quel programma? Cosa effettivamente termina?

Devi accedere o registrarti per scrivere nel forum
18 risposte