美文网首页
Chrome断点JS寻找淘宝签名sign

Chrome断点JS寻找淘宝签名sign

作者: 程序里的小仙女 | 来源:发表于2020-10-31 02:34 被阅读0次

    学习自:https://blog.csdn.net/weixin_36842174/article/details/91359169
    Chrome断点JS寻找淘宝签名sign
    _m_h5_tk_enc
    https://cloud.tencent.com/developer/article/1379830
    sign生成公式是:

     d.token + "&" + i + "&" + g + "&" + c.data
    < "59e8d998ee8b36a04b6e9d8037ac22b7&1545409677267&12574478&{"q":"鞋架","sst":"1","n":20,"buying":"buyitnow","m":"api4h5","token4h5":"","abtest":"15","wlsort":"15","page":1}"
    
    

    参数:
    _m_h5_tk_enc:


    在线hash字符串加密 http://www.ab173.com/enc/hash.php

    刚好和浏览器中的sign参数相等:



    接下来的就比较简单了,i很明显就是时间戳,g是定值:12574478,那么data是
    写了这篇文章淘宝sign加密算法 之后,很多人问我Chrome断点调试怎么做,今天会尽量详细聊聊。如果你用使用过Pycharm的断点,会更好理解。

    文章中图片很多,如果看不清楚,可以在阅读原文中打开看我的博客。
    我们还是以淘宝为例,使用Chrome的移动请求头打开这个网站,https://s.m.taobao.com/h5?q=%E9%9E%8B%E6%9E%B6,然后打开开发者工具。

    可以看到数据都在这里:

    curl 'https://acs.m.taobao.com/h5/mtop.taobao.wsearch.h5search/1.0/?jsv=2.3.16&appKey=12574478&t=1545389573843&sign=b7d69692d1cc16adec65502f0bac2018&api=mtop.taobao.wsearch.h5search&v=1.0&H5Request=true&ecode=1&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=%7B%22q%22%3A%22%E9%9E%8B%E6%9E%B6%22%2C%22sst%22%3A%221%22%2C%22n%22%3A20%2C%22buying%22%3A%22buyitnow%22%2C%22m%22%3A%22api4h5%22%2C%22token4h5%22%3A%22%22%2C%22abtest%22%3A%2214%22%2C%22wlsort%22%3A%2214%22%2C%22page%22%3A1%7D' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: zh-CN,zh;q=0.9' -H 'user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' -H 'accept: */*' -H 'referer: https://s.m.taobao.com/h5?q=%E9%9E%8B%E6%9E%B6' -H 'authority: acs.m.taobao.com' -H 'cookie: _m_h5_tk=2d819f0b9e7ed54e22c296a4d0a2ad24_1545397060981; _m_h5_tk_enc=1337c23b9d98086e735af8c00bdeeea1; t=6b9cfdffa68f4d6ea189913d5288bde7; cna=vbOjFJRUeAYCAd3aK4xZQfic; l=aBVCFdFpyHMPonDmBMaOIX41pVt4SOZzuUwM1MazniYktO-39Z2vPjYb-VwWK_qC5B7y_jt5F; isg=BC8v8gXjr7rLXauG9FFT5HkjvkUz3onQo3vs1UG8yx6lkE-SSaQTRi1BFoau6Ftu' --compressed
    

    重要参数是这些,简单看看,很多都是固定值,可能会变的有时间戳、data中的搜索关键词、页码等信息。重要的就是sign是怎么来的。
    下面开始一步步介绍。

    首先搜索sign数值,看看在其他地方时候是否出现过

    接着搜索方法名。选择一个冷门的变量名可能会有帮助,如下图,一个个地点进去看看,搜索sign,看是否有匹配。

    最终确定关键代码在第二个,也就是https://g.alicdn.com/mtb/lib-mtop/2.3.16/mtop.js

    格式化代码,并搜索sign,确定代码位置。

    直接贴出来

       if (d.H5Request === !0) {
                var f = "//" + (d.prefix ? d.prefix + "." : "") + (d.subDomain ? d.subDomain + "." : "") + d.mainDomain + "/h5/" + c.api.toLowerCase() + "/" + c.v.toLowerCase() + "/"
                  , g = c.appKey || ("waptest" === d.subDomain ? "4272" : "12574478")
                  , i = (new Date).getTime()
                  , j = h(d.token + "&" + i + "&" + g + "&" + c.data)
                  , k = {
                    jsv: x,
                    appKey: g,
                    t: i,
                    sign: j
                }
                  , l = {
                    data: c.data,
                    ua: c.ua
                };
            ///
            }
    

    可以看到sign等于j,j等于h(d.token + "&" + i + "&" + g + "&" + c.data),感觉是一些字符串通过“&”连接起来,下一步就可以对js代码打断点去看看具体数据是什么。如下图位置。
    此时我们再次刷新网页,稍等片刻。会出现各个变量的信息
    我们把鼠标放到变量的位置就可以看到相关信息。我们关注的是如下参数:

    • d.token
    • i
    • g
    • c.data

    获取d.token

    我们一一来看这些是什么。我这里的token是c2b90ff4dd1405aa02fda3b5a2ee72c0,先去搜索下,发现在请求网页时返回的。可是这里是Request Cookies。
    我们清空缓存,再来。发现第一次token是空的
    继续往下走,直到在Network中看到请求发出去了
    直接复制Curl在命令行,结果是:

    mtopjsonp1({"api":"mtop.taobao.wsearch.h5search","data":{},"ret":["FAIL_SYS_TOKEN_EMPTY::令牌为空"],"v":"1.0"})
    

    我们接着往下走,发现终于有返回的Cookies了,而且对比发现下个请求使用的就是这里的Cookies,token就分号处理了。
    首先无cookie状态下去访问该请求:https://acs.m.taobao.com/h5/mtop.taobao.wsearch.h5search/1.0/##,对方会返回关键Cookies信息,_m_h5_tk和_m_h5_tk_enc,接下来会用到。

    下一步

    接下来的就比较简单了,i很明显就是时间戳,g是定值:12574478,那么data是什么呢,我们可以直接打印到console
    [图片上传失败...(image-2120bb-1604066621996)]

    发现就是Query String 里的data

    [图片上传失败...(image-4a163a-1604066621996)]

    好了我们现在已经可以找到所有的参数了,如下

    d.token + "&" + i + "&" + g + "&" + c.data
    < "59e8d998ee8b36a04b6e9d8037ac22b7&1545409677267&12574478&{"q":"鞋架","sst":"1","n":20,"buying":"buyitnow","m":"api4h5","token4h5":"","abtest":"15","wlsort":"15","page":1}"
    

    总结

    sign生成公式是:https://cloud.tencent.com/developer/article/1379830

    md5Hex(token&t&appKey&data)
    

    公式可能会发生变化,只要掌握了断点调试的方法,分析起来会简单很多。想学更多搜索Chrome调试技巧。

    本文还有些地方没有说清楚,比如如何清空缓存,最佳方法是Application中的Storage,将下面的所有Value清空。

    # -*- coding: utf-8 -*-
    """
     @Time   : 2020/10/31 2:21 
     @Athor   : LinXiao
     @功能   :
    """
    # ------------------------------
    import hashlib
    import json
    import time
    import requests
    import pymysql as mdb
    
    
    def hex_md5(s):
        m=hashlib.md5()
        m.update(s.encode('UTF-8'))
        return m.hexdigest()
    
    
    def get_page(index, num):
        url='https://acs.m.taobao.com/h5/mtop.taobao.social.feed.aggregate/1.0/'
        appKey='12574478'
        # 获取当前时间戳
        t=str(int(time.time() * 1000))
        data='{"params":"{\\"nodeId\\":\\"\\",\\"sellerId\\":\\"50852803\\",\\"pagination\\":{\\"direction\\":\\"1\\",\\"hasMore\\":\\"true\\",\\"pageNum\\":\\"' + str(
            index) + '\\",\\"pageSize\\":\\"' + str(num) + '\\"}}","cursor":"' + str(
            index) + '","pageNum":"' + str(
            index) + '","pageId":5703,"env":"1"}'
        params={
            'appKey': appKey,
            'data': data
        }
        # 请求空获取cookies
        html=requests.get(url, params=params)
        _m_h5_tk=html.cookies['_m_h5_tk']
        _m_h5_tk_enc=html.cookies['_m_h5_tk_enc']
        token=_m_h5_tk.split('_')[0]
        # cookie_t=html.cookies['t']
        u=token + '&' + t + '&' + appKey + '&' + data
        # MD5加密
        sign=hex_md5(u)
        print('秘钥:' + sign)
        # 设置第二次请求的cookie
        headers={
            'cookie': '_m_h5_tk=' + _m_h5_tk + '; _m_h5_tk_enc=' + _m_h5_tk_enc,
        }
        params={
            'appKey': appKey,
            't': t,
            'sign': sign,
            'data': data
        }
        html=requests.get(url, headers=headers, params=params)
        print(html)
    
        item=json.loads(html.text)
        # 第一页有21条,第一条无用
        for i in item['data']['list'][-num:]:
            print(i)
    
    
    get_page(2, 20)
    

    相关文章

      网友评论

          本文标题:Chrome断点JS寻找淘宝签名sign

          本文链接:https://www.haomeiwen.com/subject/shdjvktx.html