JS逆向学习 |
您所在的位置:网站首页 › 逆向破解百度百科 › JS逆向学习 |
系列文章目录
文章目录
系列文章目录前言一、明确需要的接口和、参数二、完成代码1.js代码2.python代码
总结
前言
在深入学js逆向的时候,看到百度翻译,尝试了一下。破解后想看下其他人的思路,看了下基本上讲的都不够全。所以在这里详细记录下我个人的处理流程,希望能对其他学者提供参考 一、明确需要的接口和、参数1.打开网站,检查,然后清除全部cookie、请求记录。然后重新刷新页面 2.输入任意内容,都会直接翻译,这里以”你好“为例。输入你好 翻译后,很容易找到/v2transapi接口 右键选中该请求,选择以cURL格式复制。这里是方便直接转成可用的python代码,省的自己写![]() ![]() 3.开始定位关键参数。 (1)首先能看到请求带了cookie,先确定cookie是否是必须的。 此时先在requests请求中删掉cookie,再请求,失败了,说明某些cookie是有用的。这里很明显BAIDUID、BAIDUID_BFESS、ab_sr这些参数可能是有意义的。可以重新清除网页cookie对比变化、或者直接在代码中挨个删除,然后重新请求 去试哪个是有用的。最后发现必需的cookie只有BAIDUID,所以我们先找BAIDUID怎么生成的。直接在左侧搜索,先看是不是某个请求set的,很显然能直接找到cookie生成的请求,就是第一次打开网站的请求![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 参数全部搞定了,开始写代码 二、完成代码 1.js代码代码如下(示例)baidu.js: window = global r = null function n(t, e) {...} function Sign(t, gtk) {...} //因为gtk是额外获取的,这里加个参数传进去;只要里面window['d']换成gtk变量就行; console.log(Sign("你好", '320305.131321201')) 2.python代码代码如下(示例): import json import re import time import execjs import requests from proxy.get_proxy import get_proxy requests.packages.urllib3.disable_warnings() headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Language": "zh-CN,zh;q=0.9", "Referer": "https://fanyi.baidu.com/", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", } session_ = requests.session() # 第一次请求首页,目的是生成cookie res1 = session_.get('链接自行替换', headers=headers, proxies=get_proxy()) # 第二次请求首页,目的是获取token res2 = session_.get('链接自行替换', headers=headers, proxies=get_proxy()) query = '你好' headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", "Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Connection": "keep-alive", "Accept-Language": "zh-CN,zh;q=0.9", "Cache-Control": "no-cache", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Origin": "https://fanyi.baidu.com", "Pragma": "no-cache", "Referer": "https://fanyi.baidu.com/", "X-Requested-With": "XMLHttpRequest", } url = "链接自行替换/v2transapi" params = { "from": "zh", "to": "en" } gtk = re.search(r"gtk = \"(.*?)\";", res1.text).group(1) with open(r'baidu.js', 'r', encoding='utf-8') as f: js_ = f.read() js_c = execjs.compile(js_) sign = js_c.call("Sign", query, gtk) ts = str(int(time.time()*1000)) data = { "from": "zh", "to": "en", "query": query, "transtype": "realtime", "simple_means_flag": "3", "sign": sign, "token": re.search(r"token: '(.*?)'", res2.text).group(1), "domain": "common", "ts": ts } response = session_.post(url, headers=headers, params=params, proxies=get_proxy(), data=data) print(json.loads(response.text))上述代码只是写了个简单的demo。 实际上里面还有个地方需要注意,就是实际获取token是需要携带cookie第二次请求首页,源码中才会返回token,这个也比较容易发现,这里就不再详细说明。 总结以上方法仅用于个人学习参考 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |