Notepad++ Plugin Autoload Persistence & Execution
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Notepad++ itaingia kwa otomatiki kila DLL ya plugin inayopatikana ndani ya subfolders zake za plugins wakati wa kuanzisha. Kuweka plugin hatari katika Notepad++ installation yoyote inayoweza kuandikwa kunatoa code execution ndani ya notepad++.exe kila wakati mhariri anapoanzishwa, jambo ambalo linaweza kutumiwa kwa persistence, stealthy initial execution, au kama in-process loader ikiwa mhariri ataanzishwa elevated.
Mahali pa plugin zinazoweza kuandikwa
- Standard install:
C:\Program Files\Notepad++\plugins\<PluginName>\<PluginName>.dll(kwa kawaida inahitaji admin kuandika). - Chaguzi zinazoweza kuandikwa kwa watumiaji wenye ruhusa ndogo:
- Tumia the portable Notepad++ build katika folda inayoweza kuandikwa na mtumiaji.
- Nakili
C:\Program Files\Notepad++hadi njia inayodhibitiwa na mtumiaji (kwa mfano,%LOCALAPPDATA%\npp\) na endeshanotepad++.exekutoka huko. - Kila plugin inapata saraka yake ndogo chini ya
pluginsna inapakiwa moja kwa moja wakati wa startup; machaguo ya menyu yanaonekana chini ya Plugins.
Plugin load points (execution primitives)
Notepad++ inatarajia kazi maalum zilizotangazwa (exported functions). Hizi zote huitwa wakati wa initialization, zikitoa substrate nyingi za utekelezaji:
DllMain— inaendeshwa mara moja baada ya DLL kupakiwa (sehemu ya kwanza ya utekelezaji).setInfo(NppData)— huitwa mara moja kwenye load kutoa handles za Notepad++; nafasi ya kawaida ya kusajili vitu vya menyu.getName()— inarudisha jina la plugin linaloonyeshwa kwenye menyu.getFuncsArray(int *nbF)— inarudisha amri za menyu; hata ikiwa ni tupu, huitwa wakati wa startup.beNotified(SCNotification*)— hupokea matukio ya mhariri (ufunguzi/mabadiliko ya faili, matukio ya UI) kwa kuzusha triggers za kuendelea.messageProc(UINT, WPARAM, LPARAM)— handler ya ujumbe, inayofaa kwa kubadilishana data kubwa.isUnicode()— flag ya compatibility inayokaguliwa wakati wa load.
Marejeo mengi yanaweza kutekelezwa kama stubs; utekelezaji unaweza kutokea kutoka DllMain au callback yoyote iliyo hapo juu wakati wa autoload.
Minimal malicious plugin skeleton
Compile DLL yenye exports zinazotarajiwa na uiweke katika plugins\\MyNewPlugin\\MyNewPlugin.dll chini ya folda ya Notepad++ inayoweza kuandikwa:
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; }
- Tengeneza DLL (Visual Studio/MinGW).
- Unda saraka ndogo ya plugin chini ya
pluginsna uweke DLL ndani. - Anzisha tena Notepad++; DLL itapakiwa kiotomatiki, ikitekeleza
DllMainna subsequent callbacks.
Reflective loader plugin pattern
A weaponized plugin can turn Notepad++ into a reflective DLL loader:
- Present a minimal UI/menu entry (e.g., “LoadDLL”).
- Accept a file path or URL to fetch a payload DLL.
- Reflectively map the DLL into the current process and invoke an exported entry point (e.g., a loader function inside the fetched DLL).
- Benefit: reuse a benign-looking GUI process instead of spawning a new loader; payload inherits the integrity of
notepad++.exe(including elevated contexts). - Trade-offs: dropping an unsigned plugin DLL to disk is noisy; consider piggybacking on existing trusted plugins if present.
Detection and hardening notes
- Block or monitor writes to Notepad++ plugin directories (including portable copies in user profiles); enable controlled folder access or application allowlisting.
- Alert on new unsigned DLLs under
pluginsand unusual child processes/network activity fromnotepad++.exe. - Enforce plugin installation via Plugins Admin only, and restrict execution of portable copies from untrusted paths.
References
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


