python爬虫-逆向实例小记-1

注意!!!!某政府网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!!

案例分析

第一步:下图标注出来的是获取请求断点,断点出自 请求url

第二步:有点玄学了(鄙人才疏学浅,所以会通篇进行手动实现响应这个过程可以看到一些重要信息)。手动实现断点后响应过程

第三步:通过手动进行下一步会得到每一步的操作后的内容(与调试debug是一样的)

第四步:从一大串响应内容到得到页面正常的内容,调用了f m(t)函数, 鼠标放在该位置,会得到相关的.js 文件。点进去即可

第五步:展示一下: f m(t) 函数。通过这个函数可以很肯定的是,使用了AES CBC模式pkcs7 填充。从下图可知,f 是key ,h 是偏移量(vi), n 是通过hex 和base64 包装后的一大串内容

第六步:一步一步执行,就可以看到从“乱码”到内容的关键过程。

代码

python AES部分参考https://blog..net/yt_xy/article/details/108863258 博主

# 十六进制转base64
import codecs
hex_string =     # 十六进制数值
b64_string = codecs.encode(codecs.decode(hex_string, hex), base64).decode()

# 解密
# !!!!!!!!
# 本人参考https://blog..net/yt_xy/article/details/108863258 博主
from Crypto.Cipher import AES
import base64
class Encrypt:
    def __init__(self, key, iv):
        self.key = key.encode(utf-8)
        self.iv = iv.encode(utf-8)

    # @staticmethod
    def pkcs7padding(self, text):
        """明文使用PKCS7填充 """
        bs = 16
        length = len(text)
        bytes_length = len(text.encode(utf-8))
        padding_size = length if (bytes_length == length) else bytes_length
        padding = bs - padding_size % bs
        padding_text = chr(padding) * padding
        self.coding = chr(padding)
        return text + padding_text

    def aes_encrypt(self, content):
        """ AES加密 """
        cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
        # 处理明文
        content_padding = self.pkcs7padding(content)
        # 加密
        encrypt_bytes = cipher.encrypt(content_padding.encode(utf-8))
        # 重新编码
        result = str(base64.b64encode(encrypt_bytes), encoding=utf-8)
        return result


    def aes_decrypt(self, content):
        """AES解密 """
        self.pkcs7padding(content)
        cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
        content = base64.b64decode(content)
        text = cipher.decrypt(content).decode(utf-8)
        return text.rstrip(self.coding)

if __name__ == __main__:
    key = ******
    iv = ****
    a = Encrypt(key=key, iv=iv)
    d = a.aes_decrypt(b64_string)
    print("解密:", d)

仅作为笔记记录,如有问题请各位大佬来指导

经验分享 程序员 微信小程序 职场和发展