推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
blackmiaool

推荐一个 js 混淆器

  •  
  •   blackmiaool · Jun 11, 2017 · 8876 views
    This topic created in 3432 days ago, the information mentioned may be changed or developed.

    地址 https://github.com/blackmiaool/decent-messup

    输入

    const str="abc";
    function func(){
        const obj={};
        obj.property={
            key1:'value1',
            'key2':str,
            ['key'+3]:'value3'
        }
        console.log(obj);    
    }
    func();
    

    输出

    const _a = 'vcb3aotkleyr21ugp';
    const _b = 'bcktuovea2grp1y3l';
    const _c = 'yecauop3rkbltg2v1';
    const str = _a[4] + _b[0] + _a[1];
    function func() {
        const _a2 = _b;
        const _b2 = _a;
        const _c2 = _c;
    
        const obj = {};
        obj[_a2[12] + _c2[8] + _c2[5] + _a2[12] + _b2[9] + _c2[8] + _b2[6] + _a2[14]] = {
            [_b2[7] + _b2[9] + _a2[14] + _b2[13]]: _c2[15] + _c2[3] + _a2[16] + _b2[14] + _c2[1] + _a2[13],
            [_a2[2] + _c2[1] + _b2[10] + _a2[9]]: str,
            [_c2[9] + _a2[7] + _a2[14] + 3]: _c2[15] + _c2[3] + _c2[11] + _b2[14] + _a2[7] + _a2[15]
        };
        console[_a2[16] + _c2[5] + _b2[15]](obj);
    }
    func();
    

    当时写这个主要是想自己给别人写的脚本不要被篡改内容。这个方案会影响性能,看具体情景使用吧。

    18 replies  •  2019-04-23 13:45:09 +08:00
    xyjtou
    xyjtou
    Jun 11, 2017 via Android
    1
    浏览器解析,会有兼容性问题吗?
    blackmiaool
    blackmiaool
    OP
    Jun 11, 2017
    2
    @xyjtou 我自己做了一些测试, 暂未发现兼容性问题. 如果你用了并遇到的话, 可以提 issue, 我会尽力解决
    learnshare
    learnshare
    Jun 11, 2017
    3
    示例代码还是很容易读出来的
    blackmiaool
    blackmiaool
    OP
    Jun 11, 2017
    4
    @learnshare 我这个只负责混淆, 建议之后再 uglify 一下
    prasanta
    prasanta
    Jun 11, 2017 via Android
    5
    假如 python 也能混淆
    wget
    wget
    Jun 11, 2017
    6
    @prasanta 服务器端语言混淆需求没那么高
    bumz
    bumz
    Jun 11, 2017❤️2
    7
    丢进 closure compiler

    瞬间恢复正常

    毕竟任何形式的混淆,都可以通过 partial evaluation 解决
    bumz
    bumz
    Jun 11, 2017
    8
    SourceMan
    SourceMan
    Jun 11, 2017 via iPhone
    9
    没有意义的是吧,压缩一下就可以了,前端没必要混淆
    blackmiaool
    blackmiaool
    OP
    Jun 11, 2017
    10
    @bumz
    这样的话可以试试这种方案, 在代码里加点其他的东西来防止开头的字符串被认为是常量.

    // ==ClosureCompiler==
    // @output_file_name default.js
    // @compilation_level ADVANCED_OPTIMIZATIONS
    // @formatting pretty_print
    // ==/ClosureCompiler==

    var _a = 'vcb3aotkleyr21ugp';
    var _b = 'bcktuovea2grp1y3l';
    var _c = 'yecauop3rkbltg2v1';
    const str = _a[4] + _b[0] + _a[1];
    function func() {
    const _a2 = _b;
    const _b2 = _a;
    const _c2 = _c;

    const obj = {};
    obj[_a2[12] + _c2[8] + _c2[5] + _a2[12] + _b2[9] + _c2[8] + _b2[6] + _a2[14]] = {
    [_b2[7] + _b2[9] + _a2[14] + _b2[13]]: _c2[15] + _c2[3] + _a2[16] + _b2[14] + _c2[1] + _a2[13],
    [_a2[2] + _c2[1] + _b2[10] + _a2[9]]: str,
    [_c2[9] + _a2[7] + _a2[14] + 3]: _c2[15] + _c2[3] + _c2[11] + _b2[14] + _a2[7] + _a2[15]
    };
    console[_a2[16] + _c2[5] + _b2[15]](obj);
    }
    if(!_c){
    _a="";
    _b="";
    _c="";
    }
    func();
    v1024
    v1024
    Jun 12, 2017 via iPhone
    11
    字符串拆散而已,自己骗自己的“混淆”
    ChiChou
    ChiChou
    Jun 12, 2017
    12
    打开 prepack 的 demo 页面: https://prepack.io/repl.html

    粘贴如下内容:

    (function() {
    const _a = 'vcb3aotkleyr21ugp';
    const _b = 'bcktuovea2grp1y3l';
    const _c = 'yecauop3rkbltg2v1';
    const str = _a[4] + _b[0] + _a[1];
    function func() {
    const _a2 = _b;
    const _b2 = _a;
    const _c2 = _c;

    const obj = {};
    obj[_a2[12] + _c2[8] + _c2[5] + _a2[12] + _b2[9] + _c2[8] + _b2[6] + _a2[14]] = {
    [_b2[7] + _b2[9] + _a2[14] + _b2[13]]: _c2[15] + _c2[3] + _a2[16] + _b2[14] + _c2[1] + _a2[13],
    [_a2[2] + _c2[1] + _b2[10] + _a2[9]]: str,
    [_c2[9] + _a2[7] + _a2[14] + 3]: _c2[15] + _c2[3] + _c2[11] + _b2[14] + _a2[7] + _a2[15]
    };
    console[_a2[16] + _c2[5] + _b2[15]](obj);
    }
    func();
    })();

    看右边输出。
    AlisaDestiny
    AlisaDestiny
    Jun 12, 2017
    13
    道高一尺魔高一丈。
    bumz
    bumz
    Jun 12, 2017
    14
    @blackmiaool #10 只能说 closure compiler 不是专为破解这种混淆设计的,所以 partial evaluation 的力度不是很大,为了保障结果正确,有些明明可以做的 constant expansion 并没有做

    again, 任何形式的混淆、「加密」(其实只是编码)都可以用 partial evaluation 解决,毕竟你的代码只要能执行,早晚都要原形毕露
    voocel
    voocel
    Jun 12, 2017 via Android
    15
    混淆自己用的
    blackmiaool
    blackmiaool
    OP
    Jun 12, 2017
    16
    @bumz 没错啦, 混淆都可以通过写程序来还原. 但是普通的混淆很容易通过搜索找到想要的东西然后改改完事. 如果破解者真的有能力自己写个程序把源码破解, 那也没必要这么放啦
    blackmiaool
    blackmiaool
    OP
    Jun 12, 2017
    17
    @bumz 没错啦, 混淆都可以通过写程序来还原. 但是普通的混淆很容易通过搜索代码来找到想要的东西然后改改完事. 如果破解者真的有能力自己写个程序把源码破解, 那也没必要这么防啦~
    loginbygoogle
    loginbygoogle
    Apr 23, 2019 via Android
    18
    我直接调用整个方法就可以了,都不用看具体逻辑
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5421 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 01:59 · PVG 09:59 · LAX 17:59 · JFK 20:59
    ♥ Do have faith in what you're doing.