javascript加密解密全攻略

前端AES加密解密实战:解决Malformed UTF-8 data错误全攻略 AES加密是一种广泛应用的对称加密算法,其核心原理是通过相同的密钥进行数据的加密解密,确保传输过程中的机密性。在前后端分离的Web开发中,前端常使用crypto-js库进行AES加密,后端则用Java等语言解密,以实现敏感信息的安全传输。然而,跨语言环境下的编码不一致、参数错配等问题,极易导致解密后出现Malformed UTF-8 data错误,使得功能无法正常运行。本文聚焦于这一高频痛点,系统性地剖析了从密文编码、加解密参数匹配、密钥处理到数据解析的完整链路,提供了清晰的排查路径和实用的调试工具。通过 阅读详情

信息来源:《黑客防线》

本文一共介绍了七种方法:
一:最简单的加密解密
二:转义字符"/"的妙用
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码 (自创简单解码)
四:任意添加NUL空字符(十六进制00H) (自创)
五:无用内容混乱以及换行空格TAB大法
六:自写解密函数法
七:错误的利用 (自创)


  在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的javascript代码常常被别人轻易的拷贝,实在让自己的心里有点不是滋味,要知道自己写点东西也挺累的......^*^

  但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行,要想绝对的保密是不可能的,我们要做的就是尽可能的增大拷贝者复制 的难度,让他知难而退(但愿~!~),下面我结合自己这几年来的实践,及个人研究的心得,和大家一起来探讨一下网页中JAVASCRIPT代码的加密解密 技术。

  以加密下面的JAVASCRIPT代码为例:
<SCRIPT LANGUAGE="JavaScript">
alert("《黑客防线》");
</SCRIPT>

  一:最简单的加密解密

  大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码用escape()函数加密后变为如下格式:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
 

如何?还看的懂吗?当然其中的ASCII字符"alert"并没有被加密,如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
 

呵呵!如何?这次是完全都加密了!

当然,这样加密后的代码是不能直接运行的,幸好还有eval(codeString)可用,这个函数的作用就是检查JavaScript代码并执 行,必选项 codeString 参数是包含有效 JavaScript 代码的字符串值,加上上面的解码unescape(),加密后的结果如下:
<SCRIPT LANGUAGE="JavaScript">
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
</SCRIPT>
 

是不是很简单?不要高兴,解密也就同样的简单,解密代码都摆给别人啦(unescape())!呵呵

  二:转义字符"/"的妙用

  大家可能对转义字符"/"不太熟悉,但对于JavaScript提供了一些特殊字符如:/n (换行)、 /r (回车)、/' (单引号 )等应该是有所了解的吧?其实"/"后面还可以跟八进制或十六进制的数字,如字符"a"则可以表示为:"/141"或"/x61"(注意是小写字符 "x"),至于双字节字符如汉字"黑"则仅能用十六进制表示为"/u9ED1"(注意是小写字符"u"),其中字符"u"表示是双字节字符,根据这个原理 例子代码则可以表示为:

八进制转义字符串如下:
<SCRIPT LANGUAGE="JavaScript">
eval("/141/154/145/162/164/50/42/u9ED1/u5BA2/u9632/u7EBF/42/51/73")
</SCRIPT>
 


十六进制转义字符串如下:
<SCRIPT LANGUAGE="JavaScript">
eval("/x61/x6C/x65/x72/x74/x28/x22/u9ED1/u5BA2/u9632/u7EBF/x22/x29/x3B")
</SCRIPT>
 


  这次没有了解码函数,因为JavaScript执行时会自行转换,同样解码也是很简单如下:
<SCRIPT LANGUAGE="JavaScript">
alert("/x61/x6C/x65/x72/x74/x28/x22/u9ED1/u5BA2/u9632/u7EBF/x22/x29/x3B")
</SCRIPT>
 


就会弹出对话框告诉你解密后的结果!

  三:使用Microsoft出品的脚本编码器Script Encoder来进行编码

  工具的使用就不多介绍啦!我是直接使用JavaScript调用控件Scripting.Encoder完成的编码!代码如下:
<SCRIPT LANGUAGE="JavaScript">
var Senc=new ActiveXObject("Scripting.Encoder");
var code='<SCRIPT LANGUAGE="JavaScript">/r/nalert("《黑客防线》");/r/n<//SCRIPT>';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);
</SCRIPT>
 


编码后的结果如下:
<SCRIPT LANGUAGE="JScript.Encode">#@~^FgAAAA==@#@&lsDD`J黑客防线r#p@#@&FgMAAA==^#~@</SCRIPT>
 


够难看懂得吧?但相应的解密工具早已出来,而且连解密网页都有!因为其解密网页代码过多,我就不多说拉!给大家介绍一下我独创的解密代码,如下:
<SCRIPT LANGUAGE="JScript.Encode">
function decode(){
#@~^FgAAAA==@#@&lsDD`J黑客防线r#p@#@&FgMAAA==^#~@
}
alert(decode.toString());
</SCRIPT>
 


咋样?够简单吧?它是原理是:编码后的代码运行前IE会先对其进行解码,如果我们先把加密的代码放入一个自定义函数如上面的decode()中,然后对自定义函数decode调用toString()方法,得到的将是解码后的代码!

如果你觉得这样编码得到的代码LANGUAGE属性是JScript.Encode,很容易让人识破,那么还有一个几乎不为人知的window对象的方法execScript(),其原形为:
window.execScript( sExpression, sLanguage )
 

参数:
sExpression:  必选项。字符串(String)。要被执行的代码。
sLanguage :  必选项。字符串(String)。指定执行的代码的语言。默认值为 Microsoft JScript

使用时,前面的"window"可以省略不写!

利用它我们可以很好的运行编码后的JavaScript代码,如下:
<SCRIPT LANGUAGE="JavaScript">
execScript("#@~^FgAAAA==@#@&lsDD`J黑客防线r#p@#@&FgMAAA==^#~@","JScript.Encode")
</SCRIPT>
 

你可以利用方法二对其中的""号内的字符串再进行编码,使得"JScript.Encode"以及编码特征码"#@~^"不出现,效果会更好!

  四:任意添加NUL空字符(十六进制00H)

  一次偶然的实验,使我发现在HTML网页中任意位置添加任意个数的"空字符",IE照样会正常显示其中的内容,并正常执行其中的 JavaScript 代码,而添加的"空字符"我们在用一般的编辑器查看时,会显示形如空格或黑块,使得原码很难看懂,如用记事本查看则"空字符"会变成"空格",利用这个原 理加密结果如下:(其中显示的"空格"代表"空字符")
<S C RI P T L ANG U A G E =" J a v a S c r i p t ">

a l er t (" 黑 客 防 线") ;

< / SC R I P T>
 

如何?是不是显得乱七八糟的?如果不知道方法的人很难想到要去掉里面的"空字符"(00H)的!

  五:无用内容混乱以及换行空格TAB大法

  在JAVASCRIPT代码中我们可以加入大量的无用字符串或数字,以及无用代码和注释内容等等,使真正的有用代码埋没在其中,并把有用的代码 中能加入换行、空格、TAB的地方加入大量换行、空格、TAB,并可以把正常的字符串用"/"来进行换行,这样就会使得代码难以看懂!如我加密后的形式如 下:
<SCRIPT LANGUAGE="JavaScript">
"xajgxsadffgds";1234567890
625623216;var $=0;alert//@$%%&*()(&(^%^
//cctv function//
(//hhsaasajx xc
/*
asjgdsgu*/
"黑/
/
客/
防线"//ashjgfgf
/*
@#%$^&%$96667r45fggbhytjty
*/
//window
)
;"#@$#%@#432hu";212351436
</SCRIPT>
 


至少如果我看到这样的代码是不会有心思去分析它的,你哪?

  六:自写解密函数法

  这个方法和一、二差不多,只不过是自己写个函数对代码进行解密,很多VBS病毒使用这种方法对自身进行加密,来防止特征码扫描!下面是我写的一个简单的加密解密函数,

加密代码如下(详细参照文件"加密.htm"):
<SCRIPT LANGUAGE="JavaScript">
function compile(code)
{
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
}
alert(escape(c));
}
compile('alert("《黑客防线》");')
</SCRIPT>
 


运行得到加密结果为:
o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd
 


相应的加密后解密的代码如下:
<SCRIPT LANGUAGE="JavaScript">
function uncompile(code)
{
code=unescape(code);
var c=String.fromCharCode(code.charCodeAt(0)-code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)-c.charCodeAt(i-1));
}
return c;
}
eval(uncompile("o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd"));
</SCRIPT>
 


  七:错误的利用

  利用try{}catch(e){}结构对代码进行测试解密,虽然这个想法很好(呵呵,夸夸自己),因为实用性不大,我仅给个例子
<SCRIPT LANGUAGE="JavaScript">

var a='alert("《黑客防线》");';
var c="";
for(var i=0;i<a.length;i++){
c+=String.fromCharCode(a.charCodeAt(i)^61);}

alert(c);

//上面的是加密代码,当然如果真正使用这个方法时,不会把加密写上的
//现在变量c就是加密后的代码

//下面的函数t()先假设初始密码为0,解密执行,
//遇到错误则把密码加1,然后接着解密执行,直到正确运行

var d=c; //保存加密后的代码
var b=0; //假定初始密码为0
t();

function t(){
try{eval(c);}catch(e){
c="";
for(var i=0;i<d.length;i++){
c+=String.fromCharCode(d.charCodeAt(i)^b);}
b+=1;
t();
//setTimeout("t()",0);
}
}
</SCRIPT>

 
Flutter热更新实战:Shorebird从安装到发布补丁的完整流程(含iOS/Android差异解析) 本文详细介绍了Flutter热更新工具Shorebird的完整使用流程,包括安装、发布补丁及iOS/Android平台差异解析。Shorebird作为Flutter官方未提供的Code Push解决方案,能快速修复线上问题,支持合规性保障和性能优化,特别适合紧急修复场景。文章还涵盖了国内CDN加速配置和最佳实践,帮助开发者高效实现热更新。 阅读详情

相关推荐

MOSFET雪崩特性参数解析

但是,一些电源在输出短路时,初级中会产生较大的电流,加上初级电感,器件就会有雪崩损坏的可能,因此在这样的应用条件下,就要考虑器件的雪崩能量。对于那些在MOSFET的D和S极产生较大电压的尖峰应用,就要考虑器件的雪崩能量,电压的尖峰所集中的能量主要由电感和电流所决定,因此对于反激的应用,MOSFET关断时会产生较大的电压尖峰。雪崩击穿能量标定了器件可以容忍的瞬时过冲电压的安全值,其依赖于雪崩击穿需要消散的能量。EAS单脉冲雪崩击穿能量, EAS标定了器件可以安全吸收反向雪崩击穿能量的高低。

Airer_00的博客 774

javascript eval加密解密源码

javascript eval加密解密源码

大鹏的专栏 4606

sasl-0.3.1-cp310-cp310-win_amd64.whl

sasl-0.3.1-cp310-cp310-win_amd64.whl

一个完美的 JavaScript 字符串 加密解密 Demo

项目中经常会有url带参并取参数值的问题 我们通常会将参数明码通过URL传递。 如果涉及到对参数值安全性有一定的要求,那么就需要考虑对字符串加密了。 在平时项目开发中经常会用到前端加密传递参数,下面这个Demo是我修改完善后一直在使用的。 特点: 1、支持自定义密钥 2、支持中文加密 3、最重要的是随机数功能,每次加密后的字符串都不相同的,防止用户破解、篡改。 注意: 1、默认加密密钥为123...

u012773082的博客 1006

JavaScript 自写加密解密函数

JavaScript 自写加密解密函数 版权声明:本文为CSDN博主「zshsats」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/zshsats/article/details/82772597 加密函数: /** * 加密算法 * str:要加密的字符串 * key:指定加密的字符 */ fun...

@不喝海之言@ 1381

autojs之一键加密

使用场景 加密autojs 感谢群内大佬指点 @Tsing Yi @沐泠 @ProjectXero @抠脚本人 @I’m zz 等 效果展示 autojs版本 本教程大概的加密步骤 js转dex 压缩项目 切割项目, 文件名用 . 开头, 使其不可见 创建新的入口文件和project.json 混淆入口文件 以上步骤均使用autojs一键完成 不需要电脑, 除非你想要修改加密方法, 跑通本加密工程, 只需要替换你的工程名字即可, 其他的都不用动 就可以一键完成 let projectName =

snailuncle2的博客 4601

加密越来越简单——用JavaScript实现数据加密解密

本文介绍了Javascript加密算法的基本原理和常用的加密算法,包括MD5、SHA、AES等。我们可以使用第三方库,例如CryptoJS、sjcl等,来方便地实现加密功能。在实际应用中,需要根据具体的场景和需求选择合适的加密算法,并注意加密过程中的安全性和性能问题。同时,也需要综合考虑多种安全措施,以最大程度地保证数据的安全性。加密算法虽然可以起到一定的保护作用,但也不要滥用加密。过度的加密会降低系统的性能,增加维护和开发成本,也会给用户带来不便。

mxd01848的博客 3972

FileVibe全攻略(三):AES-256-CBC文件加密解密落地实战

本文深入讲解FileVibe核心加密模块的实现。针对两个核心问题——文件存盘后被直接读取、密码到AES-256密钥的安全转换,我们用AES-256-CBC加密所有文件,用SHA-256将任意长度密码转换为32字节密钥。逐行拆解了密钥生成、加密解密函数、批量加密脚本和服务器端解密调用。两个点睛之笔:一行SHA-256搞定密钥派生,一行判断让解密函数兼容密钥和密码两种输入。代码即逻辑,安全即成本。

少年负志 心向星河 以代码为笔 以技术为锋 笃行致远 静候同路 写可懂之文 做可用之技 与君共赴山海 877

asmcrypto.js核心功能解析:AES、SHA与RSA加密算法全攻略

asmcrypto.js是一个专注于性能优化的JavaScript加密库,提供了AES、SHA和RSA等主流加密算法的高效实现。无论是Web应用的数据安全保护,还是前端加密需求,asmcrypto.js都能以轻量高效的方式满足开发者的需求。 ## 一、AES加密算法:全方位对称加密解决方案 AES(Advanced Encryption Standard)作为目前应用最广泛的对称加密算法,在a

gitblog_00265的博客 409

2025最新:Node.js集成WebAssembly全攻略——从Rust到AssemblyScript的性能优化实战

你是否还在为Node.js处理CPU密集型任务时的性能瓶颈发愁?是否想让JavaScript代码获得接近原生的执行速度?本文将带你一步步掌握WebAssembly(WASM)与Node.js的集成技术,从Rust和AssemblyScript两种语言入手,通过实际案例展示如何将WASM模块无缝接入Node.js应用,解决性能痛点。 读完本文你将获得: - WebAssembly在Node.js环

gitblog_00992的博客 1139

apk解密工具_手机端操作| Auto.js一键解密/一键加密工具免费分享

? 关注『掌玩小子』 带你『体验极客』1在之前的博文中,我前后分享了Auto.js相关的加密解密的文档,如《Auto.js Pro离线打包源代码加密算法分析》《来 给你代码!Auto.js js转.class具体代码过程》,其实当前已经写了Jar包,到了今天我也终于把它们这两项工具集成到APP里面了,无需任何付费,欢迎大家使用。工具介绍:1.一键解密:A...

weixin_39581716的博客 4545

【Autojs】本地密码本2.0——加密存储&个性化设置

Autojs 写的手机本地密码本2.0,具备增删改查、加密存储、个性化设置等功能。

头发浓密的萌新的博客 883

手机端操作| Auto.js一键解密/一键加密工具免费分享

在之前的博文中,我前后分享了Auto.js相关的加密解密的文档,如《Auto.js Pro离线打包源代码加密算法分析》《来 给你代码!Auto.js js转.class具体代码过程》,其实当前已经写了Jar包,到了今天我也终于把它们这两项工具集成到APP里面了,无需任何付费,欢迎大家使用。 工具介绍: 1.一键解密:Auto.js打包后的apk,解压出来assets下的project文件夹,一键解密project下所有的js代码(批量),支持所有Auto.js版本; 2.一键加密...

7817

Auto.js 压缩 解压 加密文件

log("加密="+加密()) log("解密="+解压()) function 加密() { try { let dir = '/sdcard/脚本/模块/'; // 2.加密压缩文件夹 let encryptedZipFile = '/sdcard/项目.zip'; $files.remove(encryptedZipFile); $zip.zipDir(dir, encryptedZipFile, {

qq_25226575的博客 1982

js加密解决方案1:在AutoJS中实现Promise的必要性、好处与缺点

AutoJS的加密代码限制了我们在脚本中直接使用ES6新特性,这可能会限制脚本的灵活性和功能。AutoJS的加密代码限制了我们在脚本中直接使用ES6新特性,这可能会限制脚本的灵活性和功能。然而,它的加密代码只支持ES5语法,不支持许多ES6的新特性,如Promise等功能。这个自定义的Promise简单地模拟了ES6 Promise的功能,使我们能够在ES5环境中使用类似的异步编程方式。这样,我们可以在AutoJS中编写更加高效、清晰的自动化脚本,提高脚本的可读性和可维护性。

mxd01848的博客 915

Autojs脚本 最新加密工具 Autojs庖丁 3.2.0 去强制更新

Autojs最新加密工具 Autojs庖丁 3.2.0 写Autojs脚本的推荐加密使用此加密

qq_15948405的博客 6188

Autojs : Dex 加密混淆 ( 魔改Rhino ) ( 源码在 github,希望对大家有所帮助)

魔改 Rhino 源码 ,把 js 转 dex。autox / autojs

未将对象引用设置到对象的实例 6324

Auto.js 九宫格解锁、密码解锁

auto.js使用九宫格滑动解锁,输入密码解锁

qq_21834419的博客 5467

JavaScript加密解密7种方法!

本文一共介绍了七种JAVASCRIPT加密方法: 在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝,实在让自己的心里有点不是滋味,要知道自己写点东西也挺累的......^*^ 但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行,要想绝对的保密是不可能的,我们要做的就是尽可能的增大拷贝者复制...

929

autojs-unpacker:解锁Android AutoJS应用加密脚本

autojs-unpacker:解锁Android AutoJS应用加密脚本 项目介绍 autojs-unpacker 是一款专为 Android AutoJS 应用设计的逆向工程工具。它能够对 AutoJS 应用中的 JavaScript 文件进行解密和重新加密操作,为开发者提供了一种高效的方式来修改和调试应用脚本。 项目技术分析 autojs-unpacker 基于 Frida 框架进行开发,...

gitblog_00428的博客 1215

将js转dex工具 兼容auto.js autojs pro9将js转dex加密后调用 js加密工具

js转dex脚本加密教程

QQ2874662633的博客 2417
上一篇: 非常好的Spring中文教程(HTML)
下一篇: 用ant将java程序打包成jar
guileen
博客等级 码龄21年 7粉丝 23原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值