声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
网站
aHR0cHM6Ly9wYXNzcG9ydC53ZWliby5jb20vc3NvL3NpZ25pbg==
本文章主讲微博登录部分,极验4网上文章还是挺多的,这里就不过多阐述,验证码部分有疑问欢迎私信讨论。
极验4文字点选
加密方式还是RSA+AES,新版可以通过搜mode:进行定位,可以直接通过python调库完成这部分加密,比扣js速度要快一点,并且通用性更强。
微博登录
微博登录流程还是挺繁琐的,下面主要按照请求流程进行讲解。
1、第一请求signin会返回‘X-CSRF-TOKEN’,这个在后续会作为请求头和cookie的一部分
2、第二请求config会返回nonce、pubkey、rsakv和servertime(可不用)用于后续的密码加密
3、第三请求login,需要注意的是这个是请求第一次出现的login,参数不需要携带cid,这次的login请求就是用于返回这个cid的
4、第四请求gt,用于验证极验4返回的参数是否有效,无需返回内容
5、第五请求login,这次需携带cid请求,请求后返回登录结果
signin
这个请求没有任何加密,直接请求返回cookie即可,另外获取极验4的captcha_id的js文件也是从这个请求结果中获取的。
config
这个请求也没有加密,请求直接返回对应参数即可。
login
第一个login请求只有pass是密码经过加密的,rsakv从config请求返回,由于config有返回pubkey,可想而知这个rsa加密应该会先设置公钥再进行加密,所以直接搜索setpublickey看看能不能搜到结果,结果这个网站是可以搜到的,也算是一个小技巧。
这加密看着就像是标准库的,直接python调库即可
def get_rsa_code(text, public_key):
# RSA public key
# public_key = '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrKjhWhmGIf6GAvdtcq9XyHHv9\nWcCQyy0kWoesJTBiiCcpKT5VBjUFCOf5qju3f0MzIxSQ+RX21jxV/i8IpJs1P0RK\n05k8rMAtt4Sru45CqbG7//s4vhjXjoeg5Bubj3OpKO4MzuH2c5iEuXd+T+noihu+\nSVknrEp5mzGB1kQkQwIDAQAB\n-----END PUBLIC KEY-----'
# 将文本转换为字符串并编码
text = str(text).encode('utf-8')
# 导入公钥
rsa_key = RSA.importKey(public_key)
# 创建加密器
cipher = PKCS1_v1_5.new(rsa_key)
# 加密数据
encrypted = cipher.encrypt(text)
return encrypted.hex()
加密的e其实就是通过一个时间戳和config返回的nonce通过\t拼接,再通过\n拼接密码。但可以看到结果加密后还经过了Wh加密,跟进r.encrypt加密看看还有没有什么猫腻。
发现加密后的结果是经过vn函数,再返回经过Wh函数得到最终结果。
但其实vn是将结果转成base64,Wh再转回16进制,结果和之前是一致的,所以和两个函数无需理会,至此pass加密完成。
请求返回结果
gt
gt请求没啥加密的,key是上面login返回的mfa_id,lot_number、captcha_output、pass_token、和gen_time是极验验证返回的参数,callback前半部分固定,后面数字部分是一个时间戳。
login
最后一个login其实也没啥需要处理的了,pass和第一个login的加密方式是一样的,需要注意的是加密的参数第一个时间戳和第一个login的是不一致的,cid是login请求返回的mfa_id,rsakv是config返回的,至此微博登录分析完成。
结果展示
python构造请求调用我就不展示了,没啥特别的,就直接展示结果了
总结
需要完整代码的可以私信我,逆向分析中有任何疑问也可以私信我一起讨论分析,谢谢大家!!!