Skip to content

Instantly share code, notes, and snippets.

@ereti
Last active October 25, 2022 15:39
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save ereti/ceb15a913b8d662339fe2ae10d7bb465 to your computer and use it in GitHub Desktop.
npm birthday deobfuscation
const B = Buffer;
const f = "from";
const D = Date;
const s = 8
const t = 29
const n = new D();
const _6 = "base64";
const l = "toString";
const v = s => B[f](s, _6)[l](); // s => Buffer.from(s, "base64").toString();
const y = v('Z2V0RnVsbFllYXI='); // "getFullYear"
const a = v('Z2V0VVRDRGF0ZQ=='); // "getUTCDate"
const m = v('Z2V0VVRDTW9udGg='); // "getUTCMonth"
const p = v('UGxlYXNlIHRyeSBhZ2FpbiBpbiA=') // "Please try again in "
const z = require(v('emxpYg==')); // require("zlib")
const i = z[v('aW5mbGF0ZVN5bmM=')] // inflateSync
let x_ = n[y]() // date.getFullYear()
const x = new D(`${x_++}-0${s + 1}-${t}`) - n // new Date(year, september, 29th) - n (i.e. distance between then and now)
const xx = x < 0 ? new D(`${x_}-0${s + 1}-${t}`) - n : x // if distance is less than 0, xx = new Date(next year, september, 29th) - n (i.e. distance to next sept 29th), else xx = x
c(...(`${n[a]()}${n[m]()}` !== `${t}${s}` ? [`${p}${xx}ms`] : [null, console.log(/*big confusing nonsense, see below*/)]))
/*
from the middle:
JSON.parse(i(B[f]('eJw1U9Gx5DAIa4gPExsDtby5/ts4SXhnspNNAkIS8p8vtzzm32e+rp2t2007ae7HTuEWdq/VtvysHM/4rbTEdfEvLNhclqgL/Nv67AvVR+AAQHF9lguTllXrRtAmIvs9ZnJYpXXxdQ1QtzX6VnOA4JxMMBvwhZlF6DiaCL63+So3yykhCeMCDF6kCmheLaWUmHrtn5Opu4SCLYh0ilQIPvewupKylsXSJOclnZy55gm1V3bcK3RYSgd7GOCh5TvUQ2IB67Kdk0gHBsV5ek5LcchwF+WWathBoo9VUE7A6WJFfsMBX5wzD6VQGqm7HCPNkRxbJPZ82cSuaapZDKGG5ttJpXC18SBYTDPogtV94ViisUZpa+dXTrCJm/GrDtfO6uXAtdp8T+IZ/ksPJmI8bSgljH4LTV6QK6P6kkniJezk65dPeRzy9Gjh3zTeliZ0sYJJjZ9c0mCaWMrglj7IsHwGaUNaxGYuBPbNOViz6blxpk7E+QURA+n54qI1a5Ydv1QrUkeBocNFpKe8Z5ld71y29gAG78xg5zSS5/VMsat4ODL7a1BllY4OTKLhd+IruSB7/d9/b7zQBA==', _6))[l]())
is
JSON.parse(
zlib.inflateSync(
Buffer.from('eJw1U9Gx5DAIa4gPExsDtby5/ts4SXhnspNNAkIS8p8vtzzm32e+rp2t2007ae7HTuEWdq/VtvysHM/4rbTEdfEvLNhclqgL/Nv67AvVR+AAQHF9lguTllXrRtAmIvs9ZnJYpXXxdQ1QtzX6VnOA4JxMMBvwhZlF6DiaCL63+So3yykhCeMCDF6kCmheLaWUmHrtn5Opu4SCLYh0ilQIPvewupKylsXSJOclnZy55gm1V3bcK3RYSgd7GOCh5TvUQ2IB67Kdk0gHBsV5ek5LcchwF+WWathBoo9VUE7A6WJFfsMBX5wzD6VQGqm7HCPNkRxbJPZ82cSuaapZDKGG5ttJpXC18SBYTDPogtV94ViisUZpa+dXTrCJm/GrDtfO6uXAtdp8T+IZ/ksPJmI8bSgljH4LTV6QK6P6kkniJezk65dPeRzy9Gjh3zTeliZ0sYJJjZ9c0mCaWMrglj7IsHwGaUNaxGYuBPbNOViz6blxpk7E+QURA+n54qI1a5Ydv1QrUkeBocNFpKe8Z5ld71y29gAG78xg5zSS5/VMsat4ODL7a1BllY4OTKLhd+IruSB7/d9/b7zQBA==', "base64")
).toString()
)
i.e.
[101,74,122,106,43,106,67,47,114,48,115,66,83,72,81,111,107,77,76,105,52,108,75,65,103,107,102,84,74,115,77,82,70,120,89,120,66,89,81,52,115,106,65,87,98,81,83,107,99,90,109,75,74,111,72,76,84,85,68,82,54,102,48,69,68,73,75,114,73,101,81,85,85,108,83,83,89,67,48,117,108,121,77,112,81,70,98,97,65,85,102,73,83,106,70,100,50,73,71,71,115,75,110,71,113,86,103,66,108,47,72,89,108,87,79,122,52,99,80,56,75,85,117,120,54,48,69,49,72,75,76,117,48,98,82,74,81,73,83,105,67,57,88,48,72,113,83,119,104,97,112,70,112,54,71,121,77,53,99,83,112,53,82,89,104,85,106,113,99,80,107,99,87,119,65,105,54,53,112,69,74,67,76,100,72,109,122,90,66,68,47,105,73,116,69,71,68,78,115,101,84,87,115,104,71,51,70,120,65,99,117,82,84,110,105,74,81,106,83,76,105,56,118,68,77,83,65,103,85,115,72,74,77,121,106,69,119,56,85,120,85,107,99,104,114,121,66,88,107,83,117,106,112,75,83,103,50,69,112,102,80,122,50,122,74,75,77,48,83,83,56,53,80,49,99,102,75,75,54,102,110,74,79,112,68,50,84,110,90,112,98,111,109,53,103,90,109,97,87,107,74,90,111,98,103,50,48,109,112,56,119,68,65,71,56,86,101,66,77,61]
then
Buffer.from(^ that thing).toString()
is
eJzj+jC/r0sBSHQokMLi4lKAgkfTJsMRFxYxBYQ4sjAWbQSkcZmKJoHLTUDR6f0EDIKrIeQUUlSSYC0ulyMpQFbaAUfISjFd2IGGsKnGqVgBl/HYlWOz4cP8KUux60E1HKLu0bRJQISiC9X0HqSwhapFp6GyM5cSp5RYhUjqcPkcWwAi65pEJCLdHmzZBD/iItEGDNseTWshG3FxAcuRTniJQjSLi8vDMSAgUsHJMyjEw8UxUkchryBXkSujpKSg2EpfPz2zJKM0SS85P1cfKK6fnJOpD2TnZpbom5gZmaWkJZobg20mp8wDAG8VeBM=
then zlib.inflateSync(Buffer.from(^ that thing, "base64").toString())
is
"\n🎊 🎈 🎊 🎈 🎊 🎈 🎊 🎈 🎊 🎈 🎊\n\n β–“β–“β–“β–“\n …li/commit/4626dfa73\n\n🎊 🎈 🎊 🎈 🎊 🎈 🎊 🎈 🎊 🎈 🎊\n"
so now we have
c(...(`${n[a]()}${n[m]()}` !== `${t}${s}` ? [`${p}${xx}ms`] : [null, console.log(^ that string)]))
i.e.
c(...(
${n[a]()}${n[m]()}` !== `${t}${s}` // ${date.getUTCDate()}${date.getUTCMonth} !== "829"
?
`${p}${xx}ms` // "Please try again in ${distance}ms"
:
[null, console.log(^ that string)]
))
end result: either it tells you how many milliseconds til september 29th (npmcli anniversary), or it gives balloons and confetti with the commit hash of the first npmcli commit
*/
@HankZhi
Copy link

HankZhi commented Dec 14, 2021

666

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment