js代码混淆初尝试

本文介绍了前端混淆调用方法的一种实现方式,通过ASCII码加密和解密实现对函数名的混淆。首先生成ASCII码数组,定义加密key,计算加密值并存储。然后在客户端进行解密操作,通过逆运算恢复真实方法名并调用。虽然这种混淆方法并不能完全防止破解,但可以增加一些安全性。文章强调了混淆调用仅是防君子不防小人的手段。
摘要由CSDN通过智能技术生成

本文思路

  1. 拿到a-Z的ASCII码
  2. 定义一个key
  3. 指定key的某几位获取ASCII码并且相加得出的值做最终解码值(keyNum)
  4. keyNum+对应方法名的每一位的ASCII码 , 向左偏移三位然后转换为16进制 , 获取简单加密后的对应字符串, 保存下来(cStrArr)

此处可以进行很多优化, 比如a-Z的ASCII数组打乱, 给更加复杂的加密算法, 这里我只是为了做探索, 所以简化了很多, 但是有一点需要注意 这个加密过程应当是后端完成返回前端的

  1. 给出fnName数组为cStrArr下标
  2. 逆运算解出真实方法名并且调用

ps: 做混淆调用只是一个防君子不防小人的手段, 因为肯定是要前端进行解码的, 所以相当于门上挂了把锁, 给正常人不会去看的门框上面又放了一个钥匙

// 这里应该是服务端去做的事情
// 生成基础a-Z的ASCII数组
let StrArr = []
for(let i = 65 ; i <= 122; i++){
    if(i>90 && i<97){
        continue;
    }
    StrArr.push(i)
}
// 定义加密数组
let cStrArr = []
// 定义一个加密和解密的key
let key = "lidppp"
// 获取一个keyNum做加密使用
// 这里我是图方便写死的, 但其实应该随机去抓某几位的
let keyNum = key[0].charCodeAt() + key[3].charCodeAt()
// 进行简单的加密计算, 将结果存入加密数组中
for(let i = 0; i < StrArr.length; i++){
   cStrArr.push(((StrArr[i] + keyNum) << 3).toString(16))
}

// 注意 此处应当为客户端方法了
// 随便定义个方法
function nzD(){console.log("nzD Fn")}

// 调用的方法名字  
// 这里面存放的是 cStrArr的下标
let fnName = [39,51,3]
// 解密真实调用方法名
let evalFnName = ""
// 进行逆运算
for(let i = 0; i < fnName.length; i++){
    evalFnName += String.fromCharCode((parseInt(cStrArr[fnName[i]],16) >> 3) - keyNum)
}
// 这里我试过 script标签插入body, eval调用....
// Chrome安全策略都不让运行...就很烦,索性直接window调用了, 
// 其实可以把方法挂到某个Object下面去调用
window[evalFnName]()  // log:   nzD Fn
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值