Domanda:
Come impedire l'uso di editor di risorse
Mellowcandle
2013-03-30 13:03:52 UTC
view on stackexchange narkive permalink

Esistono numerosi strumenti che consentono di modificare le risorse degli eseguibili di Windows. Questi strumenti consentono un'interfaccia molto semplice per modificare l'aspetto dei programmi. La sostituzione di icone, testo e menu può essere eseguita facilmente senza alcuna conoscenza di invertire.

La mia domanda è: quale opzione ho per evitare che le risorse vengano modificate così facilmente?

Tre risposte:
#1
+15
Remko
2013-03-31 02:25:26 UTC
view on stackexchange narkive permalink

Una soluzione elegante e semplice sarebbe firmare il tuo eseguibile e verificare la firma all'avvio (qualsiasi modifica invaliderà la firma). Anche se qualcuno aggiusta il tuo controllo della firma, la firma sarà comunque non valida, il che rende chiaro che l'exe non è lo stesso che hai consegnato.

Il mio altro pensiero sarebbe quello di usare un exe packer o di prendere un checksum sulle risorse (entrambe erano già state suggerite nella risposta di @angealbertine).

#2
+11
waliedassar
2013-04-03 17:56:05 UTC
view on stackexchange narkive permalink

Inoltre, possiamo sfruttare i bug negli stessi editor per prevenire la manomissione delle nostre risorse. La parte interessante qui è che la maggior parte degli editor di risorse non ha idea di come analizzare i file PE non tipici (non molto non tipici). Ad esempio, alcuni editor presumono che il nome della sezione delle risorse debba essere sempre .rsrc . Esempi:

  1. Resource Hacker

    • Inserimento di una risorsa speciale per far entrare Resource Hacker in un infinito ciclo continuo. Demo qui: http://code.google.com/p/ollytlscatch/downloads/detail?name=antiResHacker.exe

    • Inserimento di uno speciale La risorsa RT_STRING causa l'arresto anomalo di Resource Hacker.

    • Si presuppone che la dimensione della struttura IMAGE_OPTIONAL_HEADER sia sizeof (IMAGE_OPTIONAL_HEADER) , attualmente 0xE0 in esadecimale, mentre può anche essere maggiore. Se la dimensione è maggiore, Resource Hacker elimina l'intero file PE.

  2. Restorator

    • Uguale a 1c.
    • Utilizza il campo NumberOfRvaAndSizes , che può essere facilmente forgiato in 0xFFFFFFFF . Ciò fa sì che Restorator scarti l'intero file PE.
    • Presume che il nome della sezione della risorsa debba essere .rsrc . Cambia qualsiasi altra cosa. Ciò fa sì che Restorator scarti l'intero PE.
    • Qualsiasi sezione di risorse con il campo Caratteristiche impostato su IMAGE_SCN_CNT_UNINITIALIZED_DATA tra le altre caratteristiche verrà scartato da Restorator.

    Demo qui: http://pastebin.com/ezsDCaud

Intelligente! Domanda però: alcuni dei tuoi suggerimenti sembrano andare fuori specifica per le definizioni di ripetizione. Ciò potrebbe causare il fallimento del caricatore o causare il fallimento delle funzioni delle risorse (ad es. Loadstring) nelle attuali o future versioni di Windows?
È improbabile che Microsoft modifichi il comportamento fondamentale del caricamento PE e del codice di attraversamento. Non li ho mai visti fare questo. L'unica variazione nei comportamenti risale a quando era in uso il kernel win9x, e variava dal kernel NT. Microsoft sa bene che i linker di tutti i tipi generano interpretazioni così diverse del formato di file PE, che sono sicuro che sappiano di non toccare nulla. In effetti, il formato del file PE è così sorprendentemente vario, l'unica costante è la compatibilità con il codice di Windows. Certo, prova bene dopo aver creato mod come queste.
Il collegamento a antiResHacker.exe è morto
#3
+10
Ange
2013-03-30 13:33:47 UTC
view on stackexchange narkive permalink

Le risorse sono solo una struttura standard con costanti definite, ma alla fine è solo una struttura ricorsiva a un buffer, indipendentemente da ciò che contiene ( ecco il layout standard).

In teoria può contenere qualsiasi cosa: profondità, loop, tipi non validi, ecc ... ma le API standard non funzioneranno con loro.

Quindi, devi assicurarti che, se crittografare o comprimere le risorse, devono essere ripristinate (sia la struttura della directory delle risorse che il loro contenuto) prima di utilizzare una qualsiasi di queste API, il che potrebbe non essere ovvio.

In particolare, verranno utilizzate alcune risorse dal sistema operativo anche prima che il file venga eseguito, come le prime icone, manifest e informazioni sulla versione, quindi probabilmente vorrai mantenerle intatte.

Un modo semplice per impedire la modifica di risorse banali sarebbe eseguire un flusso cifrare sulle risorse selezionate, sul binario finale (dopo che il linker le ha posizionate e ha generato la voce della risorsa nella DataDirectory), e per ripristinare queste risorse su dem e / o sull'inizializzazione del programma.

Se stai cercando una soluzione pronta, molti buoni packer come PECompact supportano la compressione delle risorse, impedendo così la modifica delle risorse esterne.

Mi chiedo però, potrebbe funzionare una sorta di decompressione / decrittografia durante il caricamento? Gli editor di risorse presumibilmente lavorano con i dati su disco, non in memoria.
hai ragione, ho modificato la mia risposta.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...