
Implémentation native en Delphi de la fonctionnalité PE-sieve avec une bibliothèque réutilisable, une interface CLI et une DLL compatible PE-sieve pour l'intégration avec HollowsHunter.
NativeMirror est une implémentation indépendante en Object Pascal des fonctionnalités de PE-sieve, adaptée de PE-sieve par hasherezade. Il analyse la mémoire des processus, détecte le code modifié ou injecté et extrait les fichiers PE.
L'implémentation utilise les API natives de Delphi et NativePe comme moteur PE. Elle peut être utilisée directement comme bibliothèque Delphi, via son CLI ou via une interface DLL compatible avec PE-sieve. Les trois partagent le même cœur de scanner. La cible de compatibilité est le comportement observable de manière externe de PE-sieve 0.4.1.5 ; l'équivalence comportementale complète n'a pas été établie.
../NativePe, ou ajustez les chemins de recherche Delphi.NativeMirrorScan.NativeAsm.dproj active USE_NATIVEASM. Sans lui, NativeMirror utilise le repli Delphi/LDE. Ajustez le chemin de recherche NativeASM selon votre installation.py : requis pour l'étape post-build de la DLL et les tests Python. Les scripts utilisent la bibliothèque standard Python.Certaines configurations de projet contiennent des chemins de dépendances locales. Vérifiez les chemins de recherche avant de compiler sur une autre machine.
Ouvrez NativeMirror.groupproj dans Delphi et sélectionnez le projet, la plateforme et la configuration requis.
| Projet | Sortie |
|---|---|
tools/NativeMirrorScan/NativeMirrorScan.dproj | NativeMirrorScan.exe |
tools/NativeMirrorDll/pe-sieve.dproj | pe-sieve.dll |
tests/ScannerIntegration/NativeMirrorTestTarget.dproj | Cible de test Win64 |
tests/ScannerIntegration/NativeMirrorTestTarget32.dproj | Cible de test Win32 |
tests/ScannerIntegration/NativeMirrorScannerTests.dproj | Exécuteur de tests du scanner Win64 |
tests/HollowsHunterIntegration/NativeMirrorHollowsHunterTests.dproj | Exécuteur de tests HollowsHunter Win64 |
Compilez le CLI et la DLL pour Win32 et Win64 selon les besoins. Compilez les deux cibles de test avant d'exécuter les tests d'intégration. Compilez les exécuteurs de tests pour Win64.
Les sorties vont dans bin/<Platform>/<Config>. Les exemples ci-dessous utilisent Debug. Les unités du compilateur vont dans dcu/. Gardez les exécutables hors de tools/.
Exécutez ces commandes depuis la racine du projet. Remplacez 1234 par l'ID du processus à analyser.
.\bin\Win64\Debug\NativeMirrorScan.exe /help
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234 /json /quiet /ofilter 2
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234 /dir output
/ofilter 2 désactive la sortie de dump. /dir output sélectionne le répertoire de sortie pour les rapports et les dumps. Utilisez l'exécutable Win32 sous bin/Win32/Debug si nécessaire. L'accès au processus cible dépend de vos autorisations Windows.
Ajoutez src/ et ses sous-répertoires d'unités, ainsi que NativePe, au chemin de recherche de votre projet. Appelez ScanAndDump avec TNativeMirrorOptions. La bibliothèque est compilée dans votre application ; cette utilisation ne nécessite ni NativeMirrorScan.exe ni pe-sieve.dll. Python n'est nécessaire que pour la compilation séparée de la DLL et les tests Python.
Cet exemple console analyse le PID 1234 et affiche son rapport au format JSON :
program ScanExample;
{$APPTYPE CONSOLE}
uses
System.JSON,
NativeMirror.Core.Types,
NativeMirror.Core.Options,
NativeMirror.Core.Engine;
var
Options: TNativeMirrorOptions;
Report: TNativeMirrorReportEx;
Json: TJSONObject;
begin
Options := TNativeMirrorOptions.Default;
Options.Pid := 1234;
Options.Quiet := True;
Options.OutputFilter := nmOutNoDir;
Report := ScanAndDump(Options);
try
Json := Report.ToJson(Options.ResultsFilter, Options.JsonLevel);
try
Writeln(Json.ToJSON);
finally
Json.Free;
end;
finally
Report.Free;
end;
end.
Remplacez le PID par votre cible. nmOutNoDir désactive les fichiers de rapport et les dumps. Inspectez Report.ErrorReport pour les erreurs de scan et Report.ScanReport pour les résultats du scan. L'appelant possède le rapport retourné et doit le libérer.
Téléchargez pe-sieve32.exe et pe-sieve64.exe depuis les versions de PE-sieve. Les scripts de comparaison existants utilisent les exécutables v0.4.1.1. Placez les deux dans bin/Win64/Debug ; les scripts de test Win64 y cherchent leur scanner de référence. L'exécutable 32 est la référence Win32 d'origine, même s'il est stocké aux côtés des outils de test Win64.
Une configuration Debug ressemble à ceci :
bin/
Win64/Debug/
NativeMirrorScan.exe
pe-sieve.dll
pe-sieve.dll.exports.json
pe-sieve32.exe
pe-sieve64.exe
NativeMirrorTestTarget.exe
NativeMirrorScannerTests.exe
NativeMirrorHollowsHunterTests.exe
hollows_hunter.exe
Win32/Debug/
NativeMirrorScan.exe
pe-sieve.dll
pe-sieve.dll.exports.json
NativeMirrorTestTarget32.exe
NativeMirror produit le CLI, la DLL, les enregistrements d'export, les cibles et les exécuteurs de tests. Les exécutables PE-sieve et HollowsHunter sont des téléchargements séparés. HollowsHunter n'est nécessaire que pour son test d'intégration ou pour une utilisation manuelle de la DLL.
Téléchargez hollows_hunter64_dll.zip, v0.4.1.1 depuis les versions de HollowsHunter. Utilisez le paquet DLL. Avec une architecture hôte et un contrat d'API correspondants, le pe-sieve.dll finalisé de NativeMirror remplace la DLL PE-sieve d'origine utilisée par HollowsHunter. L'exécutable statique autonome ne peut pas utiliser une DLL de remplacement. Le test d'intégration fourni couvre l'hôte DLL Win64 v0.4.1.1.
Pour une exécution manuelle, copiez le hollows_hunter.exe du paquet dans bin/Win64/Debug, à côté du pe-sieve.dll compilé par NativeMirror. Ne copiez pas la DLL d'origine du paquet par-dessus la DLL NativeMirror. L'hôte et la DLL doivent tous deux être en Win64.
.\bin\Win64\Debug\hollows_hunter.exe /pid 1234 /quiet /hooks /ofilter 2 /json /report 7
Pour la comparaison automatisée, extrayez l'EXE et la DLL originaux inchangés du même paquet dans :
tests/HollowsHunterIntegration/fixtures/Win64/pe-sieve-C/
hollows_hunter.exe
pe-sieve.dll
manifest.json
Conservez le manifest.json existant. Il enregistre les versions attendues et les hachages SHA-256. Le runner vérifie ces fichiers, copie le même hôte dans des répertoires de référence et NativeMirror distincts, et teste chaque DLL contre des processus de test contrôlés. Il ne télécharge pas de fichiers et n'écrase pas la build dans bin.
PE-sieve exporte PESieve_version comme une valeur de données 32 bits. Pour la version 0.4.1.5, cette valeur est 0x00040105. Un appelant s'attend à ce que l'adresse d'export pointe vers ces quatre octets, plutôt que vers une fonction renvoyant le nombre.