zswang / jdists

A feature rich code block preprocessing tool.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

jdists 对js文件加密或者对有参数函数加密

wuming-hero opened this issue · comments

您好 最近在研究您写的jdists 想使用jdists进行前端js进行混淆加密
demo大致都看了一下 一些基本的功能也可以进行加密了 可能由于对jdists理解还不是很深入 现在碰到一
个问题 没有看到合适的demo或者解决方法 想请教一下
问题是这样的 我看到jdists里都是对函数体内的代码进行加密,而一般js都是单独的文件,然后引入进来的
请问如何使用jdists对这个文件进行整体加密呢?
还是单独对这个js文件内的每个函数体内的代码进行加密吗?

我尝试直接在一个js文件中使用
/*<jdists encoding="aaencode">*/

var a = '1';

var b = 2;

/*</jdists>*/

在对函数体进行加密的时候无法获取到参数,第一种情况是undefined 第二种情况获得的

typeof arguments: object-----arguments: {"0":"_"}

function abc(params){
/*<jdists encoding="aaencode">*/
// 加密后 params is not defined
var a = params;
// or
var b = arguments[0];
.....
/*</jdists>*/
}

请教以上遇到的问题怎么解决呢 谢谢了

推荐使用 jfogs

这是另一个项目:https://github.com/zswang/jfogs

  • aaencode 和 jjencode 只是看上去难破解而已。劫持 new Function 构建过程,就能抓取到原文。
  • 参见:http://div.io/topic/1220
  • jfogs 则是分析语法树后重新组织属性访问的代码。

使用方法

jfogs 可以处理整个文件

npm install -g jfogs # 安装

jfogs /test/fixtures/angular.in.js -o /test/fixtures/angular.output.js
  • jfogs 处理完后再用 uglify 压缩就很难阅读了。

如果配合 jdists 我会这样写:

/*<jdists encoding="aaencode">*/

    /*<jdists encoding="jfogs,uglify">*/
function abc(params) {
    var a = params;
    // or 
    var b = arguments[0];
    console.log(a, b);
}
window.abc = abc; // exports
    /*</jdists>*/

abc('ue');
/*</jdists>*/
  • 要注意代码会被再次封装一个函数中,形成闭包。对外保留的函数需要导出,如: window.abc = abc; // exports
  • jdists 支持嵌套,可以用 jfogs 加密(属性名变成函数参数),后用 uglify 压缩(混淆)
  • jfogs, uglify 处理完后是这样:
!function(n,o,c,i){function a(n){var i=n,a=arguments[o];console[c](i,a)}"‮"===n&&(window[i]=a)}("‮",0,"log","abc");
abc('ue');

感谢关注。

3Q very much
两种方法我都会去尝试下的
两次感谢您的回答