示例:
eval(function (p, a, c, k, e, d) { e = function (c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; while (c--) { if (k[c]) { p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) } } return p }('$(5(){4(r){$(\'#14\').J($(\'#N\'))}4(11 8==\'S\'){$.9(\'?b=H&y=\'+8);4(r){$(\'#x .10\').Z($(\'#x .Y\'))}}X()});5 G(3,7,8,W){12 c=U();4(c){a(1);$.9(\'/T.d?b=R&7=\'+7+\'&y=\'+8+\'&s=\'+c+\'&t=\'+j(),5(2){4(2.v==u){4(2.2.Q){$.9(\'/k.d?b=P&O=\'+8+\'&s=\'+c+\'&n=\'+2.2.n+\'&l=\'+2.2.l+\'&w=\'+2.2.w+\'&V=\'+13()+\'&t=\'+j(),5(2){a(0);4(2.v==u){1q(2.2.1p,2.2.1o)}6{E(2.D)}})}6{a(0);4(2.2.n==\'1n\'){1m({\'7\':\'1l\',\'1k\':\'您今天下载超限了\',\'1j\':\'您虽为月卡用户,但您每天最多只能下载 <A 1i="1h-1g-1f">\'+2.2.1e+\'</A> 个模板,您今天超限了,请明天再来!或补差价升级月卡套餐无限制下载模板!\',\'1d\':\'补差价升级套餐\',\'1c\':\'算了,不需要\'},5(){C.g(\'/B.d?7=k&p=\'+2.2.p+\'&o=\'+2.2.o+\'&19=\'+2.2.l)})}6{$.9(\'/k.d?b=B&t=\'+j(),5(2){$(\'#16\').17();$(\'18\').1a(2);C.1b=\'\'})}}}6{a(0);E(2.D)}})}6{15(\'G\')}}5 K(3){4($(3).f(\'.i\').L(\'h-m\')){$(3).f(\'.i\').M(\'h-m\');$(3).e(\'.g\').z();$(3).e(\'.q\').F()}6{$(3).f(\'.i\').I(\'h-m\');$(3).e(\'.g\').F();$(3).e(\'.q\').z()}}', 62, 89, '||data|obj|if|function|else|type|tplId|get|wait|act|cidStr|html|find|siblings|open||itemwp|getTime|tpl|time|30|reason|paymac|payfor|close|ISM|cidstr||200|state|mac|mainBtnWp|id|hide|span|buy|window|errorMsg|alert|show|downloadTpl|setViewNum|addClass|insertBefore|toggleMore|hasClass|removeClass|tplNavWp|tplid|getDownloadInfo|isAble|getTplDownloadInfo|number|customer|getCidStr|wechat|tplName|initFavorite|favoritebtn|insertAfter|downloadbtn|typeof|var|isWechat|tplSearchWp|getLoginPop|buyPopWp|remove|body|paytime|append|buyPaykey|noBtn|yesBtn|limitNum|500|blue|color|class|text|title|fail|mAlert|monthLimit|name|url|downloadFileAct'.split('|')))
要获取 eval
函数执行的 JavaScript 代码,你需要对混淆的代码进行解码。通常,这种混淆代码会使用某种编码或替换机制来隐藏实际的代码逻辑。以下是一个步骤指南,帮助你解码并获取 eval
后的 JavaScript 代码。
步骤 1: 分析混淆代码
首先,我们需要理解混淆代码的工作原理。典型的混淆代码通常包含以下几个部分:
- 一个字符串,包含经过编码或混淆的 JavaScript 代码。
- 一个函数,用于解码这个字符串。
- 使用
eval
来执行解码后的字符串。
步骤 2: 解码函数
在你的例子中,解码函数是这样的:
function (p, a, c, k, e, d) {
e = function (c) {
return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36));
};
while (c--) {
if (k[c]) {
p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
}
}
return p;
}
这个函数的作用是将 p
字符串中的某些编码标识符替换为 k
数组中的实际值。
步骤 3: 提取参数
从你的代码片段中提取出 p
, a
, c
, k
等参数:
p
是编码后的 JavaScript 代码字符串。a
是基数,通常是 62。c
是k
数组的长度。k
是一个数组,包含了实际的变量名和字符串。
步骤 4: 手动解码
我们可以手动实现解码函数,并用它来解码 p
字符串。
// 混淆的参数
const p = '...'; // 你的编码后的 JavaScript 代码字符串
const a = 62; // 基数
const c = 89; // k 数组的长度
const k = '||data|obj|if|function|else|type|tplId|get|wait|act|cidStr|html|find|siblings|open||itemwp|getTime|tpl|time|30|reason|paymac|payfor|close|ISM|cidstr||200|state|mac|mainBtnWp|id|hide|span|buy|window|errorMsg|alert|show|downloadTpl|setViewNum|addClass|insertBefore|toggleMore|hasClass|removeClass|tplNavWp|tplid|getDownloadInfo|isAble|getTplDownloadInfo|number|customer|getCidStr|wechat|tplName|initFavorite|favoritebtn|insertAfter|downloadbtn|typeof|var|isWechat|tplSearchWp|getLoginPop|buyPopWp|remove|body|paytime|append|buyPaykey|noBtn|yesBtn|limitNum|500|blue|color|class|text|title|fail|mAlert|monthLimit|name|url|downloadFileAct'.split('|');
// 解码函数
function decode(p, a, c, k) {
const e = (c) => {
return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36));
};
while (c--) {
if (k[c]) {
p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
}
}
return p;
}
// 解码后的代码
const decodedCode = decode(p, a, c, k);
console.log(decodedCode);
步骤 5: 运行解码代码
将上述代码保存到一个 JavaScript 文件中(例如 decode.js
),然后在 Node.js 环境中运行它:
node decode.js
或者直接在浏览器的控制台中运行这段代码。
结果
运行后,你应该会在控制台看到解码后的 JavaScript 代码。这就是 eval
函数将要执行的实际代码。
注意事项
- 确保
p
字符串正确无误地复制了整个编码后的 JavaScript 代码。 - 如果代码中有其他复杂的混淆机制,可能需要进一步分析和处理。
通过这种方式,你可以获取并查看 eval
后的 JavaScript 代码,从而更好地理解其功能和逻辑。
Was this helpful?
0 / 0