Js逆向学习—RSA加密网站解析与python还原加密

在这里插入图片描述
今天的目标是 中大网校 的模拟登录,看图可知passwordLogin是登录请求,这里是对password进行了某种加密,想要模拟登录成功就需要知道密码的加密逻辑。
在这里插入图片描述
首先点开Initiator,查看该请求发送过程中执行了哪些js代码,执行顺序为从下到上,jquery开头的js文件pass,剩下的挨个去点击,找相关加密逻辑。
在这里插入图片描述

点开utils文件,在相关位置打下断点再次发送请求,可以看到此处执行的是url后缀为getTime的请求,返回文章最上方看到,此请求为最先发出的请求,跟密码加密无关,但响应返回了貌似时间戳的数据。我们先往下执行
在这里插入图片描述
passwordLogin请求了,到这一步password已经完成了加密。所以需要往前去找加密逻辑,找到右边的call stack,往下一步点击
在这里插入图片描述
取消前面的断点,在此处打上新断点,继续发送请求
在这里插入图片描述
看断点之前执行的代码,拿到加密逻辑password:encryptFn(pwd+’’+ress.data)
此处pwd还是未加密状态,很明显encryptFn就是加密函数,此处传值pwd+ress.data,data就是时间戳,也就是说在登录过程中,首先getTime请求获取时间戳,把我们的明文密码+返回的时间戳做了拼接加密。接下来,进入encryptFn函数,看看该函数做了什么操作。
在这里插入图片描述
进入该函数之后再次打断点,重新发送登录请求,可以看到一个publicKey,有点经验的小伙伴就该猜到了,这是公钥,该处js函数的含义就是new了一个名为‘o’的加密对象,传入publicKey,然后加密字符串‘e’,这里e就是前面说到的密码明文+时间戳。很明显就是一个RSA加密。接下来就是python还原RSA加密过程。

    message = '1231231644397774701'
    publicKey = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA5Zq6ZdH/RMSvC8WKhp5gj6Ue4Lqjo0Q2PnyGbSkTlYku0HtVzbh3S9F9oHbxeO55E8tEEQ5wj/+52VMLavcuwkDypG66N6c1z0Fo2HgxV3e0tqt1wyNtmbwg7ruIYmFM+dErIpTiLRDvOy+0vgPcBVDfSUHwUSgUtIkyC47UNQIDAQAB\n-----END PUBLIC KEY-----"
    rsa_key = RSA.import_key(publicKey)
    rsa_obj = PKCS1_v1_5.new(rsa_key)
    rsa_message = rsa_obj.encrypt(message.encode('utf-8'))
    print(base64.b64encode(rsa_message).decode('utf-8'))

message是要加密的明文+时间戳,这里的时间戳是请求getTime获取的时间戳,也就是说在发送模拟登录请求之前要先通过session请求该接口获取时间戳,保持好会话,然后再模拟登录才能得到服务器响应登录成功。至于验证码大家自行解决。本文仅提供解决思路,不提供完整代码。
感谢各位大佬浏览,有不足之处请指教!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值