当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 荐 JS逆向 百度翻译

荐 JS逆向 百度翻译

2020年07月11日  | 移动技术网IT编程  | 我要评论

JS逆向 百度翻译

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

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

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

2、直接搜索含有"sign"这个参数的链接的片段,寻找生成机理的代码。这里为什么是网站片段呢,一般脚本的构造都会是网站名先于函数名和变量名嘛,sign就是变量,检索网站片段会更容易定位到sign位置。
在这里插入图片描述
在这里插入图片描述
查找后发现只有一个备选项,直接点进去这个脚本,然后把不容易观看的代码格式化一下,按下“{}”。
在这里插入图片描述
在这里插入图片描述
然后可以看到我们需要的参数都在这里被定义了,而且右边还直接给我打好了断点。不过保险起见,还要在黄色行也打上断点。
接下来,我们刷新界面,网站会停在我们打了断点的地方,而且一些数据会被加载进来,后面将鼠标悬浮在sign旁边的y上,就会看到这样的图:
在这里插入图片描述
接下来点进去弹窗的"e"的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代码的结构不要出错,认清大括号的匹配是否正确。
可是这样运行代码会发现是会报错的!!
在这里插入图片描述
报错了没事,不要慌,只是code.js里的 i 没有被定义,编译的时候找不到 i 值而已。只要回到之前的网站界面继续分析就好了。

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网