简单介绍了云财关于校园网需要注意的
基于huxiaofan1223的文章和zu1k的开源项目来对我学校做的一些补充和修改
直接套用不能够使用,我用的是zu1k的开源代码才做成功
开始我以为encode是新的加密手段,但是用zu1k的xencode加密成功登录后我才发现是一样的
网页JavaScript的源码:
_encodeUserInfo.set(_assertThisInitialized(_this), {
writable: true,
value: function value(info, token) {
// 克隆自 $.base64,防止污染
var base64 = _this.clone($.base64);
// base64 设置 Alpha
base64.setAlpha('LVoJPiCN2R8G90yg+hmFHuacZ1OWMnrsSTXkYpUq/3dlbfKwv6xztjI7DeBE45QA');
// 用户信息转 JSON
info = JSON.stringify(info);
function encode(str, key) {
if (str === '') return '';
var v = s(str, true);
var k = s(key, false);
if (k.length < 4) k.length = 4;
var n = v.length - 1,
z = v[n],
y = v[0],
c = 0x86014019 | 0x183639A0,
m,
e,
p,
q = Math.floor(6 + 52 / (n + 1)),
d = 0;
while (0 < q--) {
d = d + c & (0x8CE0D9BF | 0x731F2640);
e = d >>> 2 & 3;
for (p = 0; p < n; p++) {
y = v[p + 1];
m = z >>> 5 ^ y << 2;
m += y >>> 3 ^ z << 4 ^ (d ^ y);
m += k[p & 3 ^ e] ^ z;
z = v[p] = v[p] + m & (0xEFB8D130 | 0x10472ECF);
}
y = v[0];
m = z >>> 5 ^ y << 2;
m += y >>> 3 ^ z << 4 ^ (d ^ y);
m += k[p & 3 ^ e] ^ z;
z = v[n] = v[n] + m & (0xBB390742 | 0x44C6F8BD);
}
return l(v, false);
}
function s(a, b) {
var c = a.length;
var v = [];
for (var i = 0; i < c; i += 4) {
v[i >> 2] = a.charCodeAt(i) | a.charCodeAt(i + 1) << 8 | a.charCodeAt(i + 2) << 16 | a.charCodeAt(i + 3) << 24;
}
if (b) v[v.length] = c;
return v;
}
function l(a, b) {
var d = a.length;
var c = d - 1 << 2;
if (b) {
var m = a[d - 1];
if (m < c - 3 || m > c) return null;
c = m;
}
for (var i = 0; i < d; i++) {
a[i] = String.fromCharCode(a[i] & 0xff, a[i] >>> 8 & 0xff, a[i] >>> 16 & 0xff, a[i] >>> 24 & 0xff);
}
return b ? a.join('').substring(0, c) : a.join('');
}
return '{SRBX1}' + base64.encode(encode(info, token));
}
});
我理解的主要是info获取出现了错误
登录的请求字段和i的加密在网页端JavaScript:
params: {
action: 'login',
username: username,
password: _this4.userInfo.otp ? '{OTP}' + password : '{MD5}' + hmd5,
os: _this4.portalInfo.userDevice.device,
name: _this4.portalInfo.userDevice.platform,
// 双栈认证时 double_stack 参数为 0
double_stack: _this4.portalInfo.doub && !obj.host ? 1 : 0,
chksum: sha1(str),
info: i,
ac_id: ac_id,
ip: ip,
n: n,
type: type
},
var i = _classPrivateFieldGet(_this4, _encodeUserInfo).call(_this4, {
username: username,
password: password,
ip: ip,
acid: ac_id,
enc_ver: enc
}, token);
这里的info:i i的加密包含ac_id,登录时的ac_id要改成7才能登录成功。
云南财经大学上网认证平台
也就是说网页认证地址中http://172.16.130.31/srun_portal_success?ac_id=1&theme=ynufeacid改成7就不会出现INFO Error锛宝rr_code=2
开源项目当中做了登录与登出的功能。同时有python与java,做这2个语言的主要原因是python简洁一些用于快速来理解,因为加密算法大部分我都不知道是什么意思,大部分是用ai帮忙生成的,Java是用于制作Android的app
SimulatedLogin: 云南财经大学的Python和Java模拟登录