jjencode&&aaencode类似js编码原理探究

CTF密码学-加解密总结 零基础学黑客,搜索公众号:白帽子左一 密码学基本简介 密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。 在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。 著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。 密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存 阅读详情

一.探究背景

以前在一次做ctf的时候,发现了类似如下的神奇编码。

゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');

当时没多想网上查了一下发现是aaencode编码后的就直接找网站解密做完了。最近在看JS混淆方面的东西,于是这种编码方式又进入了我的视线,于是稍稍研究这个东西的原理是什么。

二.编码分析过程

首先JS解释器只能识别JS代码,那么这些颜文字想要执行必定需要含有将颜文字解析成JS代码的片段。于是我找到aaencode的编码程序,如下:

function aaencode( text )
{
    var t;
    var b = [
		"(c^_^o)",
		"(゚Θ゚)",
		"((o^_^o) - (゚Θ゚))",
		"(o^_^o)",
		"(゚ー゚)",
		"((゚ー゚) + (゚Θ゚))",
		"((o^_^o) +(o^_^o))",
		"((゚ー゚) + (o^_^o))",
		"((゚ー゚) + (゚ー゚))",
		"((゚ー゚) + (゚ー゚) + (゚Θ゚))",
		"(゚Д゚) .゚ω゚ノ",
		"(゚Д゚) .゚Θ゚ノ",
		"(゚Д゚) ['c']",
		"(゚Д゚) .゚ー゚ノ",
		"(゚Д゚) .゚Д゚ノ",
		"(゚Д゚) [゚Θ゚]"
        ];
	var r = "゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); "; 
	
	if( /ひだまりスケッチ×(365|356)\s*来週も見てくださいね[!!]/.test( text ) ){
		r += "X=_=3; ";
		r += "\r\n\r\n    X / _ / X < \"来週も見てくださいね!\";\r\n\r\n";
	}
    r += "(゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);"+
        "(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] "+
        ",゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] "+
        ",゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];"+
        "(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];"+
        "(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];"+
        "(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + "+
        "((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+"+
        "((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+"+
        "((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+"+
        "((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];"+
        "(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+"+
        "((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+"+
        "((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; "+
        "(゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\\\'; "+
        "(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];"+ 
		"(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];"+//TODO
        "(゚Д゚) [゚o゚]='\\\"';"+ 
        "(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+";
    r += "(゚Д゚)[゚o゚]+ ";
    for( var i = 0; i < text.length; i++ ){
        n = text.charCodeAt( i );
        t = "(゚Д゚)[゚ε゚]+";
		if( n <= 127 ){
			t += n.toString( 8 ).replace( /[0-7]/g, function(c){ return b[ c ] + "+ "; } );
		}else{
			var m = /[0-9a-f]{4}$/.exec( "000" + n.toString(16 ) )[0];
			t += "(o゚ー゚o)+ " + m.replace( /[0-9a-f]/gi, function(c){ return b[ parseInt( c,16 ) ] + "+ "; } );
		}
        r += t;

    }
    r += "(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');";
    return r;


}

事实上这个程序就是日本人写的(“゚ω゚ノ= /`m´)ノ ~┻━┻,好可爱)。先看for循环部分吧(其他地方都是颜文字),看上去像是将输入的原程序的每个字符(基本都是可见字符<127)转为8进制字符串然后用数组b里的颜文字进行替换。
那么看看b是什么,先把编码后的扔进console执行,然后这些颜文字就有各自的值,再看看b。
在这里插入图片描述
试了一些发现就是16进制。于是编码的过程就为如果为ascii字符就根据其8进制的每个位替换为b中对应的颜文字,如字符’a’,对应的8进制为141,那么就将其替换为(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)。然后每次t在替换之前都会有个初始值(゚Д゚)[゚ε゚]+ 这个在console中看了一下值为”",那么"(゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)“这个颜文字在执行的时候值就变为”\141",这个就是字符’a’。同理else语句中的替换是unicode字符集替换成颜文字(可能是为了兼容日文)。我们来验证一下,将编码函数输入console,在t那加入一个console.log(t),然后调用编码函数,aaencode(‘alert(“Hello, JavaScript”)’)。查看console的输出。
在这里插入图片描述
确实就如上面分析的那样进行编码的,在最后运行的时候这些颜文字的值就是alert(“Hello, JavaScript”)。
总结一下:编码过程就是将原JS代码中的字符都转化为8进制或者16进制,将其替换为b中的颜文字,b中的颜文字在解码执行的时候值是0-f,理论上0-f可以表示任意字符,在其前面加\或\u就可以表示相应字符。

三.解码执行过程

那么到这里我们还有几个问题需要解决:
1.上面编码函数中的b数组那些颜文字为什么在执行的时候值会变成0-f
2.编码后的颜文字丢到浏览器就能直接执行,原程序是如何被调用执行的。

要解决这些问题要从编码程序循环部分上面的颜文字中得知了,首先解决第一个问题。
我们以分号分割上面的颜文字。

゚ω゚ノ = /`m´)ノ ~┻━┻   / /*´∇`*/ ['_'];
o = (゚ー゚) = _ = 3;
c = (゚Θ゚) = (゚ー゚) - (゚ー゚);
(゚Д゚) = (゚Θ゚) = (o ^ _ ^ o) / (o ^ _ ^ o);
(゚Д゚) = {
    ゚Θ゚: '_',
    ゚ω゚ノ: ((゚ω゚ノ == 3) + '_')[゚Θ゚],
    ゚ー゚ノ: (゚ω゚ノ + '_')[o ^ _ ^ o - (゚Θ゚)],
    ゚Д゚ノ: ((゚ー゚ == 3) + '_')[゚ー゚]
};
(゚Д゚)[゚Θ゚] = ((゚ω゚ノ == 3) + '_')[c ^ _ ^ o];
(゚Д゚)['c'] = ((゚Д゚) + '_')[(゚ー゚) + (゚ー゚) - (゚Θ゚)];
(゚Д゚)['o'] = ((゚Д゚) + '_')[゚Θ゚];
(゚o゚) = (゚Д゚)['c'] + (゚Д゚)['o'] + (゚ω゚ノ + '_')[゚Θ゚] + ((゚ω゚ノ == 3) + '_')[゚ー゚] + ((゚Д゚) + '_')[(゚ー゚) + (゚ー゚)] + ((゚ー゚ == 3) + '_')[゚Θ゚] + ((゚ー゚ == 3) + '_')[(゚ー゚) - (゚Θ゚)] + (゚Д゚)['c'] + ((゚Д゚) + '_')[(゚ー゚) + (゚ー゚)] + (゚Д゚)['o'] + ((゚ー゚ == 3) + '_')[゚Θ゚];
(゚Д゚)['_'] = (o ^ _ ^ o)[゚o゚][゚o゚];
(゚ε゚) = ((゚ー゚ == 3) + '_')[゚Θ゚] + (゚Д゚).゚Д゚ノ + ((゚Д゚) + '_')[(゚ー゚) + (゚ー゚)] + ((゚ー゚ == 3) + '_')[o ^ _ ^ o - ゚Θ゚] + ((゚ー゚ == 3) + '_')[゚Θ゚] + (゚ω゚ノ + '_')[゚Θ゚];
(゚ー゚) += (゚Θ゚);
(゚Д゚)[゚ε゚] = '\\';
(゚Д゚).゚Θ゚ノ = (゚Д゚ + ゚ー゚)[o ^ _ ^ o - (゚Θ゚)];
(o゚ー゚o) = (゚ω゚ノ + '_')[c ^ _ ^ o];
(゚Д゚)[゚o゚] = '\"';
(゚Д゚)['_']((゚Д゚)['_'](゚ε゚ + (゚Д゚)[゚o゚] + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚ー゚) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (゚Θ゚)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚ー゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚Θ゚) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚ー゚) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚Θ゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚ー゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (゚Θ゚)) + (゚Θ゚) + (゚Д゚)[゚o゚])(゚Θ゚))('_');

第一句゚ω゚ノ= /`m´)ノ ~┻━┻ //´∇`/ [’’]; #这个好像并没有什么用
第二句o=(゚ー゚) =
=3; #这里可以注意到以上两个颜文字被赋值为3
第三句c=(゚Θ゚) =(゚ー゚)-(゚ー゚);#这里减法操作,这个颜文字的值为0
第四句(゚Д゚) =(゚Θ゚)= (o_o)/ (o_o);#这里除法操作,这个颜文字的值为1
…(实际上这里通过加加减减数字都可以出来篇幅有限就不写了)
那么字符怎么出来呢。
第五句(゚Д゚)={゚Θ゚: ‘’ ,゚ω゚ノ : ((゚ω゚ノ==3) +’’) [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ ‘’)[o_o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +’’)[゚ー゚] }; #这个就厉害了。我们看看这个颜文字的值是什么。

在这里插入图片描述

这里神奇的出现字符了,实际上是利用了JS的一点特性,拿字母’a’举例。看看((゚ω゚ノ==3) +’_’) [゚Θ゚]这个值是什么。
在这里插入图片描述
首先通过表达式得出bool值false然后将其转化为字符串,再通过上面已经有的数字当索引来得到"false"中的所有字符!这里我觉得还是挺巧妙的。于是许多字符我们都可以得到了,比如“true”,“undefined”,"NaN"等。从而可以推出其他字符。

第一个问题解决了,那么第二个问题我们原程序是如何调用执行的。
看看最后一句很长的,看看值是什么。将其丢到console中之后就弹出弹窗了,说明我们的原程序已经执行了,我们看看格式xx(xx)(xx)。先看看中间一个括号是什么。
在这里插入图片描述
发现就是我们的原程序,再看看前面两个颜文字是什么。
在这里插入图片描述
竟然是函数调用,那么最后一个()就是传递的参数了,暂且不管,我们看看这个颜文字为什么是函数调用。往上看到这么一个赋值语句(゚Д゚)[’_’] = (o ^ _ ^ o)[゚o゚][゚o゚]; 那么就要看看(o ^ _ ^ o) ,[゚o゚], [゚o゚] 是什么了。
在这里插入图片描述
看到这里就基本知道是怎么回事了,JS中还有一个函数定义的方式[][“constructor”][“constructor”]
在这里插入图片描述
所以实际上最后一行颜文字就是3[“constructor”][“constructor”](alert(“Hello, JavaScript”))();通过这种方式完成了一个函数调用。那么第二个问题也解决了。

四.总结

编码程序将原JS代码中的字符都转化为8进制或者16进制,将其替换为b中的颜文字添加在解码片段之后,在解码执行的时候的值就是原程序字符串。
解码运行过程通过各种骚操作构造出[][“constructor”][“constructor”](code)()来执行原程序。
其他类似的编码方式如jjencode,jsfuck大致原理都是这样。
安全性方面仅仅是一个编码方式并没有实际的混淆作用,因为将最后的括号去掉,丢到console里执行直接能还原出原程序。
在这里插入图片描述

PS:最后再贴一个自己随便仿制的一个编码方式hhh

$$=1;$=[($+"_")[$$+!+[]+$$]+($+"_")[$$+!+[]+$$+$$+!+[]+$$]+($+"_")[$$+!+[]+$$+$$+!+[]+$$+$$]+(($$==$)+"_")[$$+!+[]+$$]+(($$==$$)+"_")[$$-!+[]]+(($$==$$)+"_")[$$]+(($$==$$)+"_")[$$+!+[]]+($+"_")[$$+!+[]+$$]+(($$==$$)+"_")[$$-!+[]]+($+"_")[$$+!+[]+$$+$$+!+[]+$$]+(($$==$$)+"_")[$$]];$$[$][$]((($$==$)+"_")[$$]+(($$==$)+"_")[$$+$$]+(($$==$$)+"_")[$$+!+[]+$$]+(($$==$$)+"_")[$$]+(($$==$$)+"_")[$$-!+[]]+"("+$$+")")("_")
CTF-加密与解密(二十一) 声明:以下CTF题均来自网上收集,在这里主要是给新手们涨涨见识,仅供参考而已。需要题目数据包的请私信或在下方留言。 41.文本加密(来源:网络) 1.关卡描述 笑脸和哭脸。 2.解题步骤 2.1打开题目,发现是一串表情符号。 2.2这是AAencode加密,也称颜文字,打开console运行一下就能得到flag。 或者在线解密: http://www.atoolbox.net/Too... 阅读详情

相关推荐

【愚公系列】2023年06月 网络安全(交通银行杯)-゚ω゚ノ= /`m´)ノ ~┻━┻ 100

AAencode编码是一种JavaScript代码加密工具,可以将JavaScript代码进行模糊化,增加代码的复杂度,从而防止代码被盗用或反编译(解密)。AAencode编码原理是通过一系列特定的算法,将JavaScript代码中的字符串、数字、函数、变量名等进行混淆,生成一段新的JavaScript代码,原代码中的一些关键信息不易被外部破解。处理过程包括对原始JavaScript代码进行解密和解析,将解密后的代码转换成AAencode编码格式,然后再将编码后的JavaScript代码进行解密和执行。

愚公智库 8729

AAEncode 实现加密和解密算法

因为要参加CTF比赛, 遇到AAEncode 加密和解密的题目,目前来说有三种解决方法。 直接通过在线解密,网站很多,百度即可,但是比赛要求离线,这个基本废了。 通过浏览器开发者工具将加密代码进行解密,可以,但是只能解密不能加密。 自己搭建Apache + PHP + ZendEngel 然后写PHP脚本来实现,我这里就是这种方法。 首先 AAEnDeCode.php 主要进行解密加密算法。 <?php $b = [ "(c^_^o)", "(゚Θ゚)", "((o^

全栈胖叔叔 4754

Decoder-JJEncode:这是JJEncoded字符串的解码器

解码器-JJEncode 这是JJEncoded字符串的解码器。 我希望这对外面的人有用。 JJEncode最初由@hasegawayosuke制造- 这是它的工作方式的详细分析: :

密码学:编码概述.

编码 (encode)和解码 (decode)是个相当广泛的话题,涉及计算机对信息处理的根本方式。最常用的编码是ASCII(美国信息交换标准代码),包含国际通用的大小写字母、数字、常见符号等,是互联网的通用语言。 另一种广为人知的编码是摩斯电码,它是一种时断时续的信号代码,是一种早期的数字化通信形式不同于只使用0和1两种状态的二进制代码,摩斯电码的代码包括如下:

网络安全领域___专研者. 2666

手把手教你用MaxEnt+ArcGIS玩转物种分布预测

本文详细介绍了如何利用MaxEnt最大熵模型与ArcGIS软件进行物种分布预测。通过实战案例,从数据收集、环境变量处理、模型参数设置到结果可视化分析,手把手教你掌握生态位模型的核心流程。结合SDM toolbox插件,可高效完成数据预处理与高级空间分析,是生态学与保护生物学研究的实用指南。

weixin_29309475的博客 560

ESP32-CAM搭建Arduino及简单使用

配置环境 方法一 文件 → 首选项 http://wechat.doit.am/package_esp8266com_index.json https://dl.espressif.com/dl/package_esp32_index.json 工具 → 开发板 → 开发板管理器 等待安装 方法二 https://github.com/espressif/arduino-esp32 Arduino安装目录下,找到hardware文件夹 建立文件夹espressif,然后在里面再建立一个esp32文件夹

Ying的博客 2万+

ctfshow-CRYPTO

ctf,crypto

m0_72898152的博客 3550

在Qt中使用EtherCAT-SOEM的初始化中,状态机卡在PreOp->Save-Op过程中,出现State=0x12, Error=0x001e错误的解决办法

1.在调试EtherCAT软件过程中,一直出现配置从站进不了Save_op状态,通过下函数检查从站状态: //使用的从站编号为1 只有1个从站 ec_slave[1].state = EC_STATE_SAFE_OP; ec_writestate(1); //设置到安全模式 ec_statecheck(1, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4); printf("Slave %d State=0x%2.2x StatusCode=0x%4

zeal_for_rov的博客 6828

基于AAEncode编码的解密经历

3. 在 ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`sojson.com*/的位置打上断点,一直单步调试,直到浏览器还原了所有的js脚本;2. 对AAEncode的原理进行了了解,github查阅了AAEncode的源代码。确定了一点,浏览器的开发者工具可以完全还原这段代码。1. 通过对sojson.com的浏览和颜符号的搜索,确定加密编码方式是AAEcode。最后解码后完全了解了脚本的功能,根据员工工号去某个业务系统查询员工的照片。这极大的引发了我们安全部门的高度重视,立马对页面进行了分析。

kissmeprettygirl的专栏 3409

保姆级教程:在Ubuntu 22.04上用Python3.10和pysoem搞定EtherCAT电机回零与位置控制

本文提供在Ubuntu 22.04上使用Python3.10和pysoem实现EtherCAT电机回零与位置控制的详细指南。涵盖环境搭建、权限配置、EtherCAT主站架构解析、CiA402协议核心机制及工业级精度控制实现,帮助开发者快速掌握Python在工业自动化中的应用。

weixin_30952535的博客 329

YOLO26优化:FPN涨点&轻量化篇 |多级特征融合金字塔(HS-FPN),助力小目标检测

高层筛选特征金字塔网络(HS-FPN),能够刷选出大小目标,增强模型表达不同尺度特征的能力,助力小目标检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 331

特殊混淆案例的还原

处理基于 javascipt-obfuscator 的混淆,还有其他混淆方式, 例如: AAEncode JJEncode JSFuck。

qq_39217312的博客 2164

Feature ‘alsa‘ was enabled, but the pre-condition ‘config.unix && !config.qnx && libs.alsa‘ failed解决

这个问题主要是Qt多媒体插件中缺少了ALSA音频库,所以我们需要自行先编译ALSA 在执行./configure的时候,配置项中ALSA为no Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux .............

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 2587

CTF-加密与解密(二十二):探索JavaScript混淆艺术

本文深入探讨CTF竞赛中的JavaScript混淆技术,重点解析AAencode和Jsfuck两种典型混淆方法。AAencode将代码转换为颜文字表情包,而Jsfuck仅用6个符号实现完整逻辑,两者均考验选手对JavaScript语言特性的理解。文章通过实战案例演示破解技巧,包括直接执行、在线工具解码和手工分析等方法,为CTF爱好者提供加密与解密的实用指南。

moss5的博客 885

【YOLO】Mask Proto分支理解

Mask Proto分支通过解耦全局原型与实例参数,在保持YOLO实时性的同时实现精准分割。其技术核心在于利用多尺度特征生成可组合的原型,结合动态系数适应不同目标形态。未来可进一步融合Transformer的注意力机制,增强对复杂场景的建模能力。

浩瀚之水的专栏 476

uniapp(全端兼容) - 最新详细实现预览pdf文件功能,uniapp安卓苹果app、H5网页、微信小程序、nvue等端打开本地或在线PDF文档进行预览,uniapp预览pdf教程(详细示例代码)

uni-app,pdf,打开预览PDF,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,uniapp预览PDF,App端 实现pdf文件预览,在app端怎么预览pdf,网页h5怎么预览pdf,pdf下载、上传和预览,H5预览pdf文件,小程序预览pdf,nvue平台怎么打开预览pdf呢,除了uni.opendocument还有什么方法打开,预览pdf的插件,pdf预览组件,uni-app实现PDF预览功能,app查看下载pdf文件,如何做pd

✅ 精选推荐文章 1万+

JJ加密解密算法

加密函数

HumorChen的博客 2122

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

BUUCTF[SUCTF2018]single dog解题方法

aaencode是一种基于JavaScript的文本加密工具。其原理主要是通过执行混淆算法,将可执行的代码转换成为ASCII字符形式的字符串,并在字符串中插入一些不可见字符、注释以及字符串操作指令指令。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 1169

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

揭秘JavaScript的奇葩加密:AAencode和Jsfuck的原理与应用场景

本文深入解析JavaScript中两种独特的加密技术AAencode和Jsfuck的工作原理与应用场景。AAencode将代码转换为颜文字形式,而Jsfuck仅用六个字符就能编写完整JavaScript代码。这些技术在CTF竞赛中广泛应用,展示了JavaScript语言特性的极限运用,为开发者提供了代码混淆的新思路。

gg901的博客 803

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Misc 数据编码

Misc 数据编码 一、神奇的进制 二进制 众所周知在计算机的脑海里只有二进制,而二进制却通过各种变化变成我们所看到的各种事物 例: 二进制转ASCLL码 二进制转morse码 二进制转二维码(绘图) 二进制转图片(hex) 什么是二进制? 二进制是世界上第一台计算机上用的算法,最古老的计算机里有一个个灯泡,当运算的时候,比如要表达“一”,第一个灯泡会亮起来。要表达“二”,则第一个灯泡熄灭,第二个灯泡就会亮起来。 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2

boygayman的博客 3983

加速乐-AAencode-ob混淆

加速乐、AAEncode、OB 混淆破解出多层响应 Cookie 逆向。

qq_35249586的博客 1090

CTF——杂项密码学

整理各类ctf中经常遇到的加密密文,与其对应的加密方式

recover517的博客 1109

BUUCTF-Misc18

是一张图片。

lin__ying的博客 1263

JUSTCTF2020 新生赛(校内)wp

JUSTCTF2020 Crypto&Misc wp Crypto 1.Crypto Sign IN 打开附件可以得到如下的颜文字 ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚

laffey的博客 3217

特殊混淆(AAEncode、JJEncode、JSFuck)还原

对于obfuscator混淆,可以利用AST进行处理,此外还有一些比较特殊的混淆方式,如AAEncode、JJEncode、JSFuck。

lizz2276的博客 722

ctf常见编码

在正式接触ctf的misc学习前,我们需要先对常见的编码有所了解例如:以上就是今天要讲的内容,本文简单介绍了常见的编码,这些编码将会在进行ctf训练时给予我们帮助。

2301_80976241的博客 2156
上一篇: (Jarvis Oj)(Pwn) fm
下一篇: 格式化字符串总结
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值