淘寶的sign參數js逆向


前言:現在網站都有很強的反爬機制,都是非常常見的是用js前端加密參數,所以不得不去分析和逆向js混淆后的代碼
一.
打開天貓或淘寶,shift+ctrl+F12全局搜索sign參數.
在這里插入圖片描述

這里發現很多地方有出現了sign,必須一個一個的去看,發現前面的文件的assign,這個是我們所不用的,繼續向下翻找,找到我們想要的了。

在這里插入圖片描述
發現我們要找的js是內聯在前端頁面中的,點擊進去,看看是啥操作先。
二.點擊進入,打斷點,再調試
在這里插入圖片描述
這樣看js代碼不現實,包括我們在F12中,需要分析dom節點時,很多時候只要把對應的Elements頁面拉開一點,就會使得頁面舒服很多,js這里要點擊這里
在這里插入圖片描述
舒服了---------------------
在這里插入圖片描述
同時找到了sign參數,同時個人覺得逆向與正向不同的在於,正向需要寫代碼然后得出結果,而逆向則從結果,反着去看代碼,所以抱着這樣的思想開始分析
在這里插入圖片描述
開始找m

在這里插入圖片描述
這里我們基本上就知道,我們需要什么了:
1.r.token
2.n
3.o
4.s.data
5.函數Y


開始逐一的尋找信息:
1.n:
在這里插入圖片描述
說明n是時間戳,但是js中的new Date.getTime()方法,返回的是毫秒數的時間戳,而python中time.time(),返回的是以秒為單位的時間戳,當時一直調試,發現位數一直對不上,我也很郁悶,特意去查了這兩個的差別,才解決了這個問題
2.o
在這里插入圖片描述
這句其實是一個js語法里面的||的語法,我這里簡要概述一下這個語法,||是或語句,一般格式都是a||b,當a為true是,直接返回a的值,如果為假,返回b的值。那么這里可以看到o=s.appkey。那么這個s是什么呢。在這里插入圖片描述
發現是參數對象,所以那個appkey是一個定值。
3.s.data
同理,是參數對象的data字段。
4.r.token
這里沒找到,有關於r.token的信息,那我們來打一下斷點。刷新一下,這里發現並沒有斷下,這種情況其實這幾天我都有遇到,在看完別人的博客,我才意識到很有可能是js代碼進行了判定,如果參數已經生成了,是不會再執行一遍重復的生成參數的代碼的,那么我們把緩存一清,讓它重新生成,清完緩存,再刷新一下。這里是真的 坑。上面打斷點停住了,這兩天就是停不下來。。。只能口述了
就是將停下來的位置,將鼠標移上去。后面會顯示token的值,后再全局搜索,發現是m_h5_tk的值
5.Y函數同4點一樣,我是打斷點找的,不過也可以直接搜索,函數就在一個js里面
這里有點關鍵的是,加密的函數很復雜,這里有兩種方式,一種是將加密的算法逆向復現出來,另一種是直接調用,第一種反正我現階段做不到,智能直接調用了,因為我用的是python,所以百度了好幾個python是否能運行js的代碼呢?
發現有好幾個庫,python🐮。
在這里插入圖片描述

所以命令行安裝了個js2py這個庫,這個庫不需要再安裝node的環境,比較香,可惜的是,無法在源碼上寫很長的js代碼,否則會報錯,一般是用一個js文件來保存,之后將其保存到變量里面,完美解決
在這里插入圖片描述
下面是那個js文件的內容。

function Y(aV) {
                    function aU(d, c) {
                        return d << c | d >>> 32 - c
                    }
                    function aT(i, h) {
                        var n, m, l, k, j;
                        return l = 2147483648 & i,
                        k = 2147483648 & h,
                        n = 1073741824 & i,
                        m = 1073741824 & h,
                        j = (1073741823 & i) + (1073741823 & h),
                        n & m ? 2147483648 ^ j ^ l ^ k : n | m ? 1073741824 & j ? 3221225472 ^ j ^ l ^ k : 1073741824 ^ j ^ l ^ k : j ^ l ^ k
                    }
                    function aS(e, d, f) {
                        return e & d | ~e & f
                    }
                    function aR(e, d, f) {
                        return e & f | d & ~f
                    }
                    function aQ(e, d, f) {
                        return e ^ d ^ f
                    }
                    function aP(e, d, f) {
                        return d ^ (e | ~f)
                    }
                    function aO(b, n, m, l, k, d, c) {
                        return b = aT(b, aT(aT(aS(n, m, l), k), c)),
                        aT(aU(b, d), n)
                    }
                    function aN(b, n, m, l, k, e, c) {
                        return b = aT(b, aT(aT(aR(n, m, l), k), c)),
                        aT(aU(b, e), n)
                    }
                    function aM(b, n, m, l, k, f, c) {
                        return b = aT(b, aT(aT(aQ(n, m, l), k), c)),
                        aT(aU(b, f), n)
                    }
                    function aL(b, n, m, l, k, g, c) {
                        return b = aT(b, aT(aT(aP(n, m, l), k), c)),
                        aT(aU(b, g), n)
                    }
                    function aK(r) {
                        for (var q, p = r.length, o = p + 8, n = (o - o % 64) / 64, m = 16 * (n + 1), l = new Array(m - 1), k = 0, j = 0; p > j; ) {
                            q = (j - j % 4) / 4,
                            k = j % 4 * 8,
                            l[q] = l[q] | r.charCodeAt(j) << k,
                            j++
                        }
                        return q = (j - j % 4) / 4,
                        k = j % 4 * 8,
                        l[q] = l[q] | 128 << k,
                        l[m - 2] = p << 3,
                        l[m - 1] = p >>> 29,
                        l
                    }
                    function aJ(g) {
                        var f, j, i = "", h = "";
                        for (j = 0; 3 >= j; j++) {
                            f = g >>> 8 * j & 255,
                            h = "0" + f.toString(16),
                            i += h.substr(h.length - 2, 2)
                        }
                        return i
                    }
                    function aI(f) {
                        f = f.replace(/\r\n/g, "\n");
                        for (var e = "", h = 0; h < f.length; h++) {
                            var g = f.charCodeAt(h);
                            128 > g ? e += String.fromCharCode(g) : g > 127 && 2048 > g ? (e += String.fromCharCode(g >> 6 | 192),
                            e += String.fromCharCode(63 & g | 128)) : (e += String.fromCharCode(g >> 12 | 224),
                            e += String.fromCharCode(g >> 6 & 63 | 128),
                            e += String.fromCharCode(63 & g | 128))
                        }
                        return e
                    }
                    var aH, aG, aF, aE, aD, aC, aB, aA, az, ay = [], ax = 7, aw = 12, av = 17, au = 22, at = 5, ar = 9, aq = 14, ap = 20, ao = 4, an = 11, am = 16, al = 23, ak = 6, aj = 10, ai = 15, ah = 21;
                    for (aV = aI(aV),
                    ay = aK(aV),
                    aC = 1732584193,
                    aB = 4023233417,
                    aA = 2562383102,
                    az = 271733878,
                    aH = 0; aH < ay.length; aH += 16) {
                        aG = aC,
                        aF = aB,
                        aE = aA,
                        aD = az,
                        aC = aO(aC, aB, aA, az, ay[aH + 0], ax, 3614090360),
                        az = aO(az, aC, aB, aA, ay[aH + 1], aw, 3905402710),
                        aA = aO(aA, az, aC, aB, ay[aH + 2], av, 606105819),
                        aB = aO(aB, aA, az, aC, ay[aH + 3], au, 3250441966),
                        aC = aO(aC, aB, aA, az, ay[aH + 4], ax, 4118548399),
                        az = aO(az, aC, aB, aA, ay[aH + 5], aw, 1200080426),
                        aA = aO(aA, az, aC, aB, ay[aH + 6], av, 2821735955),
                        aB = aO(aB, aA, az, aC, ay[aH + 7], au, 4249261313),
                        aC = aO(aC, aB, aA, az, ay[aH + 8], ax, 1770035416),
                        az = aO(az, aC, aB, aA, ay[aH + 9], aw, 2336552879),
                        aA = aO(aA, az, aC, aB, ay[aH + 10], av, 4294925233),
                        aB = aO(aB, aA, az, aC, ay[aH + 11], au, 2304563134),
                        aC = aO(aC, aB, aA, az, ay[aH + 12], ax, 1804603682),
                        az = aO(az, aC, aB, aA, ay[aH + 13], aw, 4254626195),
                        aA = aO(aA, az, aC, aB, ay[aH + 14], av, 2792965006),
                        aB = aO(aB, aA, az, aC, ay[aH + 15], au, 1236535329),
                        aC = aN(aC, aB, aA, az, ay[aH + 1], at, 4129170786),
                        az = aN(az, aC, aB, aA, ay[aH + 6], ar, 3225465664),
                        aA = aN(aA, az, aC, aB, ay[aH + 11], aq, 643717713),
                        aB = aN(aB, aA, az, aC, ay[aH + 0], ap, 3921069994),
                        aC = aN(aC, aB, aA, az, ay[aH + 5], at, 3593408605),
                        az = aN(az, aC, aB, aA, ay[aH + 10], ar, 38016083),
                        aA = aN(aA, az, aC, aB, ay[aH + 15], aq, 3634488961),
                        aB = aN(aB, aA, az, aC, ay[aH + 4], ap, 3889429448),
                        aC = aN(aC, aB, aA, az, ay[aH + 9], at, 568446438),
                        az = aN(az, aC, aB, aA, ay[aH + 14], ar, 3275163606),
                        aA = aN(aA, az, aC, aB, ay[aH + 3], aq, 4107603335),
                        aB = aN(aB, aA, az, aC, ay[aH + 8], ap, 1163531501),
                        aC = aN(aC, aB, aA, az, ay[aH + 13], at, 2850285829),
                        az = aN(az, aC, aB, aA, ay[aH + 2], ar, 4243563512),
                        aA = aN(aA, az, aC, aB, ay[aH + 7], aq, 1735328473),
                        aB = aN(aB, aA, az, aC, ay[aH + 12], ap, 2368359562),
                        aC = aM(aC, aB, aA, az, ay[aH + 5], ao, 4294588738),
                        az = aM(az, aC, aB, aA, ay[aH + 8], an, 2272392833),
                        aA = aM(aA, az, aC, aB, ay[aH + 11], am, 1839030562),
                        aB = aM(aB, aA, az, aC, ay[aH + 14], al, 4259657740),
                        aC = aM(aC, aB, aA, az, ay[aH + 1], ao, 2763975236),
                        az = aM(az, aC, aB, aA, ay[aH + 4], an, 1272893353),
                        aA = aM(aA, az, aC, aB, ay[aH + 7], am, 4139469664),
                        aB = aM(aB, aA, az, aC, ay[aH + 10], al, 3200236656),
                        aC = aM(aC, aB, aA, az, ay[aH + 13], ao, 681279174),
                        az = aM(az, aC, aB, aA, ay[aH + 0], an, 3936430074),
                        aA = aM(aA, az, aC, aB, ay[aH + 3], am, 3572445317),
                        aB = aM(aB, aA, az, aC, ay[aH + 6], al, 76029189),
                        aC = aM(aC, aB, aA, az, ay[aH + 9], ao, 3654602809),
                        az = aM(az, aC, aB, aA, ay[aH + 12], an, 3873151461),
                        aA = aM(aA, az, aC, aB, ay[aH + 15], am, 530742520),
                        aB = aM(aB, aA, az, aC, ay[aH + 2], al, 3299628645),
                        aC = aL(aC, aB, aA, az, ay[aH + 0], ak, 4096336452),
                        az = aL(az, aC, aB, aA, ay[aH + 7], aj, 1126891415),
                        aA = aL(aA, az, aC, aB, ay[aH + 14], ai, 2878612391),
                        aB = aL(aB, aA, az, aC, ay[aH + 5], ah, 4237533241),
                        aC = aL(aC, aB, aA, az, ay[aH + 12], ak, 1700485571),
                        az = aL(az, aC, aB, aA, ay[aH + 3], aj, 2399980690),
                        aA = aL(aA, az, aC, aB, ay[aH + 10], ai, 4293915773),
                        aB = aL(aB, aA, az, aC, ay[aH + 1], ah, 2240044497),
                        aC = aL(aC, aB, aA, az, ay[aH + 8], ak, 1873313359),
                        az = aL(az, aC, aB, aA, ay[aH + 15], aj, 4264355552),
                        aA = aL(aA, az, aC, aB, ay[aH + 6], ai, 2734768916),
                        aB = aL(aB, aA, az, aC, ay[aH + 13], ah, 1309151649),
                        aC = aL(aC, aB, aA, az, ay[aH + 4], ak, 4149444226),
                        az = aL(az, aC, aB, aA, ay[aH + 11], aj, 3174756917),
                        aA = aL(aA, az, aC, aB, ay[aH + 2], ai, 718787259),
                        aB = aL(aB, aA, az, aC, ay[aH + 9], ah, 3951481745),
                        aC = aT(aC, aG),
                        aB = aT(aB, aF),
                        aA = aT(aA, aE),
                        az = aT(az, aD)
                    }
                    var ag = aJ(aC) + aJ(aB) + aJ(aA) + aJ(az);
                    return ag.toLowerCase()
                }

三.總結

sign=加密函數(_m_h5_tk+"&"+t+"&"+appkey+"&"+data)

后續還有掃碼登錄淘寶的博客,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM