【2020-12-16】JS逆向之某变IP
作者:互联网
文章目录
前言
目标网站:aHR0cHM6Ly93d3cuYmFpYmlhbmlwLmNvbS9ob21lL2ZyZWUuaHRtbA==
加密类型:JS混淆(packed类)
JS混淆学习地址:https://blog.csdn.net/qq_26079939/article/details/109484631
一、页面分析
1.要获取IP信息,发现存在加密
二、破解加密函数
1.加密函数搜索
全局搜索FFstereophonic
找到后发现嵌套了一个函数ddip
,继续搜索ddip
很熟悉的一个JS混淆,直接用JS混淆学习地址的工具进行转换,出来下面的东西,发现还少了几个函数,继续寻找
function ddip(e0) {
e1 = r13(e0.toString());
e2 = $.base64.decode(e1);
e3 = e2.toString().substr(10);
l3 = e3.length;
e4 = e3.substr(0, l3 - 10);
return e4
}
又找到一个混淆的代码,继续转换
出来下面的代码,基本上是可以用了
function r3(str) {
var newarr = [];
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) < 65 || str.charCodeAt(i) > 90) {
newarr.push(str.charAt(i))
} else if (str.charCodeAt(i) > 77) {
newarr.push(String.fromCharCode(str.charCodeAt(i) - 13))
} else {
newarr.push(String.fromCharCode(str.charCodeAt(i) + 13))
}
}
return newarr.join("")
}
function rot(t, u, v) {
return String.fromCharCode(((t - u + v) % (v * 2)) + u)
}
function r13(s) {
var b = [], c, i = s.length, a = 'a'.charCodeAt(), z = a + 26, A = 'A'.charCodeAt(), Z = A + 26;
while (i--) {
c = s.charCodeAt(i);
if (c >= a && c < z) {
b[i] = rot(c, a, 13)
} else if (c >= A && c < Z) {
b[i] = rot(c, A, 13)
} else {
b[i] = s.charAt(i)
}
}
return b.join('')
}
function rot5(s) {
var b = [], c, i = s.length, a = '0'.charCodeAt(), z = a + 10;
while (i--) {
c = s.charCodeAt(i);
if (c >= a && c < z) {
b[i] = rot(c, a, 5)
} else {
b[i] = s.charAt(i)
}
}
return b.join('')
}
function rot135(s) {
return rot13(rot5(s))
}
但是还有一个地方,就是主函数里的 e2 = $.base64.decode(e1);
,是一个base64加密,可以直接用JS自带的atob函数
2.破解函数
最终形成的加密函数如下:
var atob = require('atob');
function rot(t, u, v) {
return String.fromCharCode(((t - u + v) % (v * 2)) + u)
}
function r13(s) {
var b = [], c, i = s.length, a = 'a'.charCodeAt(), z = a + 26, A = 'A'.charCodeAt(), Z = A + 26;
while (i--) {
c = s.charCodeAt(i);
if (c >= a && c < z) {
b[i] = rot(c, a, 13)
} else if (c >= A && c < Z) {
b[i] = rot(c, A, 13)
} else {
b[i] = s.charAt(i)
}
}
return b.join('')
}
function ddip(e0) {
e1 = r13(e0.toString());
// e2 = $.base64.decode(e1);
e2 = atob(e1);
e3 = e2.toString().substr(10);
l3 = e3.length;
e4 = e3.substr(0, l3 - 10);
return e4
}
console.log(ddip('ZGH5BQR2ZQLjBQR2AF4lZwHhZmLhAwxkAwRjZGZ4BGD0'))
3.函数校验
可以看出是一样的哦~
标签:function,12,return,str,16,IP,charCodeAt,加密,函数 来源: https://blog.csdn.net/qq_26079939/article/details/111296845