网站分析:

点击网站翻页,在控制面板中可发现,数据是通过异步请求接口传入的

frida js rpc 逆向 js逆向工程_javascript

遇到加密网站,一般我们都会先试一下能不能搜出来字段值的入口。显然这个网站没有搜到(像这种单字母的值基本上排除这种办法找入口)

frida js rpc 逆向 js逆向工程_Math_02

 那么,我们就要想办法定位到其中一个加密字段所在的js文件的栈位置。根据自己的经验,我选择通过开发者工具中的initiator启动器快速定位到js发送请求的位置

frida js rpc 逆向 js逆向工程_Math_03

 如图

frida js rpc 逆向 js逆向工程_javascript_04

 然后在这个位置打上断点,点击翻页,使新一页请求的数据断到这行代码

frida js rpc 逆向 js逆向工程_node.js_05

 成功断住之后,我们就可以顺着堆栈结构往上跟。如果大家是新手的话,建议大家跟栈的时候一步一步的跟,可能跟栈会自己枯燥,但是肯定能准确定位到加密位置。经过跟栈,我定位到了加密所在js文件,因为在这里已经能看到加密值,如图

frida js rpc 逆向 js逆向工程_node.js_06

 那么,具体的加密逻辑也就差不多在这里附近。然后我就往上看代码,终于,加密位置也被成功找到

frida js rpc 逆向 js逆向工程_javascript_07

 那就基本上找到治病药方了,接下来,大致读了一下js代码逻辑,我们就可以把这三个加密字段破解出来。具体怎么破,如果你完全熟悉他的js逻辑,那你就可以写python脚本去模拟生成;那如果你不想那么麻烦,你就完全可以抠出来代码,稍加改动,让其核心加密代码能够在你的js程序中运行就行了。具体抠代码如下:

function fjm_sdk() {
    // var curUrl = '/icity/api-v2' + "/" + 'jxtzxm.app.icity.ipro.IproCmd' + "/" + 'getDisplayListByPage';
    var curUrl = "";
    // var sig = "";
    var chars = "0123456789abcdef";
    var curTime = parseInt(Math.random() * (9999 - 1000 + 1) + 1000) + "" + Date.parse(new Date());
    sig = chars.charAt(parseInt(Math.random() * (15 - 15 + 1) + 10)) + chars.charAt(curTime.length) + "" + curTime;
    var key = "";
    var keyIndex = -1;
    for (var i = 0; i < 6; i++) {
        var c = sig.charAt(keyIndex + 1);
        key += c;
        keyIndex = chars.indexOf(c);
        if (keyIndex < 0 || keyIndex >= sig.length) {
            keyIndex = i;
        }
    }
    var timestamp = parseInt(Math.random() * (9999 - 1000 + 1) + 1000) + "_" + key + "_" + Date.parse(new Date());
    var tkey = "";
    var tkeyIndex = -1;
    for (var i = 0; i < 6; i++) {
        var c = timestamp.charAt(tkeyIndex + 1);
        tkey += c;
        tkeyIndex = chars.indexOf(c);
        if (tkeyIndex < 0 || tkeyIndex >= timestamp.length) {
            tkeyIndex = i;
        }
    }
    var t = timestamp;
    //LEx.azdg.encrypt(timestamp,key);
    t = t.replace(/\+/g, "_");
    curUrl += "?s=" + sig;
    curUrl += "&t=" + t;
    curUrl += "&o=" + tkey;
    return curUrl
}
console.log(fjm_sdk())

运行js文件,就能得到加密数据,接下来就能正常获取到网站数据了

frida js rpc 逆向 js逆向工程_Math_08