前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫进阶必备 | XX快药 sign 加密分析与加密逻辑复写

Python爬虫进阶必备 | XX快药 sign 加密分析与加密逻辑复写

作者头像
咸鱼学Python
发布2019-09-25 16:28:11
1.1K0
发布2019-09-25 16:28:11
举报
文章被收录于专栏:咸鱼学Python咸鱼学Python

今日份的网站

aHR0cDovL3d3dy5kZGt5LmNvbS9jb21tb2RpdHkuaHRtbD9kZGt5Y2FjaGU9YTdiMTllODc5ZDJmMmYyNzlkMzU2ZjVhZmE2ZDVjZmY=

这个网站的加密比较简单,是那种新手做过一遍就对 JS 逆向充满信心的小练手。

分析请求

先分析请求,看看需要的参数有没什么搞头【图1-1】

图1-1

比较明显的是 sign 其他的参数好像没有什么特别的地方。

先定位 sign 的位置【图1-2】

图1-2

直接搜索参数就看到结果了,点击搜索的结果文件在文件内再搜索一次,可以看到有 3 个结果。【图1-3】

图1-3

到这里就看到 sign 的加密了。

接下来继续分析逻辑,这里的 sign 值是 yy的值是通过MD5(f)获取的,而f又是t.get("method") + p + r的结果,经过一通分析,可以的得到下面的逻辑:

var l = t.keys().sort(), p = "";
            l.length;
for (var g in l) {
  var m = l[g];
  p += m + t.get(m)
}
sign = md5(t.get("method") + p + r)

接下来只需要把我们不知道的值通过断点的方式调试出来,这个加密我们就完成解密了。

所以先给不知道的值打上断点,不清楚就打上断点不要怕麻烦,像【图1-4】这样。

图1-4

重新请求一下,就进入到我们打的断点里了,我们可以通过在 console 中打印变量的值来理解逻辑。【图1-5】

图1-5

明白需要的变量的值之后,我们就可以开始扣取 JS 或者用 Python 复写加密的逻辑了。

因为这次的加密比较简单,我们试试用 Python 复写一遍加密。(主要是 Python 的 md5 用起来蛮舒服的)

这里的逻辑比较简单没啥好分析的,我就直接上代码了。

import time
from hashlib import md5
def get_sign():
    timeStamp = time.time()
    localTime = time.localtime(timeStamp)
    strTime = time.strftime("%Y-%m-%d %H:%M:%S", localTime)

    l = ["method", "orderTypeId", "orgcode", "pageNo", "pageSize", "plat", "platform", "shopId", "t", "v",
         "versionName"]
    t = {
        'method': 'ddsy.product.query.orgcode.product.list.b2c',
        'orderTypeId': '0',
        'orgcode': '010502,010503,010504,010505,010506,010507',
        'pageNo': '1',
        'pageSize': '100',
        'plat': 'H5',
        'platform': 'H5',
        'shopId': '-1',
        # 't': '2019-9-23 22:4:16',
        't': '{}'.format(strTime),
        'v': '1.0',
        'versionName': '3.2.0'
    }
    p = ''
    for i in range(0, 11):
        m = l[i]
        p += m + t.get(m)
    f = t['method'] + p + '6C57AB91A1308E26B797F4CD382AC79D'
    print(f)
    sign = md5value(f).upper()
    print(sign)
    return sign


def md5value(s):
    a = md5(s.encode()).hexdigest()
    return a

到这里其实就没有什么难度了,直接带入 sign 请求就完事了。【图1-6】

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析请求
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档