• python的破解重构加密


     目标网站:闪职——登录

     

    模拟登录

    • 使用python重构了rsa加密方式 得到加密之后的密码
    • 从网页源码中获取到了csrfmiddlewaretoken和pk
    •  携带data发送post 进行了模拟登录

    以后碰到RSA加密的:

    • 如果说加密代码不是很长 复制所有的
    •  如果加密代码比较长 最好使用python去重构一下加密过程(需要得到重构时所必须的一些参数) 重构的时候 要特别注意 有没有对一些细节方面做小处理(如果有 还是要回归js代码的)

    setPublicKey ---> RSA
    encrypt decrypt  -->  DES/AES

    在爬取的时候 不一定要知道具体的加密算法

    具体步骤:

     

    找到表单数据 ,发现password被加密

    然后取源代码看看看,发现有公钥pk,所以用RSA加密算法重构(encrypto

     具体代码:

    闪职.py

    1. import requests
    2. from lxml import etree
    3. from python重构RAS加密算法 import encrypto
    4. header = {
    5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',
    6. 'Cookie': 'shanzhi_kmer=h9wm0ptr9kcuza527as3a43a6zuwzsid; csrftoken=yHdq0AaPEO1pyiC2zji4MmeyLRNcXVcZLNoHCT3izQ52lwvASvHv0jgsGG9kEXUN'
    7. }
    8. def get_data():
    9. # 目标url
    10. url = 'http://shanzhi.spbeen.com/login/'
    11. # 请求头
    12. res = requests.get(url,headers=header)
    13. data = res.text
    14. return data
    15. def deal_data(text):
    16. tree = etree.HTML(text)
    17. # 获取csrfmiddlewaretoken
    18. csrfmiddlewaretoken = tree.xpath('//input[@name="csrfmiddlewaretoken"]/@value')[0]
    19. # 取pk
    20. pk = tree.xpath('//input[@id = "pk"]/@value')[0]
    21. return csrfmiddlewaretoken,pk
    22. def rebuilt(pk,csrfmiddlewaretoken):
    23. # 老密码
    24. old_pwd = 'logic_00'
    25. # 加密后的密码
    26. new_pwd = encrypto(pk,old_pwd)
    27. # 构造表单数据
    28. data_dict = {
    29. "username":'logic_00',
    30. "password": new_pwd,
    31. "csrfmiddlewaretoken":csrfmiddlewaretoken
    32. }
    33. url = 'http://shanzhi.spbeen.com/login/'
    34. res = requests.post(url,data=data_dict,headers=header)
    35. print(res.text)
    36. if __name__ == '__main__':
    37. text = get_data()
    38. csrfmiddlewaretoken, pk = deal_data(text)
    39. rebuilt(pk,csrfmiddlewaretoken)
    python重构RAS加密算法.py
    1. # pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
    2. from Crypto.PublicKey import RSA
    3. from Crypto.Cipher import PKCS1_v1_5 as cry_pksc1_v1_5
    4. import base64
    5. def encrypto(pk, password):
    6. """
    7. 使用公钥对密码进行加密处理
    8. :param pk: 公钥
    9. :param password: 明文密码
    10. :return: RAS加密之后的密码
    11. """
    12. public_key = "-----BEGIN PUBLIC KEY-----\n{}\n-----END PUBLIC KEY-----".format(pk)
    13. # 导入公钥 返回一个RSA秘钥对象
    14. rsakey = RSA.importKey(public_key)
    15. # 对需要加密的内容进行PKCS#1 v1.5加密
    16. cipher = cry_pksc1_v1_5.new(rsakey)
    17. # 使用公钥加密密码 密码必须是二进制
    18. miwen_encode = cipher.encrypt(password.encode())
    19. # 再使用Base64对类似字节的对象进行编码
    20. cipher_text = base64.b64encode(miwen_encode).decode()
    21. return cipher_text
    22. if __name__ == '__main__':
    23. pk = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaP" \
    24. "+rYm6rqTMP565UmMU6YXq46KtAN3zwDSO8LNa15p0lJfsaY8jXY7iLsZqQZrGYr2Aayp6hYZy+Q+AMB" \
    25. "/VUiSpD9ojPyOQ7r9jsf9jZbTOL4kj6iLZn37fEhp4eLvRgy5EJCyQoFyLCsgLechBTlYl2eA95C3j4ZUFhiV6WFHQIDAQAB "
    26. new_password = encrypto(pk, '123456')
    27. print(new_password)

    然后就可进行重构后的模拟登录

  • 相关阅读:
    SwiftUI Swift 5.7 新功能大全,告诉什么时候Swift直接调用C++
    C#事件订阅发布实现原理详解
    Hbase权限访问命令、报错:Grant无权限(acl文件少了)
    C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程_概念_改进和模型_copyit.cpp
    MySQL进阶-sql执行时间的查询
    Spring Cloud 微服务项目实战笔记(一)
    Camera-MTK OpenCamera时序以及耗时
    CC1101一款低成本的sub- 1ghz 收发器 芯片
    Paradigm 介绍 Goldfish:PoS 以太坊中 LMD GHOST 分叉规则的安全替代品
    15.操作系统死锁处理
  • 原文地址:https://blog.csdn.net/qq_51179608/article/details/126582054