某段x16进制和unicode加密与混淆js代码的解密与反加密
某天,在⿎捣⼀个ems系统,想⽤来做成新闻资讯类⽹站。弄了好多天,各个框架和结构都差不多了,重新调整了结构,⼀个偶然的机会,发现搜索框点击的时候不能⾃动清空
先前的内容,于是想添加⼀段js代码去修改,了半天,没有看到⼀个类似main.js的⽹站通⽤js代码,倒是发现⼀个奇怪的js⽂件,并且是加密的,这肯定引起了我的兴趣哈。
看看这段代码。
1. var _0xe2a1=
["\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x61\x63\x74\x69\x76\x65","\x69\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6C\x69","\x67\x65\x74\x45 ThinkOver(_0x31c5x2,_0x31c5x3){if(_0x31c5x2[_0xe2a1[0]]==_0xe2a1[1]){return ;} ;var _0x31c5x4=_0x31c5x2[_0xe2a1[3]][_0xe2a1[2]];var
_0x31c5x5=document[_0xe2a1[6]](_0x31c5x4)[_0xe2a1[5]](_0xe2a1[4]);for(i=0;i<_0x31c5x5[_0xe2a1[7]];i++){if(i==_0x31c5x3)
{_0x31c5x2[_0xe2a1[0]]=_0xe2a1[1];document[_0xe2a1[6]](_0x31c5x4+_0xe2a1[10]+i)[_0xe2a1[9]][_0xe2a1[8]]=_0xe2a1[11];} else {_0x31c5x5[i]
[_0xe2a1[0]]=_0xe2a1[12];document[_0xe2a1[6]](_0x31c5x4+_0xe2a1[10]+i)[_0xe2a1[9]][_0xe2a1[8]]=_0xe2a1[13];} ;} ;} ;function b(){h=$(window)
[_0xe2a1[14]]();t=$(document)[_0xe2a1[15]]();if(t>h){$(_0xe2a1[17])[_0xe2a1[16]]();} else {$(_0xe2a1[17])[_0xe2a1[18]]();} ;} ;$(document)
[_0xe2a1[26]](function (_0x31c5x7){b();$(_0xe2a1[17])[_0xe2a1[19]](function (){$(document)[_0xe2a1[15]](0);} );$(_0xe2a1[25])[_0xe2a1[24]]
(function (){$(this)[_0xe2a1[21]](_0xe2a1[2],_0xe2a1[20]);$(_0xe2a1[22])[_0xe2a1[16]]();} ,function (){$(this)[_0xe2a1[21]]
(_0xe2a1[2],_0xe2a1[23]);$(_0xe2a1[22])[_0xe2a1[18]]();} );} );$(window)[_0xe2a1[27]](function (_0x31c5x7){b();} );
⼀个js代码的解密并不难,难得是搞明⽩这些乱七⼋糟的是什么加密,难的是对那些进⾏了代码混淆使得可读性极差的代码的整理与翻译!
很明显,上⾯这个代码进⾏了混淆!0xe2a1这类变量名搞得像蓝屏代码错误号,吓死⼈,⼀般⼈没认真看还真搞不明⽩这是些什么东西。
⾸先我们搜索“_0xe2a1”,可以发现存在46个这种变量。
我们将其命名为strone,全部替换之。_0x31c5x2,_0x31c5x3,_0x31c5x4,_0x31c5x5,_0x31c5x6,_0x31c5x7全是这些变量,可以跟随个⼈喜欢,换成喜欢的
变量名。下⾯的就是混淆,使得不容易阅读代码。
_0xe2a1的值才是加密的重点。有经验的程序员应当⼀眼就可以看出,这是我标题⾥⾯所说的Javascript \x 16进制加密。这个解密⾮常简单,⽹上⽅法很多,直接⽤
document.write就可以写出明⽂。代码如下。
1. var _0xc828=
["\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x61\x63\x74\x69\x76\x65","\x69\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6C\x69","\x67\x65\x74\x45
2. for(i=0;i<_0xc828.length;i++){
3. document.write(i+"="+_0xc828[i]+"");
4. }
把上⾯的代码放在html的<script></script>之间运⾏就可以解密了,解密结果如下
1. 0=className1=active2=id3=parentNode4=li5=getElementsByTagName6=getElementById7=length8=display9=style10=C11=block12=normal13=none14=height15=scrollTo
该模板尚未授权此站使⽤,请购买授权34=href
解密后明码如下
1. var _0xe2a1 = ["className", "active", "id", "parentNode", "li", "getElementsByTagName", "getElementById", "length", "display", "style", "C", "block",
"normal", "none", "height", "scrollTop", "show", "#gotop", "hide", "click", "code_hover", "attr", "#code_img", "code", "hover", "#code", "ready", "scroll",
"domain", "maiseed", "indexOf", "127.0.0.1", "localhost", "买种⼦就上百蔬⽹", "href", "www.maiseed"];
2.
3. function ThinkOver(_0x31c5x2, _0x31c5x3) {
4. if (_0x31c5x2[_0xe2a1[0]] == _0xe2a1[1]) {
5. return;
6. };
7. var _0x31c5x4 = _0x31c5x2[_0xe2a1[3]][_0xe2a1[2]];
8. var _0x31c5x5 = document[_0xe2a1[6]](_0x31c5x4)[_0xe2a1[5]](_0xe2a1[4]);
9. for (i = 0; i < _0x31c5x5[_0xe2a1[7]]; i++) { if (i == _0x31c5x3) { _0x31c5x2[_0xe2a1[0]] = _0xe2a1[1]; document[_0xe2a1[6]](_0x31c5x4 +
_0xe2a1[10] + i)[_0xe2a1[9]][_0xe2a1[8]] = _0xe2a1[11]; } else { _0x31c5x5[i][_0xe2a1[0]] = _0xe2a1[12]; document[_0xe2a1[6]](_0x31c5x4 +
_0xe2a1[10] + i)[_0xe2a1[9]][_0xe2a1[8]] = _0xe2a1[13]; }; }; }; function b() { h = $(window)[_0xe2a1[14]](); t = $(document)[_0xe2a1[15]](); if (t > h)
{
10. $(_0xe2a1[17])[_0xe2a1[16]]();
11. } else {
12. $(_0xe2a1[17])[_0xe2a1[18]]();
13. };
14. };
15. $(document)[_0xe2a1[26]](function(_0x31c5x7) {
16. b();
17. $(_0xe2a1[17])[_0xe2a1[19]](function() {
18. $(document)[_0xe2a1[15]](0);
19. });
20. $(_0xe2a1[25])[_0xe2a1[24]](function() {
21. $(this)[_0xe2a1[21]](_0xe2a1[2], _0xe2a1[20]);
22. $(_0xe2a1[22])[_0xe2a1[16]]();
23. }, function() {
24. $(this)[_0xe2a1[21]](_0xe2a1[2], _0xe2a1[23]);
25. $(_0xe2a1[22])[_0xe2a1[18]]();
26. });
27. });
28. $(window)[_0xe2a1[27]](function(_0x31c5x7) {
js代码加密软件29. b();
30. });
这个解密和上⾯的html解密⼀样。”你js真的很diaome?来试试,⼤⽓哦”,不同的是他将那些原来链接
到⼀起,堆砌成⼀句话的js代码进⾏了结构整理,使得结构清晰,很容易看懂,但是如果使⽤您⾃⼰的代码混淆,你也看不出来吧?
可以看到解密出来的结果中有⽹址和提⽰,因为他涉及到⼀些⽹站需要的js切换代码,所以不能完全删除这个js⽂件,如果我们把这些内容替换成我们⾃⼰的内容,再加密放回去,会不会很爽?
就像前⾯说的,搞明⽩了是什么加密,就可以进⾏加密与反加密。
仔细查看_0xe2a1变量,会发现他是由很多双引号括起来的多个值的⼀个字串,熟悉的知道这是\x 16进制加密,他的加解密代码如下
1. <script type="text/javascript">// <![CDATA[
2. function JavaDe(){
3. var monyer = new Array();
4. var s = ElementById('code').value.split("\\");
5. for (i = 1; i < s.length; i++){
6. s[i] = s[i].replace('x', '');
7. monyer += String.fromCharCode(parseInt(s[i], 16))
8. }
9. ElementById('code').value = monyer;
10. }
11. function JavaEn(){
12. var ElementById("code");
13. var ElementById("true");
14. var monyer = new Array();var i,s;
15. for(i=0;i<txt.value.length;i++){ s=txt.value.charCodeAt(i).toString(16); if(hex.checked){ monyer+="\\x"+s; }else{ monyer+=new Array(5-
String(s).length).join("0")+s; } } txt.value=monyer; }
16. // ]]></script><textarea id="code" cols="50" rows="10">\x65\x76\x61\x6c</textarea><input id="true" checked="checked" type="checkbox" />是否启⽤
\x加密 <input type="button" value="16进制解密"\x"" /><input type="button" value="16进制加密" />
这段代码猛看上去⼤部分都是\x 16进制加密,其实在⾥⾯明显还有⼀段代码他是不同的。
1. \u8BE5\u6A21\u677F\u5C1A\u672A\u6388\u6743\u6B64\u7AD9\u4F7F\u7528\x2C\u8BF7\u8D2D\u4E70\u6388\u6743
换成⾃⼰想要的东东,替换回去,就可以弄成我们想要的效果了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论