Jsrpc学习—加密参数Sign变化的网站破解教程

开发 后端
今天给大家来个jsrpc实战教程,让大家加深对jsrpc的理解和认识。

大家好,我是皮皮。前几天给大家分享jsrpc的介绍篇,Python网络爬虫之js逆向之远程调用(rpc)免去抠代码补环境简介,还有实战篇,Jsrpc学习——网易云热评加密函数逆向,Jsrpc学习——Cookie变化的网站破解教程感兴趣的小伙伴可以戳此文前往。

今天给大家来个jsrpc实战教程,让大家加深对jsrpc的理解和认识。

今天我们介绍的这个网站是cookie参数不变,但是加密参数Sign变化的一个网站,一起来使用jsrpc来攻破它吧!

1、这里使用的网站是87aed0b6bc8cb687d63dd7eee0f64d38,MD5加密处理过的。

2、需要提取100个网页中的数字,然后求和。

3、打开浏览器抓包,然后打断点调试,依次点击右边的Call Stack内的东西,直到找到加密函数,里边的值对应请求参数即可判定。

4、最终在这里找到了一堆人看不懂的东西。

5、仔细寻找,发现加密的函数在这里了。

6、之后可以在控制台输入指令window.dcpeng = window.get_sign,其中window.get_sign为加密函数。注意:这个地方挺重要的,很多时候我们会写成ct.update(),这样会有问题!加了括号就是赋值结果,没加就是赋值整个函数!千差万别。

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

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

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

10、连接通信,在控制台输入命令var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=para&name=test");

11、随后继续输入命令:

// 注册一个方法 第一个参数get_v为方法名,
// 第二个参数为函数,resolve里面的值是想要的值(发送到服务器的)
// param是可传参参数,可以忽略
demo.regAction("get_para", function (resolve) {
dcpeng();
var res = window.sign
resolve(res);
})

也许有小伙伴会觉得奇怪,window.sign明明是在list这个变量中,为啥我们通过window.get_sign()可以获取到,莫非window.get_sign()和window.sign返回的值是一样的?其实window是整个全局,它只是声名一个list对象里面有signature等于全局的sign,这个全局的sign的值通过window.get_sing()得到。

dcpeng()就是一个函数,里面写的最后结果就是window.sign=window.get_sign(),并没有return东西。

12、之后就可以在浏览器中访问数据了,打开网址 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=test&action=get_para

13、如上图所示,我们看到了那个变化的参数v的值,直接通过requests库可以发起get请求。

14、现在我们就可以模拟数据,进行请求发送了。

15、将拷贝的内容可以丢到这里进行粘贴:http://tool.yuanrenxue.com/curl

16、之后将右侧的代码复制到Pycharm中即可用,非常便利。

17、之后就可以构造请求了,加一个整体循环,然后即可获取翻页的内容,整体代码如下所示。

import requests
import json

cookies = {
'session': '6c78df1c-37aa-4574-bb50-99784ffb3697.Qcl0XN6livMeZ-7tbiNe-Ogn8L4',
'v': 'A7s8gqX6XgjWtmKFwCNKPNdQSpQgEM9-ySWTzq14lzDRLtVKNeBfYtn0IxW-',
}

headers = {
'Connection': 'keep-alive',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Origin': 'http://spider.wangluozhe.com',
'Referer': 'http://spider.wangluozhe.com/challenge/2',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
}
all_data = []
for page_num in range(1, 101):
sign_url = 'http://127.0.0.1:12080/go?group=para&name=test&action=get_para'
sign = requests.get(url=sign_url).json()["get_para"]
# print(sign)
data = {
'page': f'{page_num}',
'count': '10',
'_signature': sign
}
print(f'Crawlering page {page_num}')

response = requests.post('87aed0b6bc8cb687d63dd7eee0f64d38', headers=headers, cookies=cookies, data=data, verify=False).json()
for item in response["data"]:
all_data.append(item["value"])
# print(item["value"])

print(sum(all_data))

运行结果如上图所示,和网页上呈现的数据一模一样。

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

17、也欢迎大家挑战该题目,我已经挑战成功了,等你来战!

总结

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

责任编辑:姜华 来源: Python共享之家
相关推荐

2022-05-18 10:03:28

JsrpcSignhook

2022-02-09 10:32:19

jsrpcjsrpc工具网络爬虫

2020-10-14 10:02:45

如何破解LUKS加密

2011-07-27 16:46:04

iPhone iPhone破解 MacPort

2009-12-10 10:49:21

PHP eval加密

2020-12-13 17:57:16

加密密码Python

2020-12-21 16:00:07

Pythonzip文件密码

2021-02-14 00:17:10

加密货币数字货币比特币

2009-04-10 23:45:19

2014-11-19 09:15:35

2010-07-22 16:33:08

2009-03-19 17:20:45

2015-08-19 16:27:42

2015-12-25 11:28:50

2009-12-09 13:54:42

PHP Zend加密文

2009-12-07 16:21:19

2009-03-19 17:55:03

2021-04-23 09:49:59

加密RSA密码

2010-11-17 11:26:49

2011-05-19 13:45:38

点赞
收藏

51CTO技术栈公众号