主页 > 软件教程 > 解析高考志愿信息网站爬虫分析(3)

解析高考志愿信息网站爬虫分析(3)

("u3010", "")['replace']("u3011", "") string_list.push($lvd3['replace']("u3010", "")['replace']("u3011", "")); } else { $lvd3 = $lvd3['replace'](/[g-t]/ig, ""); YB2 += "&#x" + $lvd3 + ";" string_list.push("&#x" + $lvd3 + ";") } }); return string_list } """ ctx = js2py.eval_js(code) string_list = ctx.call('_cnDeCrypt', string) ret = '' string_dict = get_string_dict() for string in string_list: if string.startswith('&#x'): ret += string_dict['uni' + string.replace('&#x', '').replace(';', '').upper()] else: ret += string return ret

在这里, 我修改了部分js的代码, 便于python解析, 网站本身的代码我就不完整的贴上来了, 前面的截图都有. 在这里有一个坑, 如果用execjs遇到转义字符会有问题, 当然这个代可以手动吧转义代码去掉, 或者用另一个库js2py.

到这里, 返回数据的解密就完成了, 下面我们来看一看请求的参数是如何加密的.

采用之前的方案, 在url处下断点, 查看找到关键函数, 我们可以发现这里调用是youzyEpt这个函数进行的加密

从源码中找到这个函数, 先来看看.

显然这里采用的AES进行的加密, 这么明显, 不过多解释了, 我们来看一下他的密钥是怎么得到的, 查看源码, 发现3个关键文件

读一下代码, 不难发现密钥是: [11, 23, 32, 43, 45, 46, 67, 8, 9, 10, 11, 12, 13, 14, 15, 16], 下面我们直接用Python写加密算法吧, 因为我不想引入js的aes加密算法了, 调用js还麻烦.

from Crypto.Cipher import AESdef params_encrypt(data):    key = bytes([11, 23, 32, 43, 45, 46, 67, 8, 9, 10, 11, 12, 13, 14, 15, 16
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!