Unclassified JS PPTX Dropper
PowerPoint-themed JavaScript dropper cluster obfuscated with javascript-obfuscator RC4 string-array encryption. At runtime it instantiates WScript.Shell, Scripting.FileSystemObject, and MSXML2.XMLHTTP COM objects, downloads a remote PowerShell payload via plain HTTP, writes it to a temp file, and executes via Shell.Run. Shares the obfuscation engine with itegroup-sbs-dropper but uses IP-based HTTP C2 (not HTTPS domain) and lacks the LNK-persistence stage.
Capabilities
- javascript-obfuscator-self-defend-stringarray
- rc4-like-string-array-decoder
- custom-base64-alphabet-decoder
- control-flow-flattening-pipe-dispatch
- wscript-powershell-cradle
- http-download-remote-script
- file-system-object-payload-staging
- shell-run-execution
- anti-debug-regex-toString-trap
Build / RE
- Language: JScript for Windows Script Host
- Obfuscation: Commercial-grade
javascript-obfuscatornpm package with:- 372-element string array (
_0x4f3f7f) of base64-like segments encoded with custom alphabetabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=^[/intel/analyses/a8c581f2bffa2df03a2ec133b2c6b9d56dc4298bac141204c7f47bef0d26add2.html] - Custom decoder
_0x1a87(g,e)performing custom-alphabet base64 decode + URL-decode + RC4 decryption keyed by salt stringe^[/intel/analyses/a8c581f2bffa2df03a2ec133b2c6b9d56dc4298bac141204c7f47bef0d26add2.html] - Control-flow flattening via pipe-delimited numeric dispatch inside
while(!![])/switchblocks - Dead-code IIFE wrappers aliasing every meaningful call to randomly-named local functions
- Anti-debug prototype-polluter trap inside
_0x1a87that regex-tests.toString()of a decoy function (stockjavascript-obfuscatorself-defend)
- 372-element string array (
- Code quality: Low — collapses to a simple downloader once de-obfuscated. No anti-VM, no environment checks.
Deploy / ATT&CK
| Tactic | Technique | Evidence |
|---|---|---|
| Initial Access | T1204.002 | PowerPoint-themed filename (CATOLOG SLIDE PRESENTATION.PPTX.js) ^[/intel/analyses/a8c581f2bffa2df03a2ec133b2c6b9d56dc4298bac141204c7f47bef0d26add2.html] |
| Execution | T1059.005 | WScript/CScript .js execution as first stage |
| Execution | T1059.001 | PowerShell execution (inferred from .ps1 payload fetch) |
| Defense Evasion | T1027.002 | javascript-obfuscator RC4 string-array + control-flow flattening |
| Command & Control | T1071.001 | Plain HTTP GET to http://2.27.62.18/web/update.ps1 |
| Ingress Tool Transfer | T1105 | Downloads remote .ps1 payload to disk |
Infrastructure
- URL:
http://2.27.62.18/web/update.ps1(plain HTTP, IP-based) - IP:
2.27.62.18— BT Group allocation per RIPE; may be compromised/resold - No observed backup domains / DGA / hardcoded IPs in single analysed sample.
- No TLS / no auth / no headers in the captured
XMLHTTP.Opencall.
Related
- itegroup-sbs-dropper — Invoice-themed JS dropper using the same
javascript-obfuscatortooling but with HTTPS domain C2 (itegroup.sbs) and LNK persistence - javascript-obfuscator — Concept page for the obfuscation tooling shared across JS dropper families
- wscript-lnk-powershell-cradle — Technique page for the JS→PowerShell multi-stage chain (LNK variant)