jjencode|JS混淆手工解析编码过程以及自定义混淆变体改装

2020-02-13

此前发布过关于aaencode的混淆编码,此篇文章继续说同作者的jjencode混淆编码的具体过程。

介绍

首先是jjencode的作者提供的编码测试页:http://utf-8.jp/public/jjenco...

可以将任何合法的JavaScript代码进行编码,首先我们可以简单测试将以下代码进行编码。

编码前:

alert("Hello, JavaScript" )

编码后:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();

可见,编码后的JS也是很有意思,仅由符号组成的JS代码。

混淆过程

通过源代码,我们可以看到具体将JS进行编码的函数过程,如下所示:

function jjencode( gv, text )
{
    var r="";
    var n;
    var t;
    var b=[ "___", "__$", "_$_", "_$$", "$__", "$_$", "$$_", "$$$", "$___", "$__$", "$_$_", "$_$$", "$$__", "$$_$", "$$$_", "$$$$", ];
    var s = "";
    for( var i = 0; i < text.length; i++ ){
        n = text.charCodeAt( i );
        if( n == 0x22 || n == 0x5c ){
            s += "\\\\\\" + text.charAt( i ).toString(16);
        }else if( (0x21 
<p>使用方式即是:</p>

jjencode( '$', 'alert("Hello, JavaScript" )' )

<p>参数1,就类似于混淆代码中的一个全局变量,参数2就是具体要进行混淆的原JS代码。</p>
<h1>代码解析</h1>
<p>接下来我们将这段JS函数进行解析,将混淆后的代码进行阅读,以便更好的理解其编码的思路。</p>
<h1>对比混淆</h1>
<p>首先编码一个“空文本代码”混淆后的代码,以及一个JS仅有字符“a”混淆后的代码,并将其格式化对比查看。</p>
<p>左边是由空字符构成的混淆后代码,右边是由字符a构成的混淆后代码。</p>
<p>由此我们基本可以看出其中多出来的部分就是具体我们原本的JS代码。<br><span class="img-wrap">

![](https://segmentfault.com/img/remote/1460000021738412)

</span></br></p>
<p>为了测试,我们此次混淆一段代码并将其执行,如下:<br><span class="img-wrap">

![](https://segmentfault.com/img/remote/1460000021738410)

</span></br></p>
<p>其实际就是:</p>

console.log("tokyo") ```

待更新。

原文链接:segmentfault.com

上一篇:教你一步步封装vue组件并发布到npm
下一篇:2019年底前端面试及答案-html/css
相关教程
关注微信

扫码加入 JavaScript 社区

相关文章

首次访问,需要验证
微信扫码,关注即可
(仅需验证一次)

欢迎加入 JavaScript 社区

号内回复关键字:

回到顶部