文章目录
- 抓包
- 密码p的加密算法
- 1.全局搜索参数
- 2.加密函数
抓包
输入账号和错误的密码,可用看到如下的两个包:
- check: 里面包含密码加密时需要的参数及发送登录时需要的参数
check的响应:
ptui_checkVC('0', '!UIO', '\x00\x00\x00\x00\x74\xca\x4f\x59', 'ef787cccd192b4015ef02ef3cadd401752f24698773346d283ed15dc9eb4411c114ceaa6c6cf0e42a0d3eb4e283002e8134762f703e28d9d', '2', 'LbWDeYJ7bDeril9lavLPlgsUnx7TEpsopDEkMbPO4Y7A8cXuseUP7cvmLDsEEPVsKhmgDtlOTas_', '6881368123460274233')
'!UIO': 验证码
'\x00\x00\x00\x00\x74\xca\x4f\x59': 加密时需要的
第四项为发送登录请求时的 ptvfsession 参数
第六项为发送登录请求时的 ptdrvs 参数
最后一项为 发送登录请求时的 sid 参数
- login: 登录请求的包
需要验证的参数有verifycode(验证码), pt_verifysession_v1(ptvfsession), p(加密的密码), ptdrvs, sid
密码p的加密算法
1.全局搜索参数
在全局搜索时,由于p太广泛,我就选择了pt_verifysession_v1
来搜索
直接点击,进入
2.加密函数
果不其然,在下面发现了密码p的加密函数
- e:密码
- salt:check接口返回的
\x00\x00\x00\x00\x74\xca\x4f\x59
-->这里需要注意,这个值是QQ号通过uin2hex
函数转化的(巨坑) - verifycode: 验证码
- safe: 空值
废话不多说,打个断点,重新输入密码进行登录,会在这里断住,然后单步进入函数,会进入如下地方
然后就是一步一步跟,这里注意,传入参数时,e应该是账号,然后通过uin2hex
转化
在跟断点时,注意将这个加密函数的整体扣下来作为一个大函数,将u["default"], a["default"],s
也整体扣下来,这样就会避免作用域和漏函数的问题
注意在扣代码时将这里的括号带上,和源代码一样,如果放在加密逻辑不确定会不会出现出值但是不通过验证的情况
扣代码没什么好说的,只需要细心即可