
地址 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(); 当时写这个主要是想自己给别人写的脚本不要被篡改内容。这个方案会影响性能,看具体情景使用吧。
1 xyjtou 2017-06-11 19:47:53 +08:00 via Android 浏览器解析,会有兼容性问题吗? |
2 blackmiaool OP @xyjtou 我自己做了一些测试, 暂未发现兼容性问题. 如果你用了并遇到的话, 可以提 issue, 我会尽力解决 |
3 learnshare 2017-06-11 19:55:20 +08:00 示例代码还是很容易读出来的 |
4 blackmiaool OP @learnshare 我这个只负责混淆, 建议之后再 uglify 一下 |
5 假如 python 也能混淆 |
7 bumz 2017-06-11 21:50:56 +08:00 丢进 closure compiler 瞬间恢复正常 毕竟任何形式的混淆,都可以通过 partial evaluation 解决 |
8 bumz 2017-06-11 21:51:17 +08:00 |
9 SourceMan 2017-06-11 22:12:24 +08:00 via iPhone 没有意义的是吧,压缩一下就可以了,前端没必要混淆 |
10 blackmiaool OP @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(); |
11 v1024 2017-06-12 07:44:12 +08:00 via iPhone 字符串拆散而已,自己骗自己的“混淆” |
12 ChiChou 2017-06-12 09:36:21 +08:00 打开 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(); })(); 看右边输出。 |
13 AlisaDestiny 2017-06-12 09:50:12 +08:00 道高一尺魔高一丈。 |
14 bumz 2017-06-12 10:02:02 +08:00 @blackmiaool #10 只能说 closure compiler 不是专为破解这种混淆设计的,所以 partial evaluation 的力度不是很大,为了保障结果正确,有些明明可以做的 constant expansion 并没有做 again, 任何形式的混淆、「加密」(其实只是编码)都可以用 partial evaluation 解决,毕竟你的代码只要能执行,早晚都要原形毕露 |
15 voocel 2017-06-12 13:24:55 +08:00 via Android 混淆自己用的 |
16 blackmiaool OP @bumz 没错啦, 混淆都可以通过写程序来还原. 但是普通的混淆很容易通过搜索找到想要的东西然后改改完事. 如果破解者真的有能力自己写个程序把源码破解, 那也没必要这么放啦 |
17 blackmiaool OP @bumz 没错啦, 混淆都可以通过写程序来还原. 但是普通的混淆很容易通过搜索代码来找到想要的东西然后改改完事. 如果破解者真的有能力自己写个程序把源码破解, 那也没必要这么防啦~ |
18 loginbygoogle 2019-04-23 13:45:09 +08:00 via Android 我直接调用整个方法就可以了,都不用看具体逻辑 |