关于Function JS加密加密(仅于问题分析)

我来分析这种JavaScript代码加密方式。

下面是实际代码(看上去是加密其实很容易被识别源内容)

Function("lc6a3mv#me$w5 $cn&$rxuj!txezr#"["\162\145\160\154\141\143\145"](/[356cm#\$w&xj!z]/g,"")["\x73\x70\x6C\x69\x74"]("")["\u0072\u0065\u0076\u0065\u0072\u0073\u0065"]()[String["\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65"](106,111,105,110)](""))()(";)()}))(thgirypoc(gol_elosnoc;gol.elosnoc=gol_elosnoc rav;};niamod+\",\"+)(raeYlluFteg.)etaD wen(+\"-\"+raey_morf+\")c(\" nruter{)(noitcnuf=thgirypoc rav;7102=raey_morf rav;\"moc.namahsj\"=niamod rav{)( noitcnuf("["s51fpc7@lb^if$7t^0x"["\162\145\160\154\141\143\145"](/[0157fc@b\^\$x]/g,"")]("")["\u0072\u0065\u0076\u0065\u0072\u0073\u0065"]()["\x6A\x6F\x69\x6E"](""));

加密原理分析

这种加密方式的核心是使用Function构造函数来执行经过混淆的代码字符串。

基本结构

javascript

Function(obfuscated_code_string)()
  • 通过Function构造函数将字符串转换为可执行函数

  • 立即调用该函数执行解密后的代码

混淆技术分析

  1. 字符串混淆

    • 使用八进制:\162\145\160\154\141\143\145 → "replace"

    • 使用十六进制:\x73\x70\x6C\x69\x74 → "split"

    • 使用Unicode转义:\u0072\u0065\u0076\u0065\u0072\u0073\u0065 → "reverse"原始混淆字符串 → replace去除干扰字符 → split → reverse反转 → join组合

示例代码解密

第一个示例解密过程:

javascript

// 原始混淆字符串
"lc6a3mv#me$w5 $cn&$rxuj!txezr#"

// 去除干扰字符 [356cm#\$w&xj!z]
.replace(/[356cm#\$w&xj!z]/g, "") 
// 得到: "a v e r s e"

// 分割成数组
.split("") 
// ["a", " ", "v", " ", "e", " ", "r", " ", "s", " ", "e"]

// 反转数组
.reverse()
// ["e", " ", "s", " ", "r", " ", "e", " ", "v", " ", "a"]

// 组合成字符串
.join("") 
// "e s r e v a"

实际代码还原

从源代码示例中可以看到实际代码:

javascript

var domain = "moc.namahsj";
var from_year = 2017;
var copyright = function(){
    return "(c)"+from_year+"-"+ (new Date()).getFullYear()+","+domain;
};
var console_log = console.log;
console.log = console_log;
copyright();

特点总结

  1. 作用域保持:加密前后全局变量和作用域完全一致

  2. 直接运行:无需额外解密工具,浏览器可直接执行

  3. 轻度混淆:主要目的是防止简单阅读,不是高强度加密

  4. 可逆性:通过分析字符串处理流程可以还原原始代码

这种加密方式适合需要简单代码保护但又不想影响执行效率的场景。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荻酷社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值