欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 JS逆向 百度翻译

程序员文章站 2023-12-31 15:09:34
JS逆向 百度翻译后面可能要进行JS逆向的学习记录,有空发发怎么实现一些加密网站的JS逆向,和我一起进步吧!怕有的人不知道JS逆向是个什么东西,这里大概解释一下。第一次听到这个词可能觉得好高大上,会不会很难,我的回答是当你掌握了技巧以后其实也不难了。在爬虫分析网站过程中可能会碰到一些数据没法直接通过网站的response得到,而要构造参数访问网站,就是向对方服务器发送请求,然后模拟网站获取数据,而其中的构造参数这一步骤就是JS逆向,有好些参数是通过网站后台的JavaScript生成的,我们要做的就是找出...

JS逆向 百度翻译

后面可能要进行JS逆向的学习记录,有空发发怎么实现一些加密网站的JS逆向,和我一起进步吧!

怕有的人不知道JS逆向是个什么东西,这里大概解释一下。第一次听到这个词可能觉得好高大上,会不会很难,我的回答是当你掌握了技巧以后其实也不难了。在爬虫分析网站过程中可能会碰到一些数据没法直接通过网站的response得到,而要构造参数访问网站,就是向对方服务器发送请求,然后模拟网站获取数据,而其中的构造参数这一步骤就是JS逆向,有好些参数是通过网站后台的JavaScript生成的,我们要做的就是找出后台参数生成的原理。
不管听懂与否,还是看接下来的分析吧,在实战中学习知识效率是最高的。

一、分析环节
1、进入百度翻译网站,一波常规操作。按F12,选中"XHR",向翻译框输入任意文字,观察抓包到的链接。
荐
                                                        JS逆向 百度翻译
可以看到红色方框就是这次分析的最终目的,构造出这个参数列表,然后post访问对应的链接。
现在需要解密的参数看上去有sign和token 2个,实际上只有sign一个而已。
我们再在翻译框输入任意文本,发现token值是不变的,后面的JS脚本分析也会证实这一点,token是个常量。

2、直接搜索含有"sign"这个参数的链接的片段,寻找生成机理的代码。这里为什么是网站片段呢,一般脚本的构造都会是网站名先于函数名和变量名嘛,sign就是变量,检索网站片段会更容易定位到sign位置。
荐
                                                        JS逆向 百度翻译
荐
                                                        JS逆向 百度翻译
查找后发现只有一个备选项,直接点进去这个脚本,然后把不容易观看的代码格式化一下,按下“{}”。
荐
                                                        JS逆向 百度翻译
荐
                                                        JS逆向 百度翻译
然后可以看到我们需要的参数都在这里被定义了,而且右边还直接给我打好了断点。不过保险起见,还要在黄色行也打上断点。
接下来,我们刷新界面,网站会停在我们打了断点的地方,而且一些数据会被加载进来,后面将鼠标悬浮在sign旁边的y上,就会看到这样的图:
荐
                                                        JS逆向 百度翻译
接下来点进去弹窗的"e"的js链接,跳转到另外一js脚本。
荐
                                                        JS逆向 百度翻译
这个function e函数就是生成sign参数的js代码,将红色方框里的代码复制到一个js文件里,这里命名为code.js。后面的工作就是写代码和调试了。

二、代码环节

import requests
import execjs


class BaiduTranslater:
    def __init__(self, sources):
        self.sources = sources  #输入翻译的内容
        self.url = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en' #访问网站
        self.headers = { #请求头
            'origin': 'https: // fanyi.baidu.com',
            'referer': 'https: // fanyi.baidu.com /?aldtype = 16047',
            'user - agent': #自行添加,
            'cookie': #自行添加
        }
	
    def data_creater(self):	#生成data参数表
        with open("code.js", 'r')as f: #调用从网站上复制下来的js脚本
            content = execjs.compile(f.read()) #编译脚本
        sign = content.call("e", self.sources) #得到sign值
        self.data = {
            'from': 'zh',
            'to': 'en',
            'query': self.sources,
            'transtype': 'translang',
            'simple_means_flag': 3,
            'sign': sign,
            'token': '1c65e5489209deafd9e0302de91a0010', #系统常量
            'domain': 'common'
        }

    def crawler(self):
        self.data_creater() #先生成data
        res = requests.post(self.url, data=self.data, headers=self.headers)
        res.encoding = 'utf-8'
        print("翻译结果为:", res.json()['trans_result']['data'][0]['dst']) #对应翻译结果


if __name__ == '__main__':
    while True:
        str_input = input("请输入要翻译的内容:")
        if str_input == 'q':
            break
        baidu = BaiduTranslater(str_input)  #实例化百度翻译类
        baidu.crawler() #调用函数进行翻译

其中有必要一提的就是execjs需要额外安装,可以在cmd中输入“pip install PyExecJS”进行安装。
JS脚本初步为下图所示,而翻译的结果可以根据得到的json自行提取想要的数据,这里只写简单的翻译结果的提取。
荐
                                                        JS逆向 百度翻译
代码有些长我就收起了一些代码,这里千万注意js代码的结构不要出错,认清大括号的匹配是否正确。
可是这样运行代码会发现是会报错的!!
荐
                                                        JS逆向 百度翻译
报错了没事,不要慌,只是code.js里的 i 没有被定义,编译的时候找不到 i 值而已。只要回到之前的网站界面继续分析就好了。

三、调试环节
荐
                                                        JS逆向 百度翻译
我们在function e函数这里下断点,把BreakPoint其他的断点卸掉,然后刷新。后面按下图所示的“下一步”(↓)执行就会一步步的显示出执行结果。
荐
                                                        JS逆向 百度翻译
可以很清楚看到 i 的值就是这个常量,为什么我就能肯定它是一个常数呢,可以悬浮在window[l] 上观察,或者是红色框语句,i 是一个已经计算好的常量。
荐
                                                        JS逆向 百度翻译
鼠标悬浮于i 变量上,复制弹出窗口中的内容,将 i 这个常量添加到我们的code.js 脚本中
荐
                                                        JS逆向 百度翻译
然而又报出了新错误,没事我们继续分析。这里毕竟是用人家的js代码,而不是看懂js代码实现sign的原理自己写python代码,所以要屈从于网站脚本,如果你有JS基础可以选择自己用python写原理,不过这种方法较为耗时就是了。
我们还是按部就班,一直下一步↓ 往下运行
荐
                                                        JS逆向 百度翻译
显然这就是我们需要的n ,而n是一个函数,我们将红框中的代码复制进code.js中,然后运行程序
荐
                                                        JS逆向 百度翻译
终于啊,成功了!!!

四、总结
从中你也可能窥探到了JS逆向真正麻烦的地方就是在网站上调试,寻找想要的代码和参数的构成,需要打断点,下一步执行,查询变量等操作。这是个需要耐心和时间的过程,说实话是真的需要毅力的,学习初期不知从何入手,就找现成的视频教学,最好是近期的而且讲解步骤详细的那种,这样在学习中才不会因为不知道下一步该怎么做而放弃。最重要的还是学习方法,这样我们就能已不变应万变,将知识转化成自己内在的东西,也就是技能和技术的提升,技能和技术没法一日而成,只有日积月累。
本文参考讲解:【Python爬虫】百度翻译JS逆向

本文地址:https://blog.csdn.net/weixin_43594279/article/details/107216474

上一篇:

下一篇: