找回密码
 立即注册
注册 登录
×
热搜: 活动 交友 discuz
查看: 67|回复: 0

巧用try、catch实现JS代码加密

[复制链接]

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-1-1 19:45:17 | 显示全部楼层 |阅读模式
巧用try、catch实现JS代码加密
本文分享一种奇特的JS代码加密解密方法。
技术原理

将JS代码加密,然后在try、catch错误捕捉语法中,用eval进行执行,能执行则表明解密成功,不能执行则意味着解密出错,此时会抛出错误,并由catch捕捉进行重新解密。
源码解析

加密部分:



解密部分:



完整源码

    /*加密部分*/
    var source_string ='alert("JShaman提供专业的JavaScript代码混淆加密");';
    var encoded_string = "";
    function encode(){
        for(var i=0;i<source_string.length;i++){
            //异或加密每一个字符,异或密钥:61
            encoded_string += String.fromCharCode(source_string.charCodeAt(i)^61);
        }
        alert(encoded_string);
        console.log("加密完成:",encoded_string);
    }
    encode();
    /*解密部分*/
    //初始解密密钥,初始设为0,可为小于加密字符长度的任意值
    var encode_key = 0;
    //解密后的字符串,初始为加密值
    var decoded_string = encoded_string;
    function decode(){
        try{
           
            //eval执行,能执行则说明解密成功,因为原始代码是alert,是能正确执行的语句
            eval(decoded_string);
            console.log("解密成功:", decoded_string);
        }catch(e){
            decoded_string ="";
            for(var i=0; i<encoded_string.length; i++){
                decoded_string += String.fromCharCode(encoded_string.charCodeAt(i) ^ encode_key );
            }
            encode_key += 1;
            decode();
        }
    }
    decode();
   二重加密

如果把以上代码,用JShaman再次进行混淆加密,将得到更加安全的加密代码:



也可用Ty2y进行JS代码混淆加密:



得到的加密代码:



运行效果





注意事项

这是一种思路新奇的加密手段,但此方法有一定的使用条件限制:因解密时要依赖eval执行,因此被加密的语句需要是可执行的,比如需包裹在alert、console.log等等语句中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋| 黑客通

GMT+8, 2025-10-13 15:28 , Processed in 0.086251 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2020, LianLian.

快速回复 返回顶部 返回列表