记一次重大突破 - 破解js参数加密

前言

 

前几天应公司要求,需要爬取平安好医生APP,发现数据存在sign签名算法加密,如下图

                 

本来想通过js逆向解析分析出 ‘_sig=’ 出来,通过 F12 开发者工具发现其生成方法如下

只知道用md5加密,但具体加密参数缺用 c、g、m这样的参数给掩盖掉了,通过关键词搜索等于大海捞针,js看着也头大,随即就放弃用seleium自动化抓取。

但后几天看到一篇破解js加密,其中作者提到js调试(它也没细讲)。发现灵感来了,是不是可以通过js调试来破解呢?

想到就做!


基本流程

首先,通过关键词参数 ‘_sig=’ ,找到其参数 js生成代码(即图二)

1. 按F12进入开发者工具、点击【Sources】

2、点击它,右侧会出现 js内容,通过 ctrl+F,输入 '_sig='  进行全局搜索,出现

4.关键来了!这时我们进行 js断点调试,点击js旁边的函数打断点,然后刷新页面,就出现其生成过程

5.此后复制c的生成内容,通过md5自己测试下结果

import hashlib

n ='{"standard_dept_id":["1000000"],"doctor_sorts":["ZHUKE_SORT_NO_4","D_SORT_FACTOR_DESC","INQUIRY_PRICE_ASC","H_SORT_FACTOR_ASC","HOSPITAL_LEVEL_ASC","JOB_TITLE_DESC","DOCTOR_ID_DESC"],"pageView":10,"pageNo":1,"country_type":1,"hospitalType":["PUBLIC","PRIVATE"],"godSearch":{"superSearch":"CON_6"}}'

m = hashlib.md5()
m.update(n.encode('utf-8'))
sign = m.hexdigest()
print(sign)

#结果:202254b8665cd3f986e7909a0ef2b94c

对比查看下【Network】的header请求参数

结果一模一样!!!

自此,我们可以多对比几个链接页面,找出规律,做出请求调整就行了

对比参数

'''
_aid: 509
_mt: docInfo.mainDoctorListSearch_noSec
_sm: md5
mainDoctorParams: {
"standard_dept_id":["1000035"],
"doctor_sorts":["ZHUKE_SORT_NO_4","D_SORT_FACTOR_DESC","INQUIRY_PRICE_ASC","H_SORT_FACTOR_ASC","HOSPITAL_LEVEL_ASC","JOB_TITLE_DESC","DOCTOR_ID_DESC"],
"pageView":10,
"pageNo":1,
"country_type":1,
"hospitalType":["PUBLIC","PRIVATE"],
"godSearch":{"superSearch":"CON_6"}}
'''

"""
_aid: 509
_mt: docInfo.mainDoctorListSearch_noSec
_sm: md5
mainDoctorParams: {
"standard_dept_id":["1000035"],
"doctor_sorts":["ZHUKE_SORT_NO_4","D_SORT_FACTOR_DESC","INQUIRY_PRICE_ASC","H_SORT_FACTOR_ASC","HOSPITAL_LEVEL_ASC","JOB_TITLE_DESC","DOCTOR_ID_DESC"],
"pageView":10,
"pageNo":2,
"country_type":1,
"hospitalType":["PUBLIC","PRIVATE"],
"godSearch":{"superSearch":"CON_6"}}
"""
得出"standard_dept_id":["1000035"],是用来科室分类、"pageNo":2是用来翻页加载的,代码中只修改这两个参数就行

扩展

有些进行js混淆的。可通过【Network】先查看那个js文件生成sign,然后直接找到那个生成js文件

这算是一次比较重大的突破,值得纪念一下,开心~ 哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值