本文仅用于学习参考,请勿于商用
- 登录展示:
点击login,出现验证码。
输入验证码,点击login,现登录信息如下。
post发送四个请求,账号,密码,验证码,UA,及前三都都是加密的参数
- JS过程
全局搜索 loginseccodeverify 参数
很快找到相应加密参数来源
第一个加密,AES加密
第二个加密,base64
第三个加密
密码那里就单独多了一个md5加密。
当然,还有encryptkey参数。后面参数测试,不需要每次都生成,只要同规则的参数就行,就是一真用 "1aa8bef48f4b11149a8e5263ade3c965c23425ae8bdbc4aab322bd26f103d6f8"参数都行
在此之前,还发送了两个请求,一个是获取服务器的publickey,一个是发送服务器解密key
查找 “keycryp” 参数
此时断点已经生成,那么慢慢往回退,查找生成方式
此时,"keycryp"是RSA加密,publickey从服务器返回。
至此,JS加密告别一段落。
加法验证码计算(这里分两种)
- 接打码平台:
- 深度学习方式:
请查看我的另一文章:https://blog.csdn.net/fm345689/article/details/116852673
通过上面过程,登录授权过程就完成了。
登录授权步骤:
获取publickey
发送解码密钥,到服务器
登录授权
说明 | 请求方式 | 请求链接 | 请求参数 |
---|---|---|---|
获取相关cookie | get | 请求网站相关链接后返回cookie | |
获取验证码 | get | /seccode.php?update=0.18529641790017615 | |
获取publickey | get | /ajax_login.php?action=CryptionData&getPublicKey=true&timeid=1621061157120 | |
发送解码密钥,到服务器 | post | /ajax_login.php?action=CryptionData&handshake=true&timeid=1621061157120 | keycryp: rE****KM= |
登录授权 | post | /ajax_login.php?action=LogApp | username: 5***303d password: 5***3d loginseccodeverify: 5***303d useragent: **6 |
AES加密,python调js代码
def execute_js(answer,message):
# $.jCryption.str2hex(Base64_2.encode($.jCryption.encrypt(username, encryptkey)))
js_code1 = """
var exejs = function(){
const CryptoJS = require('crypto-js');"""
js_code2 = """
var data1 = CryptoJS.AES.encrypt('{}', '{}').toString();
""".format(str(answer),message)
js_code3 = """
var data2 = new Buffer(data1).toString('base64');
var tohex = function(c) {
return c > 15 ? c.toString(16) : c < 0 ? "" : "0" + c.toString(16);
}
var str2hex = function(str) {
for (var hs = "", i = 0; i < str.length; ++i)
hs += tohex(str.charCodeAt(i));
return hs;
}
var data3 = str2hex(data2);
return data3
}
"""
exjs = execjs.compile(js_code1+js_code2+js_code3,cwd=r"/home/nodejs/node_modules")
arg2 = exjs.call('exejs')
# print(arg2)
return arg2
RSA加密,python代码:
def rsa_encrypt(message,publickey):
"""
使用信息进行rsa加密
:param message:
:param publickey:
:return:
"""
key = publickey
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
cipher_text = base64.b64encode(cipher.encrypt(message.encode('utf-8')))
result = cipher_text.decode('utf-8')
return result