教你开发一个JS代码加密工具

作者:JShaman.com w2sft

本文,教你开发一个JS代码加密工具。

工具可实现:把正常的JS代码,转化为加密代码,并且加密后的JS代码能直接运行。

效果展示

加密前的JS代码:

function get_copyright(){

var domain = "jshaman.com";

var from_year = 2017;

var copyright = "(c)" + from_year + "-" + (new Date).getFullYear() + "," + domain;

return copyright;

}

console.log(get_copyright());

代码运行输出:

加密后的代码:

此代码可复制并在JS环境中运行,如浏览器控制台。

var b=['function','get_copyright(){','var','domain','\x22jshaman.com\x22;','from_year','2017;','copyright','\x22(c)\x22','\x22-\x22','(new','Date).getFullYear()','\x22,\x22','domain;','return','copyright;','console.log(get_copyright());'];

var i=[0x866cb^0x866cb,0x32d88^0x32d89,0x4e909^0x4e90b,0x89f22^0x89f21,0x4a5c5^0x4a5c0,0xd9943^0xd9944,0xe9b87^0xe9b8e,0x27fa7^0x27fac,0x8f43c^0x8f431,0x280a0^0x280b1,0x78277^0x78264,0x14,0x16,0x18,0x83ff5^0x83fd2,0x28,0x3eaff^0x3ead5];

var c='\x0a_[0]\x20_[1]\x0a_[2]\x20_[3]\x20=\x20_[5]\x0a_[2]\x20_[7]\x20=\x20_[9]\x0a_[2]\x20_[11]\x20=\x20_[13]\x20+\x20_[7]\x20+\x20_[17]\x20+\x20_[19]\x20_[20]\x20+\x20_[22]\x20+\x20_[24]\x0a_[11]\x20=\x20_[13]\x20+\x20_[7]\x20+\x20_[17]\x20+\x20_[19]\x20_[20]\x20+\x20_[22]\x20+\x20_[24]\x0a_[39]\x20_[40]\x0a}\x0a_[42]\x0a';for(j=0x0;j<b['length'];j++){c=c['replace'](new RegExp('_\x5c['+i[j]+'\x5c]','g'),b[j]['replace']('`','')['replace']('`',''));}

[]['constructor']['constructor'](c)();

加密后的代码运行输出:

加密后代码运行正常,且输出结果与加密前相同。

加密原理

本文设计的JS代码加密工具,原理较为简单:

将JS代码以空格进行分隔,提取出各个代码块放到数组中,并用数组名替换代码。

替换之后,代码可能形似:

_[0] _[1]

_[2] _[3] = _[5]

_[2] _[7] = _[9]

_[2] _[11] = _[13] + _[7] + _[17] + _[19] _[20] + _[22] + _[24]

_[11] = _[13] + _[7] + _[17] + _[19] _[20] + _[22] + _[24]

_[39] _[40]

在运行前,进行自解密,以还原为原始代码。

编程实现

直接上源码,代码中含注释,对关键处有详细说明:

//要加密的JS代码

var js_code =`

function get_copyright(){

var domain = "jshaman.com";

var from_year = 2017;

var copyright = "(c)" + from_year + "-" + (new Date).getFullYear() + "," + domain;

copyright = "(c)" + from_year + "-" + (new Date).getFullYear() + "," + domain;

return copyright;

}

console.log(get_copyright());

`;

//把代码以空格分割,放入数组

var str_arr = js_code.trim().split(/\s+/);

var str_obj = {};

var min_str_arr = [];

var min_str_arr_index = [];

var index = 0;

//遍历代码数组

for(i=0; i<str_arr.length; i++){

//长度大于3的数组内容

if(str_arr[i].length >= 3){

//判断对像中是否存在,用对像不用数组是因为效率更高

if(str_obj[str_arr[i]] == null){

index = i;

str_obj[str_arr[i]] = i;

//缩小的数组

min_str_arr.push("`" + str_arr[i] + "`");

//缩小的数组索引,解密用

min_str_arr_index.push(index);

}else{

//索引,解密用

index = str_obj[str_arr[i]];

}

//将代码进行替换加密

js_code = js_code.replace(str_arr[i],"_["+ index +"]");

}

}

/*

//还原

for(i=0; i<min_str_arr.length; i++){

js_code = js_code.replace(new RegExp("b\\["+min_str_arr_index[i]+"\\]","g"), min_str_arr[i].replace("`","").replace("`",""));

}

*/

//代码数组

var b = "var b= [" + min_str_arr + "];";

//代码数组索引

var i = "var i= [" + min_str_arr_index + "];";

//加密的代码

var c = "var c= `" + js_code + "`";

//解密并执行代码

var d = `

for(j=0; j<b.length; j++){

c = c.replace(new RegExp("_\\\\["+i[j]+"\\\\]","g"), b[j].replace("\`","").replace("\`",""));

}

[].constructor.constructor(c)();

`;

//组合,使可以自动执行加密代码

e = b+"\n"+i+"\n"+c+d;

console.log(e);

在Node.JS环境中运行,可直接输出加密代码如下:

var b= [`function`,`get_copyright(){`,`var`,`domain`,`"jshaman.com";`,`from_year`,`2017;`,`copyright`,`"(c)"`,`"-"`,`(new`,`Date).getFullYear()`,`","`,`domain;`,`return`,`copyright;`,`console.log(get_copyright());`];

var i= [0,1,2,3,5,7,9,11,13,17,19,20,22,24,39,40,42];

var c= `

_[0] _[1]

_[2] _[3] = _[5]

_[2] _[7] = _[9]

_[2] _[11] = _[13] + _[7] + _[17] + _[19] _[20] + _[22] + _[24]

_[11] = _[13] + _[7] + _[17] + _[19] _[20] + _[22] + _[24]

_[39] _[40]

}

_[42]

`

for(j=0; j<b.length; j++){

c = c.replace(new RegExp("_\\["+i[j]+"\\]","g"), b[j].replace("`","").replace("`",""));

}

[].constructor.constructor(c)();

这时,与前文给出的加密代码还有些差别。

将此代码,经JShaman平台再进行一次混淆加密:

这个环节,是对数值、字符等再次进行加密。

即可得到最终的代码:

本文技术及源码,由JShaman团队原创提供。JShaman是国内专业的混淆加密平台。

JS代码加密应用场景

JS代码加密,在许多场景都可发挥重要的作如,如:

前端JS代码混淆;H5、游戏、应用代码加密;NodeJS代码保护;微信、支付宝小程序过审。

可起到:防分析、防Copy、防盗用、防破解、防信息泄露、防攻击等作用。

教你开发一个JS代码加密工具相关推荐

  1. android js 代码混淆工具,好用的JS(Javascript)混淆加密工具-HDS JSObfuscator 2.14版

    好用的JS(Javascript)混淆加密工具-HDS JSObfuscator 2.14版 书法字体2017.06.23css压缩 分享一款好用的JS混淆加密工具:HDS JSObfuscator ...

  2. 如何从零开发一个低代码平台,有哪些成熟技术组件可用

    目前国内主流的低代码开发平台有:宜搭.云程.简道云.明道云.氚云.伙伴云.道一云.JEPaaS.华炎魔方.搭搭云.JeecgBoot .RuoYi等.这些平台各有优劣势,定位也不同,用户可以根据自己需 ...

  3. 代码加密 android,Android 开发怎样做代码加密或混淆

    原标题:Android 开发怎样做代码加密或混淆 对于Android开发技术人员来说,隐藏代码或是混淆代码至关重要.试想自己辛辛苦苦赶工出来的产品,被其他开发者反编译后轻松拿走.放在哪里都是一件让人崩 ...

  4. Unity编辑器开发(五):实战、开发一个AB包编辑器工具

    前言 在我们上一篇(Unity编辑器开发(四):实战.开发一个AB包编辑器工具)的结尾,我们拥有了如下图中那样的一个编辑器窗口: 接下来我们来完成最后部分,也就是包括创建AB包,清理AB包,删除AB包 ...

  5. 常用ASP代码加密工具的工作原理

    打开ASP文件,经常看到类似这样的代码,创建一个组件,然后传入一大堆没有意义的字符,如下: <% Dim obj Set obj = Server.CreateObject("AspD ...

  6. 物联网全栈教程--手把手教你开发一个智能浇花器

    下面来说一下课程的安排,本教程可以分为三大章节,30个小章节,在1-10章节,手把手讲解了如何实现一个定时/实时控制的浇花器,可以对浇花器电量进行显示,可以进行定时设置,以及实时控制,低功耗模式等等, ...

  7. 基于QT开发PC端文件加密工具

    基于QT开发PC端文件加密工具 1.客户需求 某案子.该方案,通过外挂TF卡实现,本地教育资源的调取使用.按客户需求,把TF卡内的内容进行加密,并在软件中写好解密,确保资源文件只能在教育机中才能正常播 ...

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

    巧用try.catch实现JS代码加密 本文分享一种奇特的JS代码加密解密方法. 技术原理 将JS代码加密,然后在try.catch错误捕捉语法中,用eval进行执行,能执行则表明解密成功,不能执行则 ...

  9. 使用JShaman进行JS代码加密时,保留字的作用

    使用JShaman进行JS代码加密时,保留字的作用 JShaman是一个在线加密JS代码的网站, 它有一个功能:字符串加密,可以把JS代码中明文的字符串加密起来,使字符串不可见. 例如: 如上图,一个 ...

  10. JS代码加密后出错?用保留字就好了。

    JS代码加密后出错?用保留字就好了 在使用JShaman对JS代码进行混淆加密时,偶尔,会遇到加密后运行出错.比如: 遇到这个问题,不必慌,很容易解决. 如上图中所示,提示的很清晰:某变量的rotat ...

最新文章

  1. java计算时间跨度_请问如何使用Java计算时间跨度并格式化输出?
  2. UAA服务基础环境搭建
  3. 解决ionic切换路由后,不继承tab路由,没有返回按钮问题
  4. React开发(283):控制文件不会被git追踪
  5. 再见 XShell 和 ITerm 2,是时候拥抱全平台高颜值终端工具 Hyper 了!
  6. 解决Ubuntu系统终端运行python文件报错“ImportError/ModuleNotFoundError:No Module named xx”
  7. 西安工程大学计算机是几本专业,西安工程大学专业介绍
  8. 深入理解OracleExadata
  9. 57、弱电网络管理入门与基础技术
  10. 液晶显示器的基本知识
  11. MII、RMII、GMII、RGMII接口详解及硬件设计注意事项
  12. 类EMD的“信号分解方法”及MATLAB实现(第一篇)——EEMD
  13. 小米电视显示服务器断开连接,小米电视投屏频繁断开的解决办法
  14. php公益培训,周日晚上听seo的课,yy88354001
  15. HTML 入门基础教程
  16. Azure China (11) 使用Azure China Storage Public Blob
  17. C++ Standard Library
  18. java1.7 apk 签名_【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用...
  19. 后端开发常见面试题目
  20. 机器学习----纯手撸线性回归代码

热门文章

  1. 如何在vue3.0项目中集成Element-plus
  2. 电工/模电/数电/电气控制/PLC/单片机综合实验装置
  3. PHP连接MySQL数据库过程
  4. asp.net入门教程
  5. 2020年上半年信息安全工程师上午选择题及解析
  6. resin服务器中间件
  7. Android Studio一键汉化,分享一个自己写的小工具
  8. html前端小技巧—div半透明设置技巧
  9. 经纬度 距离 mysql_mysql 根据经纬度计算距离并排序
  10. jdk没有jre的解决方法