扇贝单词逆向

news/2024/10/20 20:58:29/

扇贝单词逆向

个人主页

前言:

由于想要获取一些单词信息,记录自己的单词学习记录。

1、分析网站

请求头分析

"authority": "apiv3.shanbay.com","accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","origin": "https://web.shanbay.com","referer": "https://web.shanbay.com/","sec-ch-ua": "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-site","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36","x-csrftoken": "4a08ae479d17443e5e68ef71613ff1be"

观察所有的header,其中比较有可能是加密请求参数的只有X-Csrftoken。

通过定位和搜索可以找关键位置

 r.isStandardBrowserEnv()) {var y = n(987), g = (e.withCredentials || c(m)) && e.xsrfCookieName ? y.read(e.xsrfCookieName) : void 0;g && (d[e.xsrfHeaderName] = g)}

其中g就是我们想要的参数,通过分析可以看到g = y.read(e.xsrfCookieName)

其中y.read为

 read: function(e) {var t = document.cookie.match(new RegExp("(^|;\\s*)(" + e + ")=([^;]*)"));return t ? decodeURIComponent(t[3]) : null},

通过分析可知,改参数从cookie中获取的,不为加密参数,可以在程序运行前直接复制即可。

import requestsheaders = {"authority": "apiv3.shanbay.com","accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","origin": "https://web.shanbay.com","referer": "https://web.shanbay.com/","sec-ch-ua": "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-site","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36","x-csrftoken": "4a08ae479d17443e5e68ef71613ff1be"
}
cookies = {"sajssdk_2015_cross_new_user": "1","__utma": "183787513.474190524.1686565691.1686565691.1686565691.1","__utmc": "183787513","__utmz": "183787513.1686565691.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)","__utmb": "183787513.1.10.1686565691","_ga": "GA1.2.474190524.1686565691","auth_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6OTMyNDI5MjYsImV4cCI6MTY4NzQzMDAyMCwiZXhwX3YyIjoxNjg3NDMwMDIwLCJkZXZpY2UiOiIiLCJ1c2VybmFtZSI6Im1vYmlsZV9jMzI4MjNiYWI4IiwiaXNfc3RhZmYiOjAsInNlc3Npb25faWQiOiJlNjYwZDUzZTA5MGIxMWVlYjVjMWZlMmJkMjY3MTFmNSJ9.xL7QJ-wzW7K-SC3grzoOsBwKQvBuAjx1W6uwDPCmzww","csrftoken": "4a08ae479d17443e5e68ef71613ff1be","sensorsdata2015jssdkcross": "%7B%22distinct_id%22%3A%22vzudct%22%2C%22%24device_id%22%3A%22188af261ddceaf-05ff5ebf672ef7-26031d51-3686400-188af261ddd5c1%22%2C%22props%22%3A%7B%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.google.com%2F%22%2C%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%7D%2C%22first_id%22%3A%22188af261ddceaf-05ff5ebf672ef7-26031d51-3686400-188af261ddd5c1%22%7D"
}
url = "https://apiv3.shanbay.com/wordsapp/user_material_books/jjbtq/learning/words/unlearned_items"
params = {"ipp": "10","page": "1"
}
response = requests.get(url, headers=headers, cookies=cookies, params=params)print(response.text)
print(response)

然后尝试直接发起请求,请求成功。

<Response [200]>
{"data":"NZIZHRKXMLHW3B5H..."}

此时我们可以看到返回的结果为加密的,下一步解密。

2、解析返回结果data

观察返回值比较像base64,于是直接用base64解密,毫无疑问失败了,应该是定制的base64。

于是根据启动器,打断点,debug,找到解密位置

Na = function(e) {return JSON.parse(window.bays4.d(e))}

其中window.bays4.d(e)为解密方法。

单步执行进去可以看到

key: "d",
value: function(t) {
if (!this._checkVersion(t))return "";
var e = new a.default;
e.init(t.substr(0, 4));
var r = e.decode(t);
return u.Base64.decode(r)}

确认解密位置无疑了。

接下来的步骤就扣代码了,该网站比较单纯,不需要补环境,扣完就能跑。

完整代码

import jsonimport requests
import execjsheaders = {"authority": "apiv3.shanbay.com","accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","origin": "https://web.shanbay.com","referer": "https://web.shanbay.com/","sec-ch-ua": "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-site","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36","x-csrftoken": "4a08ae479d17443e5e68ef71613ff1be"
}
cookies = {"sajssdk_2015_cross_new_user": "1","__utma": "183787513.474190524.1686565691.1686565691.1686565691.1","__utmc": "183787513","__utmz": "183787513.1686565691.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)","__utmb": "183787513.1.10.1686565691","_ga": "GA1.2.474190524.1686565691","auth_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6OTMyNDI5MjYsImV4cCI6MTY4NzQzMDAyMCwiZXhwX3YyIjoxNjg3NDMwMDIwLCJkZXZpY2UiOiIiLCJ1c2VybmFtZSI6Im1vYmlsZV9jMzI4MjNiYWI4IiwiaXNfc3RhZmYiOjAsInNlc3Npb25faWQiOiJlNjYwZDUzZTA5MGIxMWVlYjVjMWZlMmJkMjY3MTFmNSJ9.xL7QJ-wzW7K-SC3grzoOsBwKQvBuAjx1W6uwDPCmzww","csrftoken": "4a08ae479d17443e5e68ef71613ff1be","sensorsdata2015jssdkcross": "%7B%22distinct_id%22%3A%22vzudct%22%2C%22%24device_id%22%3A%22188af261ddceaf-05ff5ebf672ef7-26031d51-3686400-188af261ddd5c1%22%2C%22props%22%3A%7B%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.google.com%2F%22%2C%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%7D%2C%22first_id%22%3A%22188af261ddceaf-05ff5ebf672ef7-26031d51-3686400-188af261ddd5c1%22%7D"
}def start():context = execjs.compile(open("shanbei.js", "r", encoding="utf-8").read())url = "https://apiv3.shanbay.com/wordsapp/user_material_books/jjbtq/learning/words/unlearned_items"params = {"ipp": "10","page": "1"}response = requests.get(url, headers=headers, cookies=cookies, params=params)print(response)print(response.text)# if response.status_code == 200:#     # print(response.json()['data'])#     res = context.call("shanbeiDecode", response.json()['data'])#     print(res)#     print(json.dumps(json.loads(res), sort_keys=True, indent=4, separators=(',', ':')))if __name__ == "__main__":start()

至此逆向完毕。


http://www.ppmy.cn/news/351260.html

相关文章

centos7 gitlab安装配置

gitlab概述 GitLab是一个基于Web的Git存储库管理和代码协作平台。它提供了一套完整的工具和功能&#xff0c;使团队能够更高效地进行代码版本控制、协作开发和持续集成/持续部署&#xff08;CI/CD&#xff09;。 以下是GitLab的主要功能和概述&#xff1a; 版本控制系统&…

Git第十八讲 Git常见问题解决

Git常见问题解决 在使用 Git 进行版本控制时&#xff0c;你可能会遇到一些常见问题和错误。本文将介绍一些常见问题&#xff0c;并提供解决方案&#xff0c;以帮助你更好地使用 Git。 1. Git 报错和常见问题解决方案 Git 在使用过程中可能会产生各种报错信息&#xff0c;这些…

Netty实战(十三)

WebSocket协议&#xff08;一&#xff09; 一、什么是WebSocket 协议二、简单的 WebSocket 程序示例2.1 程序逻辑2.2 添加 WebSocket 支持2.3 处理 HTTP 请求2.4 处理 WebSocket 帧 一、什么是WebSocket 协议 WebSocket 协议是完全重新设计的协议&#xff0c;旨在为 Web 上的双…

常用数学符号读音表(中英双语)

下表整理了数学中常见的希腊字母符号&#xff0c; 序号大写小写英文注音国际音标注音中文注音1Ααalphaa:lf阿尔法2Ββbetabet贝塔3Γγgammaga:m伽马4Δδdeltadelt德尔塔5Εεepsilonepsilon伊普西龙6Ζζzetazat截塔7Ηηetaeit艾塔8Θθthetθit西塔9Ιιiotaiot约塔10Κ…

科学计算机的英文怎么拼读,科学的英语读音,科学的英文怎么读谐音。

科学用英语怎么拼读 科学 science, scientific knowledge 博物馆 museum 邮局 post office 医院 hospital 书店 bookstore 电影院 cinema; the movies; a movie house科学的英语单词是science。英式读法是[ˈsʌɪəns]&#xff1b;美式读法是[ˈsaɪəns]。作名词时意思是科学…

【Python】集合 set ① ( 集合定义 | 集合特点 | 代码示例 - 集合定义 )

文章目录 一、集合特点二、集合定义三、代码示例 - 集合定义 一、集合特点 在之前 的博客中 介绍了 列表 / 元组 / 字符串 数据容器 , 列表 支持 定义后 , 增加元素 / 修改元素 / 删除元素 , 并且 列表中可以存储 重复 / 有序 的元素 ;元组 定义后 不能 进行 增加元素 / 修改元…

python查单词音标_有没有通过读音或音标就能查出英语单词的办法,比如发音查词软件?...

展开全部 英语发音软件可以通过读音或音标就能查出英语单词。 英语发音软件带一个独e68a84e8a2ad3231313335323631343130323136353331333431373239特的音标词典&#xff0c;可以根据发音查单词&#xff0c;哪怕音标记不太清楚也能查到。在听到某个单词想查的时候&#xff0c;可…

Netty实战(十四)

WebSocket协议&#xff08;二&#xff09; 一、初始化 ChannelPipeline二、引导三、加密 一、初始化 ChannelPipeline 我们之前说过为了将 ChannelHandler 安装到 ChannelPipeline 中&#xff0c;需要扩展了ChannelInitializer&#xff0c;并实现 initChannel()方法。 下面我…