淘宝的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)

后续还有扫码登录淘宝的博客,

posted @ 2020-03-11 20:30  YenKoc  阅读(2910)  评论(0编辑  收藏  举报