Notepad++ Autoload des plugins Persistence & Execution
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Notepad++ va **autoload every plugin DLL found under its plugins subfolders** au démarrage. Déposer un plugin malveillant dans toute **writable Notepad++ installation** donne une exécution de code à l'intérieur de notepad++.exe` à chaque démarrage de l’éditeur, ce qui peut être abusé pour persistence, une initial execution discrète, ou comme un in-process loader si l’éditeur est lancé avec des privilèges élevés.
Writable plugin locations
- Standard install:
C:\Program Files\Notepad++\plugins\<PluginName>\<PluginName>.dll(généralement nécessite des droits administrateur pour écrire). - Writable options for low-privileged operators:
- Use the portable Notepad++ build in a user-writable folder.
- Copy
C:\Program Files\Notepad++to a user-controlled path (e.g.,%LOCALAPPDATA%\npp\) and runnotepad++.exefrom there. - Each plugin gets its own subfolder under
pluginsand is loaded automatically at startup; menu entries appear under Plugins.
Plugin load points (execution primitives)
Notepad++ attend des exported functions spécifiques. Celles-ci sont toutes appelées durant l’initialisation, offrant plusieurs surfaces d’exécution :
DllMain— s’exécute immédiatement au chargement de la DLL (premier point d’exécution).setInfo(NppData)— appelé une fois au chargement pour fournir les handles de Notepad++; endroit typique pour enregistrer des éléments de menu.getName()— retourne le nom du plugin affiché dans le menu.getFuncsArray(int *nbF)— retourne les commandes de menu ; même si vide, elle est appelée au démarrage.beNotified(SCNotification*)— reçoit les événements de l’éditeur (ouverture/modification de fichier, événements UI) pour des déclencheurs continus.messageProc(UINT, WPARAM, LPARAM)— gestionnaire de messages, utile pour des échanges de données plus volumineux.isUnicode()— flag de compatibilité vérifié au chargement.
La plupart des exports peuvent être implémentés comme des stubs ; l’exécution peut survenir depuis DllMain ou n’importe quel callback ci‑dessus lors de l’autoload.
Minimal malicious plugin skeleton
Compilez une DLL avec les exports attendus et placez-la dans plugins\\MyNewPlugin\\MyNewPlugin.dll sous un dossier Notepad++ inscriptible :
BOOL APIENTRY DllMain(HMODULE h, DWORD r, LPVOID) { if (r == DLL_PROCESS_ATTACH) MessageBox(NULL, TEXT("Hello from Notepad++"), TEXT("MyNewPlugin"), MB_OK); return TRUE; }
extern "C" __declspec(dllexport) void setInfo(NppData) {}
extern "C" __declspec(dllexport) const TCHAR *getName() { return TEXT("MyNewPlugin"); }
extern "C" __declspec(dllexport) FuncItem *getFuncsArray(int *nbF) { *nbF = 0; return NULL; }
extern "C" __declspec(dllexport) void beNotified(SCNotification *) {}
extern "C" __declspec(dllexport) LRESULT messageProc(UINT, WPARAM, LPARAM) { return TRUE; }
extern "C" __declspec(dllexport) BOOL isUnicode() { return TRUE; }
- Compiler la DLL (Visual Studio/MinGW).
- Créez un sous-dossier pour le plugin dans
pluginset déposez-y la DLL. - Redémarrez Notepad++; la DLL est chargée automatiquement, exécutant
DllMainet les callbacks subséquents.
Reflective loader plugin pattern
Un plugin malveillant peut transformer Notepad++ en un reflective DLL loader :
- Présenter une UI minimale/une entrée de menu (p. ex., “LoadDLL”).
- Accepter un chemin de fichier ou une URL pour récupérer une payload DLL.
- Mapper la DLL de façon reflectif dans le processus courant et invoquer un point d’entrée exporté (p. ex., une fonction loader à l’intérieur de la DLL récupérée).
- Avantage : réutiliser un processus GUI apparemment bénin au lieu de lancer un nouveau loader ; le payload hérite de l’intégrité de
notepad++.exe(y compris les contextes élevés). - Inconvénients : déposer une unsigned plugin DLL sur le disque est bruyant ; envisager de se greffer sur des plugins de confiance existants si présents.
Notes de détection et de durcissement
- Bloquer ou surveiller les écritures dans les répertoires de plugin de Notepad++ (y compris les copies portables dans les profils utilisateur) ; activer Controlled Folder Access ou l’allowlisting d’applications.
- Alerter sur les nouvelles unsigned DLLs sous
pluginset sur les processus enfants/activité réseau inhabituels émanant denotepad++.exe. - Imposer l’installation des plugins uniquement via Plugins Admin, et restreindre l’exécution des copies portables depuis des chemins non fiables.
References
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.


