3

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向

 2 years ago
source link: https://blog.51cto.com/u_13389043/5115647
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向

原创

大家好,我是皮皮。

前几天给大家分享jsrpc的介绍篇,Python网络爬虫之js逆向之远程调用(rpc)免去抠代码补环境简介,感兴趣的小伙伴可以戳此文前往。今天给大家来个jsrpc实战教程,Jsrpc学习——Cookie变化的网站破解教程,让大家继续加深对jsrpc的理解和认识。下面是具体操作过程,不懂的小伙伴可以私我。

1、因为网易云音乐热评的加密并不在cookie上,而是参数加密,所以这里就不需要进行hook住cookie了。

2、之前就知道网易云音乐热评的加密存在之地是在下图的位置,是那个函数window.asrsea(JSON.stringify(i1x), bsR1x(["流泪", "强"]), bsR1x(Xp8h.md), bsR1x(["爱心", "女孩", "惊恐", "大笑"]))

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_jsrpc

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

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_json_02

4、关闭网页debug模式。注意:这个地方挺重要的,很多时候如果不关闭,ws无法注入!

5、此时在本地双击编译好的文件win64-localhost.exe,启动服务。

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_jsrpc_03

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

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_jsrpc_04

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里。

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_json_05

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

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_JS逆向_06

上图20行的位置那是json转字符串,因为只能返回字符串,返回对象的话会变成显示"[object]"

这两步只是控制台打印,不用管。

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_数据_07

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

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_jsrpc_08

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}"
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=', data=data)
print(response.text)

运行之后,可以得到网页上的评论数据:

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_jsrpc_09

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

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_JS逆向_10

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

# yyds干货盘点 # Jsrpc学习——网易云热评加密函数逆向_json_11

13、至此,请求就已经完美的完成了,如果想获取全部网页,构造一个range循环翻页即可实现,改变请求参数中的pageNo即可。

14、如果想抓取不同的歌曲,只需要替换songid这个参数即可。

大家好,我是皮皮。这篇文章主要给大家介绍了jsrpc的实战教程,使用jsrpc工具可以在网络爬虫过程中事半功倍,无需仔细的去扣环境,去一步步逆向,只一个黑盒的模式,我们就拿到了想要的结果,屡试不爽。

初次接触jsrpc的小伙伴可能看不懂,这里还有黑哥录制的一个视频,大家可以对照着视频进行学习,地址:https://www.bilibili.com/video/BV1EQ4y1z7GS,黑哥全程无声演示,视频的BGM很大,建议大家可以静音播放,领会其中奥义。

关于jsrpc工具,可以点击原文前往获取。

​小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。​


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK