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.csdn.net/yt_xy/article/details/108863258 博主

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

# 解密
# !!!!!!!!
# 本人参考https://blog.csdn.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)

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值