中国裁判文书网接口解密

中国裁判文书网接口解密

  • 前景提要
  • 具体实现
    • 数据解密
    • 传参解密
  • 结语

前景提要

最近有个采集中国裁判文书网的需求,做下来觉得接口加密方式还挺有意思的,分享一下解密过程

具体实现

数据解密

首先找到页面上对应数据来源于哪个接口
中国裁判文书网接口解密_第1张图片
很明显是某种加密方式,密钥和密文都在接口中了,直接开搜secret
中国裁判文书网接口解密_第2张图片
找到了JS代码段,看样子是DES3加密,打个断点开始调试
中国裁判文书网接口解密_第3张图片
看起来就是这个了,但是DES3是自己写的var,再step into看看
在这里插入图片描述
说实话看到这一坨代码,头挺痛的(所以把所有JS代码都拥挤在一起不空行也是高效的反爬手段啊),但没办法,要恰饭的嘛,最后梳理出来了关键代码。

CryptoJS.TripleDES.decrypt(b,CryptoJS.enc.Utf8.parse(c),{iv:CryptoJS.enc.Utf8.parse(a||DES3.iv()),mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7

如果不考虑前端兄弟故意命名错误来搞心态的话,应该是标准的DES3加密,CBC方法,填充方式为pkcs7,然后问题就只剩下了a||DES3.iv()了,调试的时候发现a是undefined,只剩下DES3.iv()了,点进去看看,发现是

iv:function(){return $.WebSite.formatDate(new Date(),"yyyyMMdd")}

一目了然,偏移量就是当前日期的yyyyMMdd格式,放到DES3在线解密工具上去看看
中国裁判文书网接口解密_第4张图片

中国裁判文书网接口解密_第5张图片
解密成功,没啥问题,直接开写解密代码就可以了,网上的各种语言的DES3解密代码都有很多,这里给出一个python的

import pyDes
import base64
def decrypt_py(data, secretkey,iv):
    des_obj = pyDes.triple_des(key=secretkey, IV=iv, padmode=pyDes.PAD_PKCS5,mode=pyDes.CBC)

    decodebs64data = base64.b64decode(data)

    s= des_obj.decrypt(decodebs64data).decode('utf-8')
    x=json.loads(s)
    # dict_s=eval(s)
    return x

传参解密

光解密了数据也不够,传参不知道就拿不到数据,总不能selenium+fiddler大法好吧(其实一般情况下确实可以,但是这个数据量太大,用selenium得采到天荒地老)
中国裁判文书网接口解密_第6张图片
一共五个,Cookie太常见了,就不介绍了,docId应该是文章的唯一id,可以不用管,cfg看起来也是固定不变的,直接搜索chipher
中国裁判文书网接口解密_第7张图片
找到了对应的函数,发现只和当前日期有关,可以放着了,再搜索RequestVerificationToken
在这里插入图片描述
发现完全是随机生成,也不用管了。
所以最终发现定时更新cookie和chiphertext,其他三个固定住就可以正常采集了。最后再解析一下或得到的请求就搞定了。

结语

研究的时候遇到了蛮多的问题的,一开始看到那一大堆js代码说实话就不想看,想着直接用python运行js代码直接绕过去,结果发现那段代码引用的jquery,搞了半天没搞出来,硬着头皮去逆向js了,后来发现也没那么难,就是一个简单的3DES而已。所以该逆向还是要逆向啊。

你可能感兴趣的:(python,爬虫)