某东log校验--炸年兽最后一块拼图 基础Cookie
本文最后更新于 2024-07-06,文章内容可能已经过时。
关于京东Cookie的基本知识
常见的京东Cookie(用于身份校验)常见的说法有mck、appck和wskey,这三种大致差不多,但是出现的地方不太一样,会被京东用于做出具体的限制,例如可以参加什么活动、不能参加什么活动。可以直接区分用户登录的来源,这里都是移动端的(因为活动都在移动端)
- wskey: 京东App登录后,在App中的Cookie,有效期好像是半年吧,格式为:
pin=xxx;wskey=AAxxx;
- appck: 通过京东App的webview打开的网页活动,会将wskey转换成appck,有效期24小时,格式为:
pt_key=app_openAAxxx;pt_pin=xxx;
- mck: 普通的移动端网页登录的Cookie,有效期30天,格式为
pt_key=AAxxx;pt_pin=xxx;
这里应该能看出来,很多活动完全可以根据Cookie来限制参加活动的途径,事实证明京东也就是这么做的,像炸年兽这种电商节活动开始可以mck直接玩,也没有log校验,几天过后限制就全开了。只允许appck用户参加,并且会打开log校验。
炸年兽的最后一片拼图
上一篇文章中已经尝试使用appck去调用接口了,但是会提示环境异常,这里活动已经结束了,已经拿不到当初的截图了,哭死。
可以直接将请求导入到软件中进行测试,进行删减参数进行测试了,实际上基本上感觉就是Cookie的问题,之前找京东短链获取源链的时候,就出现过需要CSID
和__jda
的。
然后就发现需要__jdb
和mba_muid
,不然就会出现环境异常。
找一下js代码喽。
额,直接找一下关于setCookie()
的调用,然后将相关代码都拷贝出来,再找一个合适的位置直接将lr
打出来。
var cookies = {
__jda: {},
__jdb: {},
__jdc: {},
__jdv: {},
mba_muid: {}
}
function genUuid() {
return (new Date).getTime() + "" + parseInt(2147483647 * Math.random())
}
function setCookie(e, t, r, o) {
if (e) {
var i = "";
if (o) {
var a = new Date;
a.setTime(a.getTime() + o);
i = a.getTime();
}
cookies[e].value = t;
cookies[e].expires = i;
}
}
function isPrey(e) {
if (e >= 100) return !0;
var t = lr.uuid, r = t.substr(t.length - 2);
return !!r && 1 * r < e
}
function setJdv(e, t, r) {
var o = "";
o = isPrey(10) && (!e || e.length > 400) ? t + "|direct|-|none|-|" + (new Date).getTime() : e;
var i = r ? lr.ckJdvEmbeddedExp : lr.ckJdvExp;
setCookie(lr.ckJdv || "__jdv", o, lr.ckDomain, i)
}
function genHash(e) {
var t, r = 1, o = 0;
if (e) for (r = 0, t = e.length - 1; t >= 0; t--) r = 0 !== (o = 266338304 & (r = (r << 6 & 268435455) + (o = e.charCodeAt(t)) + (o << 14))) ? r ^ o >> 21 : r;
return r
}
var lr = {
"ckJda": "__jda",
"ckJdb": "__jdb",
"ckJdc": "__jdc",
"ckJdu": "__jdu",
"ckJdv": "__jdv",
"ckJdaExp": 15552000000,
"ckJdbExp": 1800000,
"ckJduExp": 15552000000,
"ckJdvExp": 1296000000,
"ckJdvEmbeddedExp": 86400000,
"ckWxAppCkExp": 15552000000,
"mtSubsiteExp": 31536000000,
"refUrl": "",
"ckmba_muid": "mba_muid",
"ckmba_muidExp": 15552000000,
"ckDomain": "jd.com",
"_mbaMuidSeq": []
}
function getBaseCookie() {
var e, t, r, o, i = [""], a = [""], n = [""], d = [""], l = parseInt((new Date).getTime() / 1e3), c = 0, s = 1, u = "direct", p = "-", g = "none", _ = "-";
o = genUuid();
e = l;
t = l;
lr.uuid = o;
var M, f = [], S = a.length < 4, v = null, w = !1;
var C, k = lr.refUrl && lr.refUrl.split("/")[2], A = !1;
if (k && k.indexOf(lr.ckDomain) < 0) {
for (C = lr.seo, m = 0; m < C.length; m++) {
var T = C[m].split(":");
if (k.indexOf(T[0].toLowerCase()) > -1 && lr.refUrl.indexOf((T[1] + "=").toLowerCase()) > -1) {
var D = null;
/[^\x00-\xff]/.test(D) && (D = encodeURIComponent(D)), f.push(T[0]), f.push("-"), f.push("organic"), f.push(D || "not set"), _ = f[3], A = !0;
break
}
}
A || (k.indexOf("zol.com.cn") > -1 ? (f.push("zol.com.cn"), f.push("-"), f.push("cpc"), f.push("not set")) : (f.push(k), f.push("-"), f.push("referral"), f.push("-")))
}
M = f.length > 0 && (f[0] !== u || f[1] !== p || f[2] !== g) && "referral" !== f[2];
if (S || !S && M) {
u = f[0] || u, p = f[1] || p;
g = f[2] || g, _ = f[3] || _;
if (i.length > 5) {
e = parseInt(i[2], 10);
t = parseInt(i[4], 10);
l = parseInt((new Date).getTime() / 1e3);
s++, c = 1
} else {
s = 1, c = 1
}
} else {
c++;
}
r || (r = genHash(lr.ckDomain));
setCookie(lr.ckJda, [r, o, e, t, l, s || 1].join("."),lr.ckDomain, lr.ckJdaExp);
setCookie(lr.ckJdb, [r, c, o + "|" + s, l].join("."), lr.ckDomain, lr.ckJdbExp);
setCookie(lr.ckJdc, r, lr.ckDomain);
if (w || M || n.length < 5) {
var B = [r, u || "direct", p || "-", g || "none", _ || "-", (new Date).getTime()].join("|");
setJdv(B = encodeURIComponent(B), r)
}
lr._mbaMuidSeq[0] = lr.uuid + "";
lr._mbaMuidSeq[1] = "1";
lr._mbaMuidSeq[2] = (new Date).getTime();
setCookie(lr.ckmba_muid, encodeURI(lr._mbaMuidSeq.join(".")), lr.ckDomain, lr.ckmba_muidExp);
return '__jda='.concat(cookies['__jda'].value).concat('; __jdb=').concat(cookies['__jdb'].value).concat('; __jdc=').concat(cookies['__jdc'].value).concat('; __jdv=').concat(cookies['__jdv'].value).concat('; mba_muid='.concat(cookies['mba_muid'].value));
}
console.log(getBaseCookie())
最终将这段Cookie拼到自己的appck后面即可完成炸年兽的全部校验,下次可以直接写脚本喽。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 舟涯
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果