图源:AI绘画
aHR0cHM6Ly96YmNnLnN6bnN5eS5jbi9ub3RpY2VEZXRhaWwvMzk3OS80LzY=
今天群友问了一个站,正好拿来当文章素材
刷新页面可以看到下面两个请求
每个请求都有以下两个加密参数
全局搜索epcos
,可以定位下面的位置
打上断点,进一步分析可以定位到下面的代码位置
通过上下文分析可以知道这里使用了 AES ECB 加密以及 RSA 公钥加密
先来看 AES 加密
生成随机的 16 位字符串作为 AES 的 key
完成对明文请求 url 参数的加密
之后进入了 RSA 公钥加密部分
将上面生成 AES key 使用公钥 p 加密
得到上面的计算结果之后,分别的赋值
content: c,
aesKey: u
完成之后回到上层 epcos
赋值的地方,这里又对刚刚得到的 c 做了一次编码
ps:刚刚开始看这个站的时候我就忘了这一步,以为只是简单的 url编码就没有看了,其实在里面做了一次 base64
这里的 ecodeURL 里面做了Base64编码和字符串替换,把刚刚计算的 c Base64编码后把结果中的 = 替换为空,把+替换为 -,编码后才是最后请求中epcos
的值
总结以下第一步请求
1、随机生成 16 位字符串作为 AES 加密 key,将请求的 url 参数作为加密内容
2、将生成的 key 用 RSA 公钥加密,得到 header 中的 aesKey
3、将1中的加密结果通过 Base64 编码并替换 = 和 + 字符,得到请求链接中的epcos
将上述部分的计算使用 Python 还原,会得到的加密的返回结果
返回得内容是
熟悉的字段估计加密也是一样的,在上一步加密的代码往上翻翻就可以找到解密的代码了
有了上面的铺垫之后就比较简单了
先是用私钥 f 解密返回值中aesKey 得到明文的 aeskey
使用 aeskey 参与 AES ECB 解密返回值中的 content 获得明文的招标内容
我们从解密的明文中获取到字段 announcementKey 的值
这个值是下载 pdf 请求的加密参数
还是从加密的断点中可以发现
有了上面这个 fileKey 之后就可以下载 pdf 了,除了请求链接和加密的内容不一样外,加密过程和第一次加密完全相同
完事~
上就是今天的全部内容了,咱们下次再会~