Jsrpc学习——网易云热评加密函数逆向
- Lenguaje dominante
- Sin datos de lenguaje
- Estrellas
- 4
- Forks
- 4
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
点击上方 “**Python 共享之家**”,进行关注
回复 “**资源**” 即可获赠 Python 学习资料
今
日
鸡
汤
烟笼寒水月笼沙,夜泊秦淮近酒家。
大家好,我是皮皮。
前几天给大家分享 jsrpc 的介绍篇,[Python 网络爬虫之 js 逆向之远程调用 (rpc) 免去抠代码补环境简介](http://mp.weixin.qq.com/s?__biz=MzU5MjY2ODEwMQ==&mid=2247489430&idx=1&sn=708286eaa0174d39b22eb7f94d0eba50&chksm=fe1d633cc96aea2aa1e97476a90038b006883b89898d69c47c6e9ac42c386746c90c07aa6eb4&scene=21#wechat_redirect),感兴趣的小伙伴可以戳此文前往。今天给大家来个 jsrpc 实战教程,[Jsrpc 学习——Cookie 变化的网站破解教程](http://mp.weixin.qq.com/s?__biz=MzU5MjY2ODEwMQ==&mid=2247489706&idx=1&sn=2bd4d54ae99d66cbd958a503bda9e17d&chksm=fe1d6c00c96ae5167f22cdb782a78d5cbad69ffe50ade8c85e78849885a9a82d3446e7d7e8bc&scene=21#wechat_redirect),让大家继续加深对 jsrpc 的理解和认识。下面是具体操作过程,不懂的小伙伴可以私我。
1、因为网易云音乐热评的加密并不在 cookie 上,而是参数加密,所以这里就不需要进行 hook 住 cookie 了。
2、之前就知道网易云音乐热评的加密存在之地是在下图的位置,是那个函数`window.asrsea(JSON.stringify(i1x), bsR1x(["流泪", "强"]), bsR1x(Xp8h.md), bsR1x(["爱心", "女孩", "惊恐", "大笑"]))`

3、找到了 aes 加密地方的函数,就赋值一个自己名字的全局变量,然后转发加密就行了。之后可以在控制台输入指令`window.dcpeng = window.asrsea`,其中`window.asrsea`为加密函数。**注意**:这个地方挺重要的,很多时候我们会写成 ct.update(),这样会有问题!加了括号就是赋值结果,没加就是赋值整个函数!千差万别。

4、关闭网页 debug 模式。**注意**:这个地方挺重要的,很多时候如果不关闭,ws 无法注入!
5、此时在本地双击编译好的文件`win64-localhost.exe`,启动服务。

6、之后在控制台注入 ws,即将`JsEnv.js`文件中的内容全部复制粘贴到控制台即可 (注意有时要放开断点)。

7、连接通信,在控制台输入命令`var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=para&name=wangyiyun");`
8、随后继续输入命令:
`// 注册一个方法 第一个参数 get_v 为方法名,
// 第二个参数为函数,resolve 里面的值是想要的值 (发送到服务器的)
// param 是可传参参数,可以忽略
demo.regAction("get_para", function (resolve, param) {
console.log(param);
console.log(JSON.stringify(param));
var res = dcpeng(param, '010001', '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7', '0CoJUm6Qyw8W8jud');
resolve(JSON.stringify(res));
})
`
这里就用到了参数 param,param 也就是需要传值过来的 json 对象,因为你不可能获取固定的歌曲 id 和页码,所以用 python 写成字典,通过 url 编码写在 param 里。

9、这里为何不写成 dcpeng(JSON.stringify(param)...) 这样呢?因为 get 传过来的就是字符串,不用 json 转字符串了。

上图 20 行的位置那是 json 转字符串,因为只能返回字符串,返回对象的话会变成显示 "\[object]"
这两步只是控制台打印,不用管。

10、之后就可以在浏览器中访问数据了,打开网址 `http://127.0.0.1:12080/go?group={}&name={}&action={}¶m={}` ,这是调用的接口 group 和 name 填写上面注入时候的,action 是注册的方法名,param 是可选的参数,这里续用上面的例子,网页就是:`http://127.0.0.1:12080/go?group=para&name=wangyiyun&action=get_para¶m=rid=R_SO_4_1909604321&threadId=R_SO_4_1909604321&pageNo=1&pageSize=20&cursor=-1&offset=0&orderType=1`

11、如上图所示,我们看到了那个变化的参数 v 的值,直接通过 requests 库可以发起 get 请求。
12、现在我们就可以模拟数据,进行请求发送了,整体代码如下所示。
\`import requests
import json
import urllib.parse
songid = '1908392914'
data = {
"rid": f"R_SO_4_{songid}",
"threadId": f"R_SO_4_{songid}",
"pageNo": "1",
"pageSize": "20",
"cursor": "-1",
"offset": "0",
"orderType": "1",
"csrf_token": ""
}
song_info = str(data)
param = (urllib.parse.quote(song_info))
param_url = f"[http://127.0.0.1:12080/go?group=para&name=wangyiyun&action=get_para¶m={param}](http://127.0.0.1:12080/go?group=para&name=wangyiyun&action=get_para¶m={param})"
response = requests.get(url=param_url).text
response_json = json.loads(response)
get_para = json.loads(response_json["get_para"])
encText = get_para["encText"]
encSecKey = get_para["encSecKey"]
# print(encText)
# print(encSecKey)
data = {
'params': encText,
'encSecKey': encSecKey
}
response = requests.post('[https://music.163.com/weapi/comment/resource/comments/get?csrf_token='](https://music.163.com/weapi/comment/resource/comments/get?csrf_token='), data=data)
print(response.text)
\`
运行之后,可以得到网页上的评论数据:

放到 json 中去解析,和网页上呈现的数据一模一样。

下面是原网页上的原始数据:

13、至此,请求就已经完美的完成了,如果想获取全部网页,构造一个 range 循环翻页即可实现,改变请求参数中的 pageNo 即可。
14、如果想抓取不同的歌曲,只需要替换 songid 这个参数即可。
### 总结
大家好,我是皮皮。这篇文章主要给大家介绍了 jsrpc 的实战教程,使用 jsrpc 工具可以在网络爬虫过程中事半功倍,无需仔细的去扣环境,去一步步逆向,只一个黑盒的模式,我们就拿到了想要的结果,屡试不爽。
初次接触 jsrpc 的小伙伴可能看不懂,这里还有黑哥录制的一个视频,大家可以对照着视频进行学习,地址:`https://www.bilibili.com/video/BV1EQ4y1z7GS`,黑哥全程无声演示,视频的 BGM 很大,建议大家可以静音播放,领会其中奥义。
关于 jsrpc 工具,可以点击原文前往获取。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进 Python 学习交流群共同探讨学习。

****\*\*****---**--****\*\*******---\***\*---**\*\*\*\*****---**--****\*\*******---****************\*\*\*\***************** End ****\*\*****---**--****\*\*******---**--**---****\*\*****---**--****\*\*******-****************\*\*\*\*****************
往期精彩文章推荐:
- [Python 网络爬虫之 js 逆向之远程调用 (rpc) 免去抠代码补环境简介](http://mp.weixin.qq.com/s?__biz=MzU5MjY2ODEwMQ==&mid=2247489430&idx=1&sn=708286eaa0174d39b22eb7f94d0eba50&chksm=fe1d633cc96aea2aa1e97476a90038b006883b89898d69c47c6e9ac42c386746c90c07aa6eb4&scene=21#wechat_redirect)
- [一文带你了解 Python Socket 编程](http://mp.weixin.qq.com/s?__biz=MzU5MjY2ODEwMQ==&mid=2247489440&idx=1&sn=0b72a71d0243833d7b4ea95806cc9802&chksm=fe1d630ac96aea1c44a9025dfdd27111c516a50301f9b1ce6782f1485e3ef3892fdef9170f26&scene=21#wechat_redirect)
- [盘点一道 Python 列表合并的基础题目 (列表推导式)](http://mp.weixin.qq.com/s?__biz=MzU5MjY2ODEwMQ==&mid=2247489410&idx=1&sn=89c912f81a7e32a880d93f3d7c7b7286&chksm=fe1d6328c96aea3eba488e60169dbd3ba94841131550a4adbe3d1e881be591834b63f7c22660&scene=21#wechat_redirect)
- [手把手教你使用 Pandas 实现 DataFrame 分组条件查找值](http://mp.weixin.qq.com/s?__biz=MzU5MjY2ODEwMQ==&mid=2247489397&idx=1&sn=2dc274f7553e108abfa47b7dda535048&chksm=fe1d63dfc96aeac99e6ed46f8b882fe88b8400730c79fbd8aafc43a171b56af73012a27fc1c8&scene=21#wechat_redirect)

欢迎大家**点赞,\*\***留言,\***\* 转发,**转载,\*\*\*\* 感谢大家的相伴与支持
想加入 Python 学习群请在后台回复【**入 \*\***群 \*\*】
万水千山总是情,点个【**在看**】行不行
[https://mp.weixin.qq.com/s/3wmHF4W97SE7nC_ZJNvwOQ](https://mp.weixin.qq.com/s/3wmHF4W97SE7nC_ZJNvwOQ)
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Evaluación
Este issue todavía no se ha evaluado.