【2020-12-16】JS逆向之某变IP


前言

目标网站:aHR0cHM6Ly93d3cuYmFpYmlhbmlwLmNvbS9ob21lL2ZyZWUuaHRtbA==
加密类型:JS混淆(packed类)
JS混淆学习地址:https://blog.csdn.net/qq_26079939/article/details/109484631


一、页面分析

1.要获取IP信息,发现存在加密

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
在这里插入图片描述

二、破解加密函数

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.函数校验

可以看出是一样的哦~
在这里插入图片描述

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_26079939/article/details/111296845