563 字
1 分钟
逆向————内存爆破
内存爆破
内存爆破在js逆向中算是个让人头疼的问题,当调试到某处时,你会突然发现自己的电脑风扇开始狂转,页面变得异常卡顿,不用怀疑!那是你被内存爆破了。🤪 注意:本文并不会深入讲解原理及实现逻辑,仅仅当作科普,看个乐也行。(并不是为了水文章啊,可恶!)🤡
警告:以下内容仅用于安全研究、逆向分析学习及合法授权的渗透测试。任何未经授权对他人系统进行内存爆破、反调试绕过或代码混淆破解的行为均属违法。请严格遵守《网络安全法》及相关法律法规。
内存爆破常见形式
1.正则表达式检测格式化实现爆破
2.正则表达式性能爆破
3.常见的死循环
4.ob混淆的数组移位函数中也常常存在爆破
授人以鱼不如授人以🐟😘
这些虽然说实现起来的方式不一样,但是效果都是为了反调试,就展示一些常见的方式来让大佬们参考一下有哪些实现方法吧。(绝对不是因为我懒哈😯)
// 制造指数级增长的字符串function memoryBomb(depth = 0) { if (depth > 20) return "boom"; let str = ""; for (let i = 0; i < 100000; i++) { str += memoryBomb(depth + 1); } return str;}memoryBomb(); // 浏览器卡死上面这个就是常见的大范围循环,我们可以通过中间人攻击来修改js文件绕过这里,或者hook掉这个函数也行。(自己思考,仅提供思路👍)
// 混淆前逻辑:递归生成大字符串 + 反调试(function () { // 反调试:检测 DevTools setInterval(() => { debugger; if (typeof devtools !== 'undefined' && devtools.open) { document.body.innerHTML = "Debugger detected!"; throw new Error("Anti-debug triggered"); } }, 1000);
// 内存爆破核心 const _0x1a2b = ['length', 'push', 'join', 'constructor', 'prototype']; (function (_0x3c4d5e, _0x6f7g8h) { const _0x9i0j1k = _0x3c4d5e(); while (!![]) { try { const _0x2l3m4n = -parseInt(_0x9i0j1k[0]) / 1 * (-parseInt(_0x9i0j1k[1]) / 2) + -parseInt(_0x9i0j1k[2]) / 3 * (parseInt(_0x9i0j1k[3]) / 4) + parseInt(_0x9i0j1k[4]) / 5; if (_0x2l3m4n === 0x1a2b) break; else _0x3c4d5e['push'](_0x3c4d5e['shift']()); } catch (_0x5o6p7q) { _0x3c4d5e['push'](_0x3c4d5e['shift']()); } } }(_0x1a2b));
function bomb(_0x8r9s0t = 0x0) { if (_0x8r9s0t > 0xf) return 'X'.repeat(0x1000); let _0x1u2v3w = []; for (let _0x4x5y6z = 0x0; _0x4x5y6z < 0xfa0; _0x4x5y6z++) { _0x1u2v3w[_0x1a2b[1]](bomb(_0x8r9s0t + 0x1)); } return _0x1u2v3w[_0x1a2b[2]](''); } bomb();})();警告:如果你不想你的电脑卡死,就不要把它放到控制台执行哦!👌
上面这个是控制台检测与ob混淆(内含爆破点,靠动态数组,定时器无限debugger实现),这里的混淆你可以通过AST来解决,但是其实你多走几次断点也能分析清楚他的逻辑。
网络并非法外之地!技术无罪,滥用必究!

如果现在超过10:30,记得早点去休息呀,大佬!可恶!补要再卷啦!
部分信息可能已经过时









