财联社加密参数(解密教程、纯算代码)

==请帮忙点点赞,点个关注,谢谢!!==


官网地址:财联社

本文发布的技术与代码仅供技术交流和学习使用,严禁用于数据采集等任何违法活动。请确保合法使用,并独立承担不当使用带来的法律责任。

一、逆向教程

1.我们先来看看请求参数

有个加密参数“sign”,多个翻页结果来对比,似乎是通过last_time来控制的。(让后端知道从什么时候的文章开始返回)

cc348512eefd440ab23cd2f09a8b77ff.png

2.解密函数的定位

请出我们的冒号大法。

05cbe3bd2b3449828c50554e2f79c504.png

找了一圈,这个好像挺像,绿框里面的参数在我们的请求负载也有。那确实挺像的,直接上断点。

3fc095cc2f58406da181c3cb4e34ea90.png

r是我们请求负载,返回了加密参数,那就是这里了。

3.深入分析

让我们逐层分析

3.1 a()方法分析

先让我们来看看这个方法他返回的是个啥。

8a49bb361cd84a3fbbd4ea6328945fb2.png

这不是我们的请求负载 r 一样的嘛.....再让我们来验证一下直接传r给 p() 方法行不行。

12df39957851433f98edab6dce5779ab.png

斯.....还是一样,那一样就不管了,直接删a()方法。

3.2 p()方法分析

那还等什么,已经知道p()就是加密方法了。直接进去。

59383441bad54ea6b3ae8ece02919556.png

跳转到这里了,直接给上首尾断点

971ea7e410e7452291aaa3064d4e79c8.png

先不着急进去,看看这个函数都干了些啥。

1. 生成了一个t

2. 调用r.sync()方法传入生成的t,结果又赋值给了t

3. 调用o()方法传入生成的t,结果又赋值给了t

4. 返回t

emmm....挺搞人的,那来一部分一部分的看吧。

3.2.1 生成了一个t(上文描述的第一步)

先看看这个t最初生成的是啥。

95d0f7ed686b4997a84ca29f385e8e31.png

这是把我们的请求负载给拼接成http get请求参数的格式了 

3.2.2 调用r.sync()方法传入生成的t,结果又赋值给了t(上文描述的第二步)

接着来看看r.sync(t)的结果是个啥

52870d7fa8904b41ab9a5a5510f15939.png

生成了一个密文,40位???速想!有什么加密是40位的。(SHA1生成40位加密结果)

速查表:常见的哈希算法生成的加密结果的长度总结-MySheep.

来验证一下

1e13c6811fbc4804949f5ba1c0f7810d.png

对上咯!!确定是SHA1加密了。

3.2.2 调用o()方法传入生成的t,结果又赋值给了t(上文描述的第三步)

接着来看看o(t)的结果是个啥

8b309cc0be384cd097aae34c5353867a.png

还是生成了一个密文,32位???速想!有什么加密是32位的。(MD5可生成32位加密结果)

速查表:常见的哈希算法生成的加密结果的长度总结-MySheep.

再来验证一下

a994cea3bb23471ca20ecc1fa85aa1be.png

Congratulations!!!又对上了。

3.2.3 p()方法分析结果总结

p()方法就是将请求负载先拼接成http get请求参数格式的字符串,然后将该字符串进行SHA1加密再进行MD5加密。

二、加密纯算代码

import urllib.parse
import hashlib
import requests



params = {
    'app': 'CailianpressWeb',
    'id': '1000',
    'last_time': '1735251626',
    'os': 'web',
    'rn': '20',
    'sv': '8.4.6',
}

# 对字典的键进行排序,并生成排序后的查询字符串
sorted_data = sorted(params.items(), key=lambda item: item[0])  # 按key排序
query_string = urllib.parse.urlencode(sorted_data)  # 转换为URL编码的字符串

# 使用SHA1加密
sha1_hash = hashlib.sha1(query_string.encode('utf-8')).hexdigest()

# 对SHA1加密的结果再进行MD5加密
sign = hashlib.md5(sha1_hash.encode('utf-8')).hexdigest()

# 向请求负载中添加sign
params['sign'] = sign

response = requests.get('请求自己写', params=params)

运行结果:
f148bdf4af444431914db2a37cdf95b4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MySheep.

赏瓶水钱吧!感谢!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值