
Toolkit di analisi statica e recupero della struttura per immagini PE protette da ACE .qvm0
Questi sono i driver di analisi utilizzati per produrre le misurazioni citate nel README e nelle note dei casi. Sono guidati da argomenti e riutilizzabili: ciascuno accetta il percorso del PE (e i percorsi di output) sulla riga di comando.
Eseguire dalla radice del repository, ad esempio:
python scripts/extended_census.py <pe> <dynamic_edges.tsv>
| script | scopo |
|---|---|
verify_target_decodability.py | verifica della densità di decodifica dei target native->VM rispetto a una popolazione di controllo |
verify_dynamic_coverage.py | intersezione di insiemi a livello di pagina che dimostra se il codice eseguito si sovrappone ai siti di diramazione |
verify_dynamic_edges.py | cross-reference e validazione dei confini tra insiemi di edge dinamici e statici |
opaque_coverage.py | quanta parte dell'insieme di siti staticamente opachi è stata raggiunta dal passaggio dinamico |
extended_census.py | riconcilia il censimento completo dei rami indiretti con i siti osservati |
external_decryptor_scan.py | scansione dei moduli fratelli per capacità di page-protection/mapping/write |
task1_slice_all.py | slice statico completo: risoluzione degli idiomi poi backward slicing, con output degli edge |
task1b_dynamic_codelike.py | recupero dinamico degli edge limitato alle entry VM code-like |
task2_realctx.py | emulazione da contesti di chiamata reali; recupero del layout degli slot dello stack frame |
task4_patch.py | patch di de-oscurimento che preserva la lunghezza più verifica del contenimento |
Diversi di essi esistono per falsificare un'affermazione, ed è per questo che vengono conservati:
verify_target_decodability.py — confronta una metrica di densità di decodifica con una
popolazione di controllo. È lo script che ha dimostrato che un controllo a campione di tre target
non era rappresentativo.verify_dynamic_coverage.py — l'intersezione di insiemi a livello di pagina che ha dimostrato
un bug del tracer anziché un fatto architetturale, quando il tracer riportava zero
rami indiretti su 3M di istruzioni.extended_census.py — ha mostrato che il censimento originale dei rami indiretti enumerava
solo il 35% della popolazione reale perché corrispondeva solo alle forme di registro.external_decryptor_scan.py — scansione delle capacità tra moduli fratelli; l'ipotesi
per cui era stato costruito è stata successivamente smentita da un'osservazione dinamica
di assenza di scrittura, e il risultato negativo è registrato insieme ad esso.Manteneteli onesti: un driver che conferma sempre non vale la pena di essere conservato.