• 爬虫 — Js 逆向


    一、概念

    1、爬虫

    使用任何技术手段,批量获取网站信息的一种方式。

    2、反爬虫

    使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。

    在这里插入图片描述

    3、加密解密

    一个信息干扰的过程,保证固定的人可以看到信息,把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。

    4、加密

    对原来为明文的数据按照某种算法进行处理,变成不认识的加密数据。

    5、步骤

    在浏览器加密,找到加密方式,模拟加密方式,进行加密,将加密的数据放到字典,携带参数,正常发送 post 请求。

    二、常用加密方式

    1、加密方式

    数据加密方式描述主要解决的问题常用算法
    对称加密指数据加密和解密使用相同的秘钥数据的机密性DES,AES
    非对称加密也叫公钥加密,指数据加密和解密使用不同的秘钥——密钥对身份验证DSA,RSA
    单向加密指只能加密数据,而不能解密数据数据的完整性MD5,SHA 系列算法

    2、常见加密算法

    • MD5(Message Digest Algorithm 5)
    • DES(Data Encryption Standard)
    • AES(Advanced Encryption Standard)
    • RSA(Rivest-Shamir-Adleman)

    3、JS 中常见的算法

    • 线性散列 MD5 算法
    • 对称加密 DES/AES 算法
    • 非对称加密算法 RSA
    • base64 加密算法

    4、MD5 算法

    MD5 是一种被广泛使用的线性散列算法,可以产出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性。

    MD5 加密之后产生的是一个固定长度(32位或16位)的数据,密文不能推算出明文,不可逆。

    4.1、MD5 加密网站

    https://www.cmd5.com/

    https://cdn.bootcdn.net/ajax/libs/blueimp-md5/1.0.1/js/md5.js

    4.2、特点

    数据多长,长度都是都是固定的(32位或16位)。

    加密的数据不是随机,因为使用的相同的算法对相同的数据进行处理,所以结果都是相同的。

    无法从加密的数据还原到以前的密文。

    5、DES/AES 算法

    对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的秘钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该秘钥(称为对称密码),是一种对称加密算法。

    数据发送方将明文以及密钥一起经过特殊加密算法成为密文之后,将它发送出去。接收方收到密文之后,需要使用加密用到的相同密钥以及相同的算法进行密文解密。

    加密方与解密方拥有相同的密码本。

    DES 和 AES 的区别

    • 加密后密文长度不同

      DES 加密后密文长度是8的整数倍

      AES 加密后密文长度是16的整数倍

    • 安全度不同

      一般情况下 DES 足够安全

      如果要求高可以使用 AES

    • DES 和 AES 切换只需要修改 CryptoJS.DES =>CryptoJS.AES

    js 语法

    加密:encrypt()

    解密:decrypt()

    特点

    加密和解密都是使用相同密钥加密算法,也称为单密钥加密,公开的。

    缺点

    使用的都是同一把密钥,一方密钥泄露,传输的数据就存在安全风险。

    其它对称加密算法

    3DES(Triple Data Encryption Standard),TDEA(Triple Data Encryption Algorithm),RC2(Rivest Cipher 2),RC4(Rivest Cipher 4)

    6、RSA 算法

    一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。

    非对称加密需要2个密钥

    公开密钥(publickey):公钥,加密的,公开的

    私有密钥(privatekey):私钥,解密处理,私有的

    公钥和私钥是一对

    js语法

    setPublickey:设置公钥

    其它非对称加密算法

    RAS(Rivest-Shamir-Adleman),DSA(Digital Signature Algorithm),ECC(Elliptic Curve Cryptography)

    7、base64 算法

    伪加密算法,经过它处理的数据非常像密文数据,不是严格意义上的密文,实际上就是一种编码。

    base64 是一种使用 A—Z,a—z,0—9,+,/ 这64个字符来表示任意二进制数据的方法。

    实现算法的第三方工具

    PyCryptodome

    安装方式

    pip install pycryptodome

    三、环境配置

    1、node.js 环境配置

    node.js 下载官网

    安装步骤

    1、点击 Next;

    在这里插入图片描述

    2、选中勾选框后,点击 Next;

    在这里插入图片描述

    3、选中安装路径后,点击 Next;

    在这里插入图片描述

    4、点击 Next;

    在这里插入图片描述

    5、点击 Next;

    在这里插入图片描述

    6、点击 Install;

    在这里插入图片描述

    7、点击 Finish;

    在这里插入图片描述

    8、安装完成。

    9、验证安装。

    按 win + R,输入 cmd 后,按回车。

    在这里插入图片描述

    在终端窗口输入以下命令:

    node -v 显示安装的 node.js 版本

    npm -v 显示安装的 npm 版本

    在这里插入图片描述

    2、PyCharm 环境配置

    需要使用 PyCharm 专业版的,才能执行 js 代码。

    点击进入 PyCharm 官网下载

    1、按电脑系统选择对应的专业版安装包;

    在这里插入图片描述

    2、下载好安装包后,点击安装,点击 Next;

    在这里插入图片描述

    3、更换安装路径后,点击 Next;

    在这里插入图片描述

    4、选中选择框后,点击 Next;

    在这里插入图片描述

    5、点击 Install;

    在这里插入图片描述

    6、点击 Finish;

    在这里插入图片描述

    7、重启电脑;

    8、下载激活码文件后,将文件放在 PyCharm 安装目录下,并解压好;

    点击下载激活码文件

    在这里插入图片描述

    9、在解压后的文件夹里找到 scripts 文件夹,打开后,找到 install-current-user.vbs 文件,双击打开,

    点击 “OK” 或者 “确定”,然后等 "Done"弹出,3分钟内未弹出请重新执行 vbs;

    在这里插入图片描述

    10、双击打开 PyCharm 软件,选中"Activate PyCharm"和"Activation Code";

    在这里插入图片描述

    11、在解压后的激活码文件里找到 code 文件夹后,找到 PyCharm.txt 文件,并打开,复制里面的代码;

    在这里插入图片描述

    12、将复制后的代码粘贴到"Activation Code"里后,点击 Activation;

    在这里插入图片描述

    13、点击 Continue;

    在这里插入图片描述

    14、点击 Plugins 安装插件,搜索 nodejs,点击 Install 安装后,重启 PyCharm;

    在这里插入图片描述

    15、创建 js 文件;

    在这里插入图片描述

    16、编写 js 代码后,运行测试一下,在控制台打印出数据即为成功;

    // 定义函数
    function d1(){
        // 打印数据
        console.log('hello world')
    }
    // 调用函数
    d1()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    17、模拟 js 构造出的密文数据;

    // 定义函数
    function d1(e, el){
        // 返回的数据
        return {'a':e, 'b': el}
    }
    // js 已经构造出密文数据,给到 python 文件当中的代码
    console.log(d1('hello'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    18、Python 代码调用调试好的 js 代码。

    # 安装方法:pip install PyExecJs -i https://pypi.tuna.tsinghua.edu.cn/simple
    import execjs  # 用于执行 JavaScript 代码的库
    
    # 定义函数
    def get_js(js_path, fuc_name, *func_args):
        '''
        :param js_path:  js代码的文件路径
        :param fuc_name: 调用的js函数名称
        :param func_args: 传入的参数
        :return:
        '''
        # 1. 读取 js 代码
        with open(js_path, 'r', encoding='utf-8') as f:
            js_code = f.read()
    
        # 2. 编译 js 代码
        cjs = execjs.compile(js_code)
    
        # 3. 执行 js 代码,函数后面跟上一个参数
        print(cjs.call(fuc_name, func_args))
    
    # 调用函数
    get_js('demo.js', 'd1', 'hello', 'world')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

  • 相关阅读:
    一文弄懂 Diffusion Model
    视频监控系统/视频汇聚平台EasyCVR平台页面展示优化
    diffusion model
    一本通 1344【最短路】
    (免费分享)基于ssm在线点餐
    汽车协议学习
    Cmake、Qt与VS编译VTK(生成QVTK)
    pytest-yaml 测试平台-2.支持上传YAML格式用例
    Netty 入门 — Bootstrap,一切从这里开始
    2023年首届天府杯数学建模国际大赛问题A思路详解与参考代码:大地测量数据中异常现象的特征和识别
  • 原文地址:https://blog.csdn.net/muyuhen/article/details/132990602