gojoy參數的生成過程,反調試,以及混淆js

該文章主要提供交流學習使用,請勿利用其進行不當行爲!
如本篇文章侵犯了貴公司的隱私,請聯繫我立刻刪除!

個人博客:http://www.feastawlisao.com/
歡迎關注個人公衆號:pythonORjs

今天分享一下gojoy的登陸產生的參數是如何形成的。
這裏感謝 ttdd666 分享的參數生成過程。

好了,進入正題,這裏我們全方位進行講解。

1.這裏我們打開https://passport.gojoy.com/login,進行登陸,打開f12開發者工具,我們會看到這個。有個debugger,自動進入調試。
在這裏插入圖片描述
這裏我們在debugger處,打上斷點,右鍵選擇Edit Breakpoint ,然後輸入false,點擊下一步就行了,斷點會自動端下來。
在這裏插入圖片描述
然後我們輸入賬號密碼,開始抓包,post提交的參數如下,一串數字加字母的組合,不知道什麼東西,而且我們經常見的參數名也沒有了,這怎麼找參數呢。
在這裏插入圖片描述
不要慌,問題不大,慌也沒用撒。我們看這裏,就會發現很多js參數。這裏提醒一下,並不是所有都是這樣找的,這個只是方便點。
在這裏插入圖片描述
我們點進去第一個js。然後格式化,在此處打上斷點,如下,我們就會發現參數l,就是我們要找的參數。
在這裏插入圖片描述
但是這裏我們就是想明白,這個l已經是加密過後的參數了,那我們就得往前翻,找到沒被加密之前的事如何傳參的。我們繼續往後找。
在這裏插入圖片描述
然後發現在這裏,我們下上斷點,然後運行,會發現,post,mobile,等,看着是不是很熟悉。然後我們看到s就是我們的賬號密碼,此處,還沒有加密,那我們就執行下一步,,這裏執行下一步,我們要小心點,用心看,別執行那麼快。
在這裏插入圖片描述
大約執行10次左右,我們發現,Q函數裏面,有我們的賬號密碼。
在這裏插入圖片描述
那我們看一下,Q函數攜帶上賬號密碼,是不是我們要的結果。
在這裏插入圖片描述
此處我們進入Q函數,然後發現,我們進入的怎麼使s函數。當時我也是一陣迷茫,這是啥情況呢,然後慢慢發現,這裏有一行代碼,我們調用s函數,實際上就是Q函數。
在這裏插入圖片描述
此處我們看代碼發現,這是個大列表,,別表裏面有五六個函數,然後相互調用。那我們先把代碼摳出來。就是這個大列表,我們放入VScode裏面,因爲我們要進行調試。裏面有很多坑,需要我們進行調試。
在這裏插入圖片描述
然後我們發現,代碼裏面竟然有debugger,我敲,神了,那我們就看看代碼哪裏有debugger。
在這裏插入圖片描述
我們通過斷點發現,這就是debugger。我敲。真的是。。。。。。
在這裏插入圖片描述
既然發現了,我們得把他刪除掉,影響我們代碼運行,然後我們又發現,這是一段for循環的代碼,但是 i < 後面的東西應該是個數字,這麼一長串是什麼東西呢。
在這裏插入圖片描述
我們把後面的複製出來,然後特喵的,發現這麼一長段,竟然是個0。我就想問問他們程序員這麼無聊的嗎,無力吐槽。
在這裏插入圖片描述
那我們就把代碼刪掉,因爲裏面有debug程序,而且我們也知道結果是什麼了。
在這裏插入圖片描述
我們繼續調試。然後發現還有一個又出來一個debug,,,,,,,,,,,,和上面的一樣,替換成0就行了。

然後接着運行,然後又有一個debug,我吐吐血,我。我。我。。。。。。
在這裏插入圖片描述
這個地方刪除這個函數就行了。如下。
在這裏插入圖片描述
然後發現程序可以運行了,我們,打印一下輸出的東西。
在這裏插入圖片描述
然後就會輸出結果,這個就是生成過程,但是如果用python調用的話還是會報錯的。我們下面更改一下。
在這裏插入圖片描述
python調用js如下。
在這裏插入圖片描述
這裏我們用v8模塊運行js,會發現報錯了,我們查看一下,發現,這是錯誤拋異常的代碼,不管裏面哪個代碼錯了,都會跑出來異常。
在這裏插入圖片描述
那我們就先把try捕獲異常去掉,看看是哪個代碼報錯了。然後發現是這行代碼,那我們知道哪行代碼錯了,我們就開始進行調試。
在這裏插入圖片描述
經過調試發現,this.b就是atob,,而atob是js裏面base64的方法,atob,btoa,解碼,和編碼。具體可搜索base64.js。
在這裏插入圖片描述
這裏我們用base64.decode和encode代替一下。複製原生的js代碼。

var Base64 = {
    _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    encode: function(e) {
        var t = "";
        var n, r, i, s, o, u, a;
        var f = 0;
        e = Base64._utf8_encode(e);
        while (f < e.length) {
            n = e.charCodeAt(f++);
            r = e.charCodeAt(f++);
            i = e.charCodeAt(f++);
            s = n >> 2;
            o = (n & 3) << 4 | r >> 4;
            u = (r & 15) << 2 | i >> 6;
            a = i & 63;
            if (isNaN(r)) {
                u = a = 64
            } else if (isNaN(i)) {
                a = 64
            }
            t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
        }
        return t
    },
    decode: function(e) {
        var t = "";
        var n, r, i;
        var s, o, u, a;
        var f = 0;
        e = e.replace(/[^A-Za-z0-9+/=]/g, "");
        while (f < e.length) {
            s = this._keyStr.indexOf(e.charAt(f++));
            o = this._keyStr.indexOf(e.charAt(f++));
            u = this._keyStr.indexOf(e.charAt(f++));
            a = this._keyStr.indexOf(e.charAt(f++));
            n = s << 2 | o >> 4;
            r = (o & 15) << 4 | u >> 2;
            i = (u & 3) << 6 | a;
            t = t + String.fromCharCode(n);
            if (u != 64) {
                t = t + String.fromCharCode(r)
            }
            if (a != 64) {
                t = t + String.fromCharCode(i)
            }
        }
        t = Base64._utf8_decode(t);
        return t
    },
    _utf8_encode: function(e) {
        e = e.replace(/rn/g, "n");
        var t = "";
        for (var n = 0; n < e.length; n++) {
            var r = e.charCodeAt(n);
            if (r < 128) {
                t += String.fromCharCode(r)
            } else if (r > 127 && r < 2048) {
                t += String.fromCharCode(r >> 6 | 192);
                t += String.fromCharCode(r & 63 | 128)
            } else {
                t += String.fromCharCode(r >> 12 | 224);
                t += String.fromCharCode(r >> 6 & 63 | 128);
                t += String.fromCharCode(r & 63 | 128)
            }
        }
        return t
    },
    _utf8_decode: function(e) {
        var t = "";
        var n = 0;
        var r = c1 = c2 = 0;
        while (n < e.length) {
            r = e.charCodeAt(n);
            if (r < 128) {
                t += String.fromCharCode(r);
                n++
            } else if (r > 191 && r < 224) {
                c2 = e.charCodeAt(n + 1);
                t += String.fromCharCode((r & 31) << 6 | c2 & 63);
                n += 2
            } else {
                c2 = e.charCodeAt(n + 1);
                c3 = e.charCodeAt(n + 2);
                t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
                n += 3
            }
        }
        return t
    }
}

這裏我們修改爲…如下。

在這裏插入圖片描述

然後運行,如下。
在這裏插入圖片描述
用python調用。
在這裏插入圖片描述
今天的分享到此結束,謝謝大家閱讀此文章,下篇文章見撒!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章