故事背景:

在获取某网站接口数据时,发现其请求的 headers 中的参数 使用了 AES算法加密 ,并对其进行校验,在此简单记录下自己的踩坑历程。

AES简介:

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。对称加密算法也就是加密和解密用相同的密钥。

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB
CBC:加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)
ECB:加密不需要iv
AES,CBC: 加密的python实现

AES 加密的参数
AES 加密主要有以下几个参数(坑):

key:加密的时候用秘钥,解密的时候需要同样的秘钥才能解出来。
word:需要加密的参数。
model:aes 加密常用的有 ECB 和 CBC 模式
iv:偏移量 ,这个参数在 ECB 模式下不需要,在 CBC 模式下需要。

参数条件:

key:必须是16位字节或者24位字节或者32位字节
word:字节长度需要是16位的倍数

python 模块安装:
**Windows** :pycryptodome 模块:  pip install pycryptodome 
   **Linux** pycrypto模块 :   pip install pycrypto

现在开始进入正题

找到目标接口,查看他的请求头 你会发现它里面的 参数: authorization 是被加密的,

经过测试的出,此参数的值是一次性的,不能被二次使用

拒绝请求:不对接口返回:未授权,二次使用返回:签名已失效

Aes 秘书和偏移量 aes偏移量是什么_加密方式


全局搜索 authorization

Aes 秘书和偏移量 aes偏移量是什么_加密算法_02


进入第一个js文件查找可能存在的加密段落,打上断点顺藤摸瓜找到加密的地方

Aes 秘书和偏移量 aes偏移量是什么_Aes 秘书和偏移量_03


Aes 秘书和偏移量 aes偏移量是什么_加密方式_04


根据断点查到的信息可以 authorization 是由 Object(kt.d)(a, “WTAHAPPYACTIVITY”) 方法生成的
a 变量中 就只有一个 n 变量,根据断点显示出来的结果可以看得出 n 为 时间戳, 那么现在就进入Object(kt.d)看看

Aes 秘书和偏移量 aes偏移量是什么_加密方式_05


Aes 秘书和偏移量 aes偏移量是什么_Aes 秘书和偏移量_06


可以看得出 E 函数 就是加密的核心代码: 为 AES加密 + ECB 模式 + Pkcs7, e为key密钥, 知道了这些 我们就可以通过
python 的Crypto模块将其加密模拟出来了,经历千辛万苦,终于还原了加密方式,并且能超过的访问该接口拿到数据了,
话不多说,直接上代码

Aes 秘书和偏移量 aes偏移量是什么_python爬虫_07


Aes 秘书和偏移量 aes偏移量是什么_加密算法_08