mirror of
https://github.com/shufflewzc/faker2.git
synced 2025-04-19 20:48:03 +08:00
fix
This commit is contained in:
parent
27c78f9f4c
commit
baf2b9a8ac
BIN
utils/.DS_Store
vendored
Normal file
BIN
utils/.DS_Store
vendored
Normal file
Binary file not shown.
@ -1,306 +0,0 @@
|
||||
/*
|
||||
|
||||
杀掉后台后打开京东app获取app_open
|
||||
在脚本日志查看值
|
||||
|
||||
[MITM]
|
||||
hostname = api.m.jd.com
|
||||
|
||||
===========Surge=================
|
||||
[Script]
|
||||
jd_appopen = type=http-request,pattern=^https:\/\/api\.m\.jd\.com\/openUpgrade, max-size=0, script-path=jd_appopen.js
|
||||
|
||||
===================Quantumult X=====================
|
||||
[rewrite_local]
|
||||
# jd_appopen
|
||||
^https:\/\/api\.m\.jd\.com\/openUpgrade url script-request-header jd_appopen.js
|
||||
|
||||
=====================Loon=====================
|
||||
[Script]
|
||||
http-request ^https:\/\/api\.m\.jd\.com\/openUpgrade script-path=jd_appopen.js, timeout=3600, tag=jd_appopen
|
||||
|
||||
*/
|
||||
|
||||
const $ = new Env("app_open")
|
||||
|
||||
let cookie = $request.headers.Cookie
|
||||
let pt_key = cookie.match(/(pt_key=[^;]*)/)[1]
|
||||
let pt_pin = cookie.match(/(pt_pin=[^;]*)/)[1]
|
||||
console.log('================')
|
||||
console.log(`${pt_key};${pt_pin};`)
|
||||
console.log('================')
|
||||
$.msg("app_open获取成功!", "在运行日志中查看")
|
||||
|
||||
function Env(t, e) {
|
||||
"undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0);
|
||||
|
||||
class s {
|
||||
constructor(t) {
|
||||
this.env = t
|
||||
}
|
||||
|
||||
send(t, e = "GET") {
|
||||
t = "string" == typeof t ? {url: t} : t;
|
||||
let s = this.get;
|
||||
return "POST" === e && (s = this.post), new Promise((e, i) => {
|
||||
s.call(this, t, (t, s, r) => {
|
||||
t ? i(t) : e(s)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
get(t) {
|
||||
return this.send.call(this.env, t)
|
||||
}
|
||||
|
||||
post(t) {
|
||||
return this.send.call(this.env, t, "POST")
|
||||
}
|
||||
}
|
||||
|
||||
return new class {
|
||||
constructor(t, e) {
|
||||
this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`)
|
||||
}
|
||||
|
||||
isNode() {
|
||||
return "undefined" != typeof module && !!module.exports
|
||||
}
|
||||
|
||||
isQuanX() {
|
||||
return "undefined" != typeof $task
|
||||
}
|
||||
|
||||
isSurge() {
|
||||
return "undefined" != typeof $httpClient && "undefined" == typeof $loon
|
||||
}
|
||||
|
||||
isLoon() {
|
||||
return "undefined" != typeof $loon
|
||||
}
|
||||
|
||||
toObj(t, e = null) {
|
||||
try {
|
||||
return JSON.parse(t)
|
||||
} catch {
|
||||
return e
|
||||
}
|
||||
}
|
||||
|
||||
toStr(t, e = null) {
|
||||
try {
|
||||
return JSON.stringify(t)
|
||||
} catch {
|
||||
return e
|
||||
}
|
||||
}
|
||||
|
||||
getjson(t, e) {
|
||||
let s = e;
|
||||
const i = this.getdata(t);
|
||||
if (i) try {
|
||||
s = JSON.parse(this.getdata(t))
|
||||
} catch {
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
setjson(t, e) {
|
||||
try {
|
||||
return this.setdata(JSON.stringify(t), e)
|
||||
} catch {
|
||||
return !1
|
||||
}
|
||||
}
|
||||
|
||||
getScript(t) {
|
||||
return new Promise(e => {
|
||||
this.get({url: t}, (t, s, i) => e(i))
|
||||
})
|
||||
}
|
||||
|
||||
runScript(t, e) {
|
||||
return new Promise(s => {
|
||||
let i = this.getdata("@chavy_boxjs_userCfgs.httpapi");
|
||||
i = i ? i.replace(/\n/g, "").trim() : i;
|
||||
let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");
|
||||
r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r;
|
||||
const [o, h] = i.split("@"), n = {url: `http://${h}/v1/scripting/evaluate`, body: {script_text: t, mock_type: "cron", timeout: r}, headers: {"X-Key": o, Accept: "*/*"}};
|
||||
this.post(n, (t, e, i) => s(i))
|
||||
}).catch(t => this.logErr(t))
|
||||
}
|
||||
|
||||
loaddata() {
|
||||
if (!this.isNode()) return {};
|
||||
{
|
||||
this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path");
|
||||
const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e);
|
||||
if (!s && !i) return {};
|
||||
{
|
||||
const i = s ? t : e;
|
||||
try {
|
||||
return JSON.parse(this.fs.readFileSync(i))
|
||||
} catch (t) {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
writedata() {
|
||||
if (this.isNode()) {
|
||||
this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path");
|
||||
const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data);
|
||||
s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r)
|
||||
}
|
||||
}
|
||||
|
||||
lodash_get(t, e, s) {
|
||||
const i = e.replace(/\[(\d+)\]/g, ".$1").split(".");
|
||||
let r = t;
|
||||
for (const t of i) if (r = Object(r)[t], void 0 === r) return s;
|
||||
return r
|
||||
}
|
||||
|
||||
lodash_set(t, e, s) {
|
||||
return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t)
|
||||
}
|
||||
|
||||
getdata(t) {
|
||||
let e = this.getval(t);
|
||||
if (/^@/.test(t)) {
|
||||
const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : "";
|
||||
if (r) try {
|
||||
const t = JSON.parse(r);
|
||||
e = t ? this.lodash_get(t, i, "") : e
|
||||
} catch (t) {
|
||||
e = ""
|
||||
}
|
||||
}
|
||||
return e
|
||||
}
|
||||
|
||||
setdata(t, e) {
|
||||
let s = !1;
|
||||
if (/^@/.test(e)) {
|
||||
const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}";
|
||||
try {
|
||||
const e = JSON.parse(h);
|
||||
this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i)
|
||||
} catch (e) {
|
||||
const o = {};
|
||||
this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i)
|
||||
}
|
||||
} else s = this.setval(t, e);
|
||||
return s
|
||||
}
|
||||
|
||||
getval(t) {
|
||||
return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null
|
||||
}
|
||||
|
||||
setval(t, e) {
|
||||
return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null
|
||||
}
|
||||
|
||||
initGotEnv(t) {
|
||||
this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar))
|
||||
}
|
||||
|
||||
get(t, e = (() => {
|
||||
})) {
|
||||
t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, {"X-Surge-Skip-Scripting": !1})), $httpClient.get(t, (t, s, i) => {
|
||||
!t && s && (s.body = i, s.statusCode = s.status), e(t, s, i)
|
||||
})) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, {hints: !1})), $task.fetch(t).then(t => {
|
||||
const {statusCode: s, statusCode: i, headers: r, body: o} = t;
|
||||
e(null, {status: s, statusCode: i, headers: r, body: o}, o)
|
||||
}, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => {
|
||||
try {
|
||||
if (t.headers["set-cookie"]) {
|
||||
const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();
|
||||
s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar
|
||||
}
|
||||
} catch (t) {
|
||||
this.logErr(t)
|
||||
}
|
||||
}).then(t => {
|
||||
const {statusCode: s, statusCode: i, headers: r, body: o} = t;
|
||||
e(null, {status: s, statusCode: i, headers: r, body: o}, o)
|
||||
}, t => {
|
||||
const {message: s, response: i} = t;
|
||||
e(s, i, i && i.body)
|
||||
}))
|
||||
}
|
||||
|
||||
post(t, e = (() => {
|
||||
})) {
|
||||
if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, {"X-Surge-Skip-Scripting": !1})), $httpClient.post(t, (t, s, i) => {
|
||||
!t && s && (s.body = i, s.statusCode = s.status), e(t, s, i)
|
||||
}); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, {hints: !1})), $task.fetch(t).then(t => {
|
||||
const {statusCode: s, statusCode: i, headers: r, body: o} = t;
|
||||
e(null, {status: s, statusCode: i, headers: r, body: o}, o)
|
||||
}, t => e(t)); else if (this.isNode()) {
|
||||
this.initGotEnv(t);
|
||||
const {url: s, ...i} = t;
|
||||
this.got.post(s, i).then(t => {
|
||||
const {statusCode: s, statusCode: i, headers: r, body: o} = t;
|
||||
e(null, {status: s, statusCode: i, headers: r, body: o}, o)
|
||||
}, t => {
|
||||
const {message: s, response: i} = t;
|
||||
e(s, i, i && i.body)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
time(t, e = null) {
|
||||
const s = e ? new Date(e) : new Date;
|
||||
let i = {"M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds()};
|
||||
/(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length)));
|
||||
for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length)));
|
||||
return t
|
||||
}
|
||||
|
||||
msg(e = t, s = "", i = "", r) {
|
||||
const o = t => {
|
||||
if (!t) return t;
|
||||
if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? {"open-url": t} : this.isSurge() ? {url: t} : void 0;
|
||||
if ("object" == typeof t) {
|
||||
if (this.isLoon()) {
|
||||
let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"];
|
||||
return {openUrl: e, mediaUrl: s}
|
||||
}
|
||||
if (this.isQuanX()) {
|
||||
let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl;
|
||||
return {"open-url": e, "media-url": s}
|
||||
}
|
||||
if (this.isSurge()) {
|
||||
let e = t.url || t.openUrl || t["open-url"];
|
||||
return {url: e}
|
||||
}
|
||||
}
|
||||
};
|
||||
if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) {
|
||||
let t = ["", "==============📣系统通知📣=============="];
|
||||
t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t)
|
||||
}
|
||||
}
|
||||
|
||||
log(...t) {
|
||||
t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator))
|
||||
}
|
||||
|
||||
logErr(t, e) {
|
||||
const s = !this.isSurge() && !this.isQuanX() && !this.isLoon();
|
||||
s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t)
|
||||
}
|
||||
|
||||
wait(t) {
|
||||
return new Promise(e => setTimeout(e, t))
|
||||
}
|
||||
|
||||
done(t = {}) {
|
||||
const e = (new Date).getTime(), s = (e - this.startTime) / 1e3;
|
||||
this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t)
|
||||
}
|
||||
}(t, e)
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
/**
|
||||
* cron: 0 0 * * *
|
||||
*/
|
||||
|
||||
import axios from "axios";
|
||||
import {sendNotify} from '../sendNotify';
|
||||
|
||||
!(async () => {
|
||||
let res: any = await api('https://prodev.m.jd.com/mall/active/2tZssTgnQsiUqhmg5ooLSHY9XSeN/index.html')
|
||||
let file: string = 'https://storage.360buyimg.com/' + res.match(/htmlSourceUrl":"([^"]*)/)[1]
|
||||
res = await api(file)
|
||||
file = 'https:' + res.match(/src="(\/\/storage.*)"/)[1]
|
||||
res = await api(file)
|
||||
file = res.match(/invokeKey: '(.*)'/)[1]
|
||||
console.log('invokeKey:', file)
|
||||
if (file !== 'q8DNJdpcfRQ69gIx') {
|
||||
await sendNotify('invokeKey Update', file)
|
||||
}
|
||||
})()
|
||||
|
||||
async function api(url: string) {
|
||||
let {data}: any = await axios.get(url, {
|
||||
headers: {
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
|
||||
}
|
||||
})
|
||||
return data
|
||||
}
|
@ -1,447 +0,0 @@
|
||||
const http = require('http');
|
||||
const stream = require('stream');
|
||||
const zlib = require('zlib');
|
||||
const vm = require('vm');
|
||||
const PNG = require('png-js');
|
||||
const UA = require('../USER_AGENTS.js').USER_AGENT;
|
||||
|
||||
Math.avg = function average() {
|
||||
var sum = 0;
|
||||
var len = this.length;
|
||||
for (var i = 0; i < len; i++) {
|
||||
sum += this[i];
|
||||
}
|
||||
return sum / len;
|
||||
};
|
||||
|
||||
function sleep(timeout) {
|
||||
return new Promise((resolve) => setTimeout(resolve, timeout));
|
||||
}
|
||||
|
||||
class PNGDecoder extends PNG {
|
||||
constructor(args) {
|
||||
super(args);
|
||||
this.pixels = [];
|
||||
}
|
||||
|
||||
decodeToPixels() {
|
||||
return new Promise((resolve) => {
|
||||
this.decode((pixels) => {
|
||||
this.pixels = pixels;
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
getImageData(x, y, w, h) {
|
||||
const {pixels} = this;
|
||||
const len = w * h * 4;
|
||||
const startIndex = x * 4 + y * (w * 4);
|
||||
|
||||
return {data: pixels.slice(startIndex, startIndex + len)};
|
||||
}
|
||||
}
|
||||
|
||||
const PUZZLE_GAP = 8;
|
||||
const PUZZLE_PAD = 10;
|
||||
|
||||
class PuzzleRecognizer {
|
||||
constructor(bg, patch, y) {
|
||||
// console.log(bg);
|
||||
const imgBg = new PNGDecoder(Buffer.from(bg, 'base64'));
|
||||
const imgPatch = new PNGDecoder(Buffer.from(patch, 'base64'));
|
||||
|
||||
// console.log(imgBg);
|
||||
|
||||
this.bg = imgBg;
|
||||
this.patch = imgPatch;
|
||||
this.rawBg = bg;
|
||||
this.rawPatch = patch;
|
||||
this.y = y;
|
||||
this.w = imgBg.width;
|
||||
this.h = imgBg.height;
|
||||
}
|
||||
|
||||
async run() {
|
||||
await this.bg.decodeToPixels();
|
||||
await this.patch.decodeToPixels();
|
||||
|
||||
return this.recognize();
|
||||
}
|
||||
|
||||
recognize() {
|
||||
const {ctx, w: width, bg} = this;
|
||||
const {width: patchWidth, height: patchHeight} = this.patch;
|
||||
const posY = this.y + PUZZLE_PAD + ((patchHeight - PUZZLE_PAD) / 2) - (PUZZLE_GAP / 2);
|
||||
// const cData = ctx.getImageData(0, a.y + 10 + 20 - 4, 360, 8).data;
|
||||
const cData = bg.getImageData(0, posY, width, PUZZLE_GAP).data;
|
||||
const lumas = [];
|
||||
|
||||
for (let x = 0; x < width; x++) {
|
||||
var sum = 0;
|
||||
|
||||
// y xais
|
||||
for (let y = 0; y < PUZZLE_GAP; y++) {
|
||||
var idx = x * 4 + y * (width * 4);
|
||||
var r = cData[idx];
|
||||
var g = cData[idx + 1];
|
||||
var b = cData[idx + 2];
|
||||
var luma = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
||||
|
||||
sum += luma;
|
||||
}
|
||||
|
||||
lumas.push(sum / PUZZLE_GAP);
|
||||
}
|
||||
|
||||
const n = 2; // minium macroscopic image width (px)
|
||||
const margin = patchWidth - PUZZLE_PAD;
|
||||
const diff = 20; // macroscopic brightness difference
|
||||
const radius = PUZZLE_PAD;
|
||||
for (let i = 0, len = lumas.length - 2 * 4; i < len; i++) {
|
||||
const left = (lumas[i] + lumas[i + 1]) / n;
|
||||
const right = (lumas[i + 2] + lumas[i + 3]) / n;
|
||||
const mi = margin + i;
|
||||
const mLeft = (lumas[mi] + lumas[mi + 1]) / n;
|
||||
const mRigth = (lumas[mi + 2] + lumas[mi + 3]) / n;
|
||||
|
||||
if (left - right > diff && mLeft - mRigth < -diff) {
|
||||
const pieces = lumas.slice(i + 2, margin + i + 2);
|
||||
const median = pieces.sort((x1, x2) => x1 - x2)[20];
|
||||
const avg = Math.avg(pieces);
|
||||
|
||||
// noise reducation
|
||||
if (median > left || median > mRigth) return;
|
||||
if (avg > 100) return;
|
||||
// console.table({left,right,mLeft,mRigth,median});
|
||||
// ctx.fillRect(i+n-radius, 0, 1, 360);
|
||||
// console.log(i+n-radius);
|
||||
return i + n - radius;
|
||||
}
|
||||
}
|
||||
|
||||
// not found
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
const DATA = {
|
||||
"appId": "17839d5db83",
|
||||
"scene": "cww",
|
||||
"product": "embed",
|
||||
"lang": "zh_CN",
|
||||
};
|
||||
|
||||
// const SERVER = 'iv.jd.com';
|
||||
const SERVER = '61.49.99.122';
|
||||
|
||||
class JDJRValidator {
|
||||
constructor() {
|
||||
this.data = {};
|
||||
this.x = 0;
|
||||
this.t = Date.now();
|
||||
}
|
||||
|
||||
async run() {
|
||||
const tryRecognize = async () => {
|
||||
const x = await this.recognize();
|
||||
|
||||
if (x > 0) {
|
||||
return x;
|
||||
}
|
||||
// retry
|
||||
return await tryRecognize();
|
||||
};
|
||||
const puzzleX = await tryRecognize();
|
||||
// console.log(puzzleX);
|
||||
const pos = new MousePosFaker(puzzleX).run();
|
||||
const d = getCoordinate(pos);
|
||||
|
||||
// console.log(pos[pos.length-1][2] -Date.now());
|
||||
// await sleep(4500);
|
||||
await sleep(pos[pos.length - 1][2] - Date.now());
|
||||
const result = await JDJRValidator.jsonp('/slide/s.html', {d, ...this.data});
|
||||
|
||||
if (result.message === 'success') {
|
||||
console.log(result);
|
||||
console.log('JDJRValidator: %fs', (Date.now() - this.t) / 1000);
|
||||
return result;
|
||||
} else {
|
||||
console.count(JSON.stringify(result));
|
||||
await sleep(300);
|
||||
return await this.run();
|
||||
}
|
||||
}
|
||||
|
||||
async recognize() {
|
||||
const data = await JDJRValidator.jsonp('/slide/g.html', {e: ''});
|
||||
const {bg, patch, y} = data;
|
||||
// const uri = 'data:image/png;base64,';
|
||||
// const re = new PuzzleRecognizer(uri+bg, uri+patch, y);
|
||||
const re = new PuzzleRecognizer(bg, patch, y);
|
||||
const puzzleX = await re.run();
|
||||
|
||||
if (puzzleX > 0) {
|
||||
this.data = {
|
||||
c: data.challenge,
|
||||
w: re.w,
|
||||
e: '',
|
||||
s: '',
|
||||
o: '',
|
||||
};
|
||||
this.x = puzzleX;
|
||||
}
|
||||
return puzzleX;
|
||||
}
|
||||
|
||||
async report(n) {
|
||||
console.time('PuzzleRecognizer');
|
||||
let count = 0;
|
||||
|
||||
for (let i = 0; i < n; i++) {
|
||||
const x = await this.recognize();
|
||||
|
||||
if (x > 0) count++;
|
||||
if (i % 50 === 0) {
|
||||
// console.log('%f\%', (i / n) * 100);
|
||||
}
|
||||
}
|
||||
|
||||
// console.log('successful: %f\%', (count / n) * 100);
|
||||
console.timeEnd('PuzzleRecognizer');
|
||||
}
|
||||
|
||||
static jsonp(api, data = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const fnId = `jsonp_${String(Math.random()).replace('.', '')}`;
|
||||
const extraData = {callback: fnId};
|
||||
const query = new URLSearchParams({...DATA, ...extraData, ...data}).toString();
|
||||
const url = `http://${SERVER}${api}?${query}`;
|
||||
const headers = {
|
||||
'Accept': '*/*',
|
||||
'Accept-Encoding': 'gzip,deflate,br',
|
||||
'Accept-Language': 'zh-CN,en-US',
|
||||
'Connection': 'keep-alive',
|
||||
'Host': SERVER,
|
||||
'Proxy-Connection': 'keep-alive',
|
||||
'Referer': 'https://h5.m.jd.com/babelDiy/Zeus/2wuqXrZrhygTQzYA7VufBEpj4amH/index.html',
|
||||
'User-Agent': UA,
|
||||
};
|
||||
const req = http.get(url, {headers}, (response) => {
|
||||
try {
|
||||
let res = response;
|
||||
if (res.headers['content-encoding'] === 'gzip') {
|
||||
const unzipStream = new stream.PassThrough();
|
||||
stream.pipeline(
|
||||
response,
|
||||
zlib.createGunzip(),
|
||||
unzipStream,
|
||||
reject,
|
||||
);
|
||||
res = unzipStream;
|
||||
}
|
||||
res.setEncoding('utf8');
|
||||
|
||||
let rawData = '';
|
||||
|
||||
res.on('data', (chunk) => rawData += chunk);
|
||||
res.on('end', () => {
|
||||
try {
|
||||
const ctx = {
|
||||
[fnId]: (data) => ctx.data = data,
|
||||
data: {},
|
||||
};
|
||||
vm.createContext(ctx);
|
||||
vm.runInContext(rawData, ctx);
|
||||
res.resume();
|
||||
resolve(ctx.data);
|
||||
} catch (e) {
|
||||
console.log('生成验证码必须使用大陆IP')
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
}
|
||||
})
|
||||
|
||||
req.on('error', reject);
|
||||
req.end();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function getCoordinate(c) {
|
||||
function string10to64(d) {
|
||||
var c = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-~".split("")
|
||||
, b = c.length
|
||||
, e = +d
|
||||
, a = [];
|
||||
do {
|
||||
mod = e % b;
|
||||
e = (e - mod) / b;
|
||||
a.unshift(c[mod])
|
||||
} while (e);
|
||||
return a.join("")
|
||||
}
|
||||
|
||||
function prefixInteger(a, b) {
|
||||
return (Array(b).join(0) + a).slice(-b)
|
||||
}
|
||||
|
||||
function pretreatment(d, c, b) {
|
||||
var e = string10to64(Math.abs(d));
|
||||
var a = "";
|
||||
if (!b) {
|
||||
a += (d > 0 ? "1" : "0")
|
||||
}
|
||||
a += prefixInteger(e, c);
|
||||
return a
|
||||
}
|
||||
|
||||
var b = new Array();
|
||||
for (var e = 0; e < c.length; e++) {
|
||||
if (e == 0) {
|
||||
b.push(pretreatment(c[e][0] < 262143 ? c[e][0] : 262143, 3, true));
|
||||
b.push(pretreatment(c[e][1] < 16777215 ? c[e][1] : 16777215, 4, true));
|
||||
b.push(pretreatment(c[e][2] < 4398046511103 ? c[e][2] : 4398046511103, 7, true))
|
||||
} else {
|
||||
var a = c[e][0] - c[e - 1][0];
|
||||
var f = c[e][1] - c[e - 1][1];
|
||||
var d = c[e][2] - c[e - 1][2];
|
||||
b.push(pretreatment(a < 4095 ? a : 4095, 2, false));
|
||||
b.push(pretreatment(f < 4095 ? f : 4095, 2, false));
|
||||
b.push(pretreatment(d < 16777215 ? d : 16777215, 4, true))
|
||||
}
|
||||
}
|
||||
return b.join("")
|
||||
}
|
||||
|
||||
const HZ = 5;
|
||||
|
||||
class MousePosFaker {
|
||||
constructor(puzzleX) {
|
||||
this.x = parseInt(Math.random() * 20 + 20, 10);
|
||||
this.y = parseInt(Math.random() * 80 + 80, 10);
|
||||
this.t = Date.now();
|
||||
this.pos = [[this.x, this.y, this.t]];
|
||||
this.minDuration = parseInt(1000 / HZ, 10);
|
||||
// this.puzzleX = puzzleX;
|
||||
this.puzzleX = puzzleX + parseInt(Math.random() * 2 - 1, 10);
|
||||
|
||||
this.STEP = parseInt(Math.random() * 6 + 5, 10);
|
||||
this.DURATION = parseInt(Math.random() * 7 + 14, 10) * 100;
|
||||
// [9,1600] [10,1400]
|
||||
this.STEP = 9;
|
||||
// this.DURATION = 2000;
|
||||
// console.log(this.STEP, this.DURATION);
|
||||
}
|
||||
|
||||
run() {
|
||||
const perX = this.puzzleX / this.STEP;
|
||||
const perDuration = this.DURATION / this.STEP;
|
||||
const firstPos = [this.x - parseInt(Math.random() * 6, 10), this.y + parseInt(Math.random() * 11, 10), this.t];
|
||||
|
||||
this.pos.unshift(firstPos);
|
||||
this.stepPos(perX, perDuration);
|
||||
this.fixPos();
|
||||
|
||||
const reactTime = parseInt(60 + Math.random() * 100, 10);
|
||||
const lastIdx = this.pos.length - 1;
|
||||
const lastPos = [this.pos[lastIdx][0], this.pos[lastIdx][1], this.pos[lastIdx][2] + reactTime];
|
||||
|
||||
this.pos.push(lastPos);
|
||||
return this.pos;
|
||||
}
|
||||
|
||||
stepPos(x, duration) {
|
||||
let n = 0;
|
||||
const sqrt2 = Math.sqrt(2);
|
||||
for (let i = 1; i <= this.STEP; i++) {
|
||||
n += 1 / i;
|
||||
}
|
||||
for (let i = 0; i < this.STEP; i++) {
|
||||
x = this.puzzleX / (n * (i + 1));
|
||||
const currX = parseInt((Math.random() * 30 - 15) + x, 10);
|
||||
const currY = parseInt(Math.random() * 7 - 3, 10);
|
||||
const currDuration = parseInt((Math.random() * 0.4 + 0.8) * duration, 10);
|
||||
|
||||
this.moveToAndCollect({
|
||||
x: currX,
|
||||
y: currY,
|
||||
duration: currDuration,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fixPos() {
|
||||
const actualX = this.pos[this.pos.length - 1][0] - this.pos[1][0];
|
||||
const deviation = this.puzzleX - actualX;
|
||||
|
||||
if (Math.abs(deviation) > 4) {
|
||||
this.moveToAndCollect({
|
||||
x: deviation,
|
||||
y: parseInt(Math.random() * 8 - 3, 10),
|
||||
duration: 250,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
moveToAndCollect({x, y, duration}) {
|
||||
let movedX = 0;
|
||||
let movedY = 0;
|
||||
let movedT = 0;
|
||||
const times = duration / this.minDuration;
|
||||
let perX = x / times;
|
||||
let perY = y / times;
|
||||
let padDuration = 0;
|
||||
|
||||
if (Math.abs(perX) < 1) {
|
||||
padDuration = duration / Math.abs(x) - this.minDuration;
|
||||
perX = 1;
|
||||
perY = y / Math.abs(x);
|
||||
}
|
||||
|
||||
while (Math.abs(movedX) < Math.abs(x)) {
|
||||
const rDuration = parseInt(padDuration + Math.random() * 16 - 4, 10);
|
||||
|
||||
movedX += perX + Math.random() * 2 - 1;
|
||||
movedY += perY;
|
||||
movedT += this.minDuration + rDuration;
|
||||
|
||||
const currX = parseInt(this.x + movedX, 10);
|
||||
const currY = parseInt(this.y + movedY, 10);
|
||||
const currT = this.t + movedT;
|
||||
|
||||
this.pos.push([currX, currY, currT]);
|
||||
}
|
||||
|
||||
this.x += x;
|
||||
this.y += y;
|
||||
this.t += Math.max(duration, movedT);
|
||||
}
|
||||
}
|
||||
|
||||
function injectToRequest(fn) {
|
||||
return (opts, cb) => {
|
||||
fn(opts, async (err, resp, data) => {
|
||||
if (err) {
|
||||
console.error('Failed to request.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.search('验证') > -1) {
|
||||
console.log('JDJRValidator trying......');
|
||||
const res = await new JDJRValidator().run();
|
||||
|
||||
opts.url += `&validate=${res.validate}`;
|
||||
fn(opts, cb);
|
||||
} else {
|
||||
cb(err, resp, data);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
JDJRValidator,
|
||||
injectToRequest
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -1,91 +0,0 @@
|
||||
function t(n, t) {
|
||||
var r = (65535 & n) + (65535 & t);
|
||||
return (n >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r
|
||||
}
|
||||
|
||||
function r(n, t) {
|
||||
return n << t | n >>> 32 - t
|
||||
}
|
||||
|
||||
function e(n, e, o, u, c, f) {
|
||||
return t(r(t(t(e, n), t(u, f)), c), o)
|
||||
}
|
||||
|
||||
function o(n, t, r, o, u, c, f) {
|
||||
return e(t & r | ~t & o, n, t, u, c, f)
|
||||
}
|
||||
|
||||
function u(n, t, r, o, u, c, f) {
|
||||
return e(t & o | r & ~o, n, t, u, c, f)
|
||||
}
|
||||
|
||||
function c(n, t, r, o, u, c, f) {
|
||||
return e(t ^ r ^ o, n, t, u, c, f)
|
||||
}
|
||||
|
||||
function f(n, t, r, o, u, c, f) {
|
||||
return e(r ^ (t | ~o), n, t, u, c, f)
|
||||
}
|
||||
|
||||
function i(n, r) {
|
||||
n[r >> 5] |= 128 << r % 32, n[14 + (r + 64 >>> 9 << 4)] = r;
|
||||
var e, i, a, d, h, l = 1732584193, g = -271733879, v = -1732584194, m = 271733878;
|
||||
for (e = 0; e < n.length; e += 16) i = l, a = g, d = v, h = m, g = f(g = f(g = f(g = f(g = c(g = c(g = c(g = c(g = u(g = u(g = u(g = u(g = o(g = o(g = o(g = o(g, v = o(v, m = o(m, l = o(l, g, v, m, n[e], 7, -680876936), g, v, n[e + 1], 12, -389564586), l, g, n[e + 2], 17, 606105819), m, l, n[e + 3], 22, -1044525330), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 4], 7, -176418897), g, v, n[e + 5], 12, 1200080426), l, g, n[e + 6], 17, -1473231341), m, l, n[e + 7], 22, -45705983), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 8], 7, 1770035416), g, v, n[e + 9], 12, -1958414417), l, g, n[e + 10], 17, -42063), m, l, n[e + 11], 22, -1990404162), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 12], 7, 1804603682), g, v, n[e + 13], 12, -40341101), l, g, n[e + 14], 17, -1502002290), m, l, n[e + 15], 22, 1236535329), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 1], 5, -165796510), g, v, n[e + 6], 9, -1069501632), l, g, n[e + 11], 14, 643717713), m, l, n[e], 20, -373897302), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 5], 5, -701558691), g, v, n[e + 10], 9, 38016083), l, g, n[e + 15], 14, -660478335), m, l, n[e + 4], 20, -405537848), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 9], 5, 568446438), g, v, n[e + 14], 9, -1019803690), l, g, n[e + 3], 14, -187363961), m, l, n[e + 8], 20, 1163531501), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 13], 5, -1444681467), g, v, n[e + 2], 9, -51403784), l, g, n[e + 7], 14, 1735328473), m, l, n[e + 12], 20, -1926607734), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 5], 4, -378558), g, v, n[e + 8], 11, -2022574463), l, g, n[e + 11], 16, 1839030562), m, l, n[e + 14], 23, -35309556), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 1], 4, -1530992060), g, v, n[e + 4], 11, 1272893353), l, g, n[e + 7], 16, -155497632), m, l, n[e + 10], 23, -1094730640), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 13], 4, 681279174), g, v, n[e], 11, -358537222), l, g, n[e + 3], 16, -722521979), m, l, n[e + 6], 23, 76029189), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 9], 4, -640364487), g, v, n[e + 12], 11, -421815835), l, g, n[e + 15], 16, 530742520), m, l, n[e + 2], 23, -995338651), v = f(v, m = f(m, l = f(l, g, v, m, n[e], 6, -198630844), g, v, n[e + 7], 10, 1126891415), l, g, n[e + 14], 15, -1416354905), m, l, n[e + 5], 21, -57434055), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 12], 6, 1700485571), g, v, n[e + 3], 10, -1894986606), l, g, n[e + 10], 15, -1051523), m, l, n[e + 1], 21, -2054922799), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 8], 6, 1873313359), g, v, n[e + 15], 10, -30611744), l, g, n[e + 6], 15, -1560198380), m, l, n[e + 13], 21, 1309151649), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 4], 6, -145523070), g, v, n[e + 11], 10, -1120210379), l, g, n[e + 2], 15, 718787259), m, l, n[e + 9], 21, -343485551), l = t(l, i), g = t(g, a), v = t(v, d), m = t(m, h);
|
||||
return [l, g, v, m]
|
||||
}
|
||||
|
||||
function a(n) {
|
||||
var t, r = "", e = 32 * n.length;
|
||||
for (t = 0; t < e; t += 8) r += String.fromCharCode(n[t >> 5] >>> t % 32 & 255);
|
||||
return r
|
||||
}
|
||||
|
||||
function d(n) {
|
||||
var t, r = [];
|
||||
for (r[(n.length >> 2) - 1] = void 0, t = 0; t < r.length; t += 1) r[t] = 0;
|
||||
var e = 8 * n.length;
|
||||
for (t = 0; t < e; t += 8) r[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32;
|
||||
return r
|
||||
}
|
||||
|
||||
function h(n) {
|
||||
return a(i(d(n), 8 * n.length))
|
||||
}
|
||||
|
||||
function l(n, t) {
|
||||
var r, e, o = d(n), u = [], c = [];
|
||||
for (u[15] = c[15] = void 0, o.length > 16 && (o = i(o, 8 * n.length)), r = 0; r < 16; r += 1) u[r] = 909522486 ^ o[r], c[r] = 1549556828 ^ o[r];
|
||||
return e = i(u.concat(d(t)), 512 + 8 * t.length), a(i(c.concat(e), 640))
|
||||
}
|
||||
|
||||
function g(n) {
|
||||
var t, r, e = "";
|
||||
for (r = 0; r < n.length; r += 1) t = n.charCodeAt(r), e += "0123456789abcdef".charAt(t >>> 4 & 15) + "0123456789abcdef".charAt(15 & t);
|
||||
return e
|
||||
}
|
||||
|
||||
function v(n) {
|
||||
return unescape(encodeURIComponent(n))
|
||||
}
|
||||
|
||||
function m(n) {
|
||||
return h(v(n))
|
||||
}
|
||||
|
||||
function p(n) {
|
||||
return g(m(n))
|
||||
}
|
||||
|
||||
function s(n, t) {
|
||||
return l(v(n), v(t))
|
||||
}
|
||||
|
||||
function C(n, t) {
|
||||
return g(s(n, t))
|
||||
}
|
||||
|
||||
function A(n, t, r) {
|
||||
return t ? r ? s(t, n) : C(t, n) : r ? m(n) : p(n)
|
||||
}
|
||||
|
||||
module.exports = A
|
@ -1,237 +0,0 @@
|
||||
const axios = require('axios');
|
||||
const CryptoJS = require('crypto-js')
|
||||
const {format} = require("date-fns");
|
||||
let tk = '', genKey = null
|
||||
|
||||
var _0xodn = 'jsjiami.com.v6', _0xodn_ = ['_0xodn'],
|
||||
_0x3b72 = [_0xodn, 'wro/eFkzwpkZ', 'wrUMK8Kj', 'D1jCtlJvwrY=', 'NQpkwoE=', 'wozDssKdajXCocKNwqo6wpbCgcOsZ8KsPHjDuiDCuE83', 'wp/CpMKffzTDqMOLw6o3w5XDmMK6IcOxIjDCsizCvVB4TcO4w44uXgpwwqh4wop7S8KcwrrDmMOcw4jDnBB4XMKxwrokwqkUJMO/eVRsZhfDojIIIQTCiMOyI8OVbBRSLAQD', 'woQZWw==', 'wr91w6IJw7LDnMOpecOqO8KQQsKcKcKqw4gALsOAdjR6ZyTCqMKsXsOdCMKICsO6QsKAZMKa', 'w4U8wp/Cq3jCmn52BnfDv8KJZsKywqUT', 'E1PCrHjChw==', 'TjbCr8K6wp0=', 'DlfCvl7CmWNlEzlxEWnDgE7CpsKzw67DnkZpYsOvDsOGw5ovw7ZfPsKsYsKGS8OzRsOXO1DDr8Kgw5Juwq3DlkHCoFvDnMKSwqnCgMOpw5xRJcKrcMOqwqbCpcKzw49+w5NewpYqwqdWwo4UKsOkwrNiw5XDk2nCpMKxL8KJw6TCu8OVXHHDiUXCoQxCw4XDmsOTd8KcJ8OJTcKQwrbDsjgww5ggwoPDh1LCpSACw7bDssKcW8K9w5jDlMKpwrHCi8ObMsOxwpUPw74hH8OSJMKJAUvCicKfAcO6wqAVAMK4f1BKSHpUeMOkCsOudsOaw54Tw7bDrMKJwpo8HMKoRcK4HcOVdMK8wp07worDrQ7DnzQFWcKXWFHCuWE4esOYwrjCscKVbU/Cun3CucKQwrTCkcKIwp1L', 'IA5mwoA=', 'Xi3DhGA=', 'wr8fZkvDoyM=', 'jUMsUjViEbaMYgminN.HXcoHmh.v6=='];
|
||||
if (function (_0x2743f4, _0x3fb1a4, _0x305864) {
|
||||
function _0x262557(_0x12e420, _0x159a53, _0x5a10b1, _0x549630, _0x34e649, _0x48a933) {
|
||||
_0x159a53 = _0x159a53 >> 0x8, _0x34e649 = 'po';
|
||||
var _0x173d72 = 'shift', _0x2b02e9 = 'push', _0x48a933 = '';
|
||||
if (_0x159a53 < _0x12e420) {
|
||||
while (--_0x12e420) {
|
||||
_0x549630 = _0x2743f4[_0x173d72]();
|
||||
if (_0x159a53 === _0x12e420 && _0x48a933 === '' && _0x48a933['length'] === 0x1) {
|
||||
_0x159a53 = _0x549630, _0x5a10b1 = _0x2743f4[_0x34e649 + 'p']();
|
||||
} else if (_0x159a53 && _0x5a10b1['replace'](/[UMUVEbMYgnNHXHh=]/g, '') === _0x159a53) {
|
||||
_0x2743f4[_0x2b02e9](_0x549630);
|
||||
}
|
||||
}
|
||||
_0x2743f4[_0x2b02e9](_0x2743f4[_0x173d72]());
|
||||
}
|
||||
return 0xd646f;
|
||||
};
|
||||
return _0x262557(++_0x3fb1a4, _0x305864) >> _0x3fb1a4 ^ _0x305864;
|
||||
}(_0x3b72, 0xf4, 0xf400), _0x3b72) {
|
||||
_0xodn_ = _0x3b72['length'] ^ 0xf4;
|
||||
}
|
||||
;
|
||||
|
||||
function _0x10b2(_0x45658b, _0xa6ed42) {
|
||||
_0x45658b = ~~'0x'['concat'](_0x45658b['slice'](0x1));
|
||||
var _0x1c3a83 = _0x3b72[_0x45658b];
|
||||
if (_0x10b2['LvPUvb'] === undefined) {
|
||||
(function () {
|
||||
var _0x563495 = typeof window !== 'undefined' ? window : typeof process === 'object' && typeof require === 'function' && typeof global === 'object' ? global : this;
|
||||
var _0x37b199 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
||||
_0x563495['atob'] || (_0x563495['atob'] = function (_0x1eac82) {
|
||||
var _0x16b82d = String(_0x1eac82)['replace'](/=+$/, '');
|
||||
for (var _0xee2dd0 = 0x0, _0x4d50ce, _0x4339f9, _0x17dab4 = 0x0, _0x52b38d = ''; _0x4339f9 = _0x16b82d['charAt'](_0x17dab4++); ~_0x4339f9 && (_0x4d50ce = _0xee2dd0 % 0x4 ? _0x4d50ce * 0x40 + _0x4339f9 : _0x4339f9, _0xee2dd0++ % 0x4) ? _0x52b38d += String['fromCharCode'](0xff & _0x4d50ce >> (-0x2 * _0xee2dd0 & 0x6)) : 0x0) {
|
||||
_0x4339f9 = _0x37b199['indexOf'](_0x4339f9);
|
||||
}
|
||||
return _0x52b38d;
|
||||
});
|
||||
}());
|
||||
|
||||
function _0x565be9(_0x1ed74f, _0xa6ed42) {
|
||||
var _0xc416e3 = [], _0x536e9b = 0x0, _0x7e5a8a, _0xdf715e = '', _0x3b5e2b = '';
|
||||
_0x1ed74f = atob(_0x1ed74f);
|
||||
for (var _0x25153a = 0x0, _0x28040c = _0x1ed74f['length']; _0x25153a < _0x28040c; _0x25153a++) {
|
||||
_0x3b5e2b += '%' + ('00' + _0x1ed74f['charCodeAt'](_0x25153a)['toString'](0x10))['slice'](-0x2);
|
||||
}
|
||||
_0x1ed74f = decodeURIComponent(_0x3b5e2b);
|
||||
for (var _0x38a058 = 0x0; _0x38a058 < 0x100; _0x38a058++) {
|
||||
_0xc416e3[_0x38a058] = _0x38a058;
|
||||
}
|
||||
for (_0x38a058 = 0x0; _0x38a058 < 0x100; _0x38a058++) {
|
||||
_0x536e9b = (_0x536e9b + _0xc416e3[_0x38a058] + _0xa6ed42['charCodeAt'](_0x38a058 % _0xa6ed42['length'])) % 0x100;
|
||||
_0x7e5a8a = _0xc416e3[_0x38a058];
|
||||
_0xc416e3[_0x38a058] = _0xc416e3[_0x536e9b];
|
||||
_0xc416e3[_0x536e9b] = _0x7e5a8a;
|
||||
}
|
||||
_0x38a058 = 0x0;
|
||||
_0x536e9b = 0x0;
|
||||
for (var _0x399e67 = 0x0; _0x399e67 < _0x1ed74f['length']; _0x399e67++) {
|
||||
_0x38a058 = (_0x38a058 + 0x1) % 0x100;
|
||||
_0x536e9b = (_0x536e9b + _0xc416e3[_0x38a058]) % 0x100;
|
||||
_0x7e5a8a = _0xc416e3[_0x38a058];
|
||||
_0xc416e3[_0x38a058] = _0xc416e3[_0x536e9b];
|
||||
_0xc416e3[_0x536e9b] = _0x7e5a8a;
|
||||
_0xdf715e += String['fromCharCode'](_0x1ed74f['charCodeAt'](_0x399e67) ^ _0xc416e3[(_0xc416e3[_0x38a058] + _0xc416e3[_0x536e9b]) % 0x100]);
|
||||
}
|
||||
return _0xdf715e;
|
||||
}
|
||||
|
||||
_0x10b2['SYVfKK'] = _0x565be9;
|
||||
_0x10b2['DcCxBY'] = {};
|
||||
_0x10b2['LvPUvb'] = !![];
|
||||
}
|
||||
var _0x185efa = _0x10b2['DcCxBY'][_0x45658b];
|
||||
if (_0x185efa === undefined) {
|
||||
if (_0x10b2['XNcqmw'] === undefined) {
|
||||
_0x10b2['XNcqmw'] = !![];
|
||||
}
|
||||
_0x1c3a83 = _0x10b2['SYVfKK'](_0x1c3a83, _0xa6ed42);
|
||||
_0x10b2['DcCxBY'][_0x45658b] = _0x1c3a83;
|
||||
} else {
|
||||
_0x1c3a83 = _0x185efa;
|
||||
}
|
||||
return _0x1c3a83;
|
||||
};
|
||||
|
||||
function zjdInit() {
|
||||
var _0x5b6562 = {
|
||||
'UHkNG': function (_0x1dee04) {
|
||||
return _0x1dee04();
|
||||
}, 'PkhOr': 'cactus.jd.com', 'vcwqy': _0x10b2('0', 'T5oN')
|
||||
};
|
||||
return new Promise(_0x3e8e66 => {
|
||||
axios['post']('https://cactus.jd.com/request_algo?g_ty=ajax', _0x10b2('1', 'T5oN') + Date[_0x10b2('2', 'Y8g5')]() + _0x10b2('3', 'Cs^f'), {
|
||||
'headers': {
|
||||
'Content-Type': _0x10b2('4', '41Yi'),
|
||||
'host': _0x5b6562[_0x10b2('5', 'otKY')],
|
||||
'Referer': _0x5b6562[_0x10b2('6', 'JEgu')],
|
||||
'User-Agent': _0x10b2('7', 'otKY')
|
||||
}
|
||||
})[_0x10b2('8', ')mWR')](_0x20c5db => {
|
||||
tk = _0x20c5db[_0x10b2('9', 'QWq9')]['data'][_0x10b2('a', 'brNj')]['tk'];
|
||||
genKey = new Function(_0x10b2('b', '[LTK') + _0x20c5db['data'][_0x10b2('c', 'net@')][_0x10b2('d', 'XS2!')][_0x10b2('e', ')mWR')])();
|
||||
_0x5b6562['UHkNG'](_0x3e8e66);
|
||||
});
|
||||
});
|
||||
};_0xodn = 'jsjiami.com.v6';
|
||||
var _0xod6 = 'jsjiami.com.v6', _0xod6_ = ['_0xod6'],
|
||||
_0x27ab = [_0xod6, 'LcOUw6zCtcKB', 'woMBw5w=', 'wr3DlX/CjDI=', 'w4jDtcKnw4JuMcKCwrg=', 'w6nDq8KmwqlF', 'w45sHcK/wqzDpnZI', 'w59tLQ==', 'wpJew68=', 'w6lbR15iQgLDmQTCqw==', 'w4p5wr7ChwVZbMKt', 'bVjDi2LDtsOm', 'wpzCg8OdKGnCr1Qx', 'wo4Bw4UCBS0=', 'w7XDl0TCrcKu', 'JcOUWMO5ZUE=', 'bcOmSjRvw6U=', 'w7dvOsKnwp0=', 'HcOfwpPCq8OoKg==', 'wqd4eRzDvE40w60=', 'N8KtMB4=', 'HMOfwpnCsQ==', 'JMKIAsKoYQ==', 'w7EkAFpBJXR9w6bCq8KYw6w8w65RYA==', 'bsOsaQ==', 'VcONUcOMwrg=', 'b8O5VD5q', 'w7diAMKuwrk=', 'w57DtcKQw48=', 'P2tawoJzw7tTwrRxMg==', 'Jn7DgyLCui/Clg==', 'IPjsjiaKWmFXDUi.cgZSToSRmQ.vG6=='];
|
||||
if (function (_0x4e8c73, _0x49b949, _0x2c3ac) {
|
||||
function _0x2d2117(_0x11fa21, _0x2e2494, _0x148ee4, _0x2156e5, _0xc853f9, _0x19be61) {
|
||||
_0x2e2494 = _0x2e2494 >> 0x8, _0xc853f9 = 'po';
|
||||
var _0x368a00 = 'shift', _0x523621 = 'push', _0x19be61 = '';
|
||||
if (_0x2e2494 < _0x11fa21) {
|
||||
while (--_0x11fa21) {
|
||||
_0x2156e5 = _0x4e8c73[_0x368a00]();
|
||||
if (_0x2e2494 === _0x11fa21 && _0x19be61 === '' && _0x19be61['length'] === 0x1) {
|
||||
_0x2e2494 = _0x2156e5, _0x148ee4 = _0x4e8c73[_0xc853f9 + 'p']();
|
||||
} else if (_0x2e2494 && _0x148ee4['replace'](/[IPKWFXDUgZSTSRQG=]/g, '') === _0x2e2494) {
|
||||
_0x4e8c73[_0x523621](_0x2156e5);
|
||||
}
|
||||
}
|
||||
_0x4e8c73[_0x523621](_0x4e8c73[_0x368a00]());
|
||||
}
|
||||
return 0xd6470;
|
||||
};
|
||||
return _0x2d2117(++_0x49b949, _0x2c3ac) >> _0x49b949 ^ _0x2c3ac;
|
||||
}(_0x27ab, 0x17c, 0x17c00), _0x27ab) {
|
||||
_0xod6_ = _0x27ab['length'] ^ 0x17c;
|
||||
}
|
||||
;
|
||||
|
||||
function _0x1d9f(_0x379f0e, _0x49209e) {
|
||||
_0x379f0e = ~~'0x'['concat'](_0x379f0e['slice'](0x1));
|
||||
var _0x1bce16 = _0x27ab[_0x379f0e];
|
||||
if (_0x1d9f['XzctjE'] === undefined) {
|
||||
(function () {
|
||||
var _0x8e43ac = typeof window !== 'undefined' ? window : typeof process === 'object' && typeof require === 'function' && typeof global === 'object' ? global : this;
|
||||
var _0x42dbb9 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
||||
_0x8e43ac['atob'] || (_0x8e43ac['atob'] = function (_0xc1e76a) {
|
||||
var _0x3446db = String(_0xc1e76a)['replace'](/=+$/, '');
|
||||
for (var _0x3ef7da = 0x0, _0x568ff1, _0x2d3643, _0x3b6731 = 0x0, _0x37d9eb = ''; _0x2d3643 = _0x3446db['charAt'](_0x3b6731++); ~_0x2d3643 && (_0x568ff1 = _0x3ef7da % 0x4 ? _0x568ff1 * 0x40 + _0x2d3643 : _0x2d3643, _0x3ef7da++ % 0x4) ? _0x37d9eb += String['fromCharCode'](0xff & _0x568ff1 >> (-0x2 * _0x3ef7da & 0x6)) : 0x0) {
|
||||
_0x2d3643 = _0x42dbb9['indexOf'](_0x2d3643);
|
||||
}
|
||||
return _0x37d9eb;
|
||||
});
|
||||
}());
|
||||
|
||||
function _0x36dc7f(_0x3b1410, _0x49209e) {
|
||||
var _0x55c058 = [], _0x257b50 = 0x0, _0x5a0d50, _0x26b891 = '', _0x56def6 = '';
|
||||
_0x3b1410 = atob(_0x3b1410);
|
||||
for (var _0x33e9f5 = 0x0, _0x28a526 = _0x3b1410['length']; _0x33e9f5 < _0x28a526; _0x33e9f5++) {
|
||||
_0x56def6 += '%' + ('00' + _0x3b1410['charCodeAt'](_0x33e9f5)['toString'](0x10))['slice'](-0x2);
|
||||
}
|
||||
_0x3b1410 = decodeURIComponent(_0x56def6);
|
||||
for (var _0x229272 = 0x0; _0x229272 < 0x100; _0x229272++) {
|
||||
_0x55c058[_0x229272] = _0x229272;
|
||||
}
|
||||
for (_0x229272 = 0x0; _0x229272 < 0x100; _0x229272++) {
|
||||
_0x257b50 = (_0x257b50 + _0x55c058[_0x229272] + _0x49209e['charCodeAt'](_0x229272 % _0x49209e['length'])) % 0x100;
|
||||
_0x5a0d50 = _0x55c058[_0x229272];
|
||||
_0x55c058[_0x229272] = _0x55c058[_0x257b50];
|
||||
_0x55c058[_0x257b50] = _0x5a0d50;
|
||||
}
|
||||
_0x229272 = 0x0;
|
||||
_0x257b50 = 0x0;
|
||||
for (var _0x107b1d = 0x0; _0x107b1d < _0x3b1410['length']; _0x107b1d++) {
|
||||
_0x229272 = (_0x229272 + 0x1) % 0x100;
|
||||
_0x257b50 = (_0x257b50 + _0x55c058[_0x229272]) % 0x100;
|
||||
_0x5a0d50 = _0x55c058[_0x229272];
|
||||
_0x55c058[_0x229272] = _0x55c058[_0x257b50];
|
||||
_0x55c058[_0x257b50] = _0x5a0d50;
|
||||
_0x26b891 += String['fromCharCode'](_0x3b1410['charCodeAt'](_0x107b1d) ^ _0x55c058[(_0x55c058[_0x229272] + _0x55c058[_0x257b50]) % 0x100]);
|
||||
}
|
||||
return _0x26b891;
|
||||
}
|
||||
|
||||
_0x1d9f['WLbbFD'] = _0x36dc7f;
|
||||
_0x1d9f['ScaaVh'] = {};
|
||||
_0x1d9f['XzctjE'] = !![];
|
||||
}
|
||||
var _0x419794 = _0x1d9f['ScaaVh'][_0x379f0e];
|
||||
if (_0x419794 === undefined) {
|
||||
if (_0x1d9f['qmTRps'] === undefined) {
|
||||
_0x1d9f['qmTRps'] = !![];
|
||||
}
|
||||
_0x1bce16 = _0x1d9f['WLbbFD'](_0x1bce16, _0x49209e);
|
||||
_0x1d9f['ScaaVh'][_0x379f0e] = _0x1bce16;
|
||||
} else {
|
||||
_0x1bce16 = _0x419794;
|
||||
}
|
||||
return _0x1bce16;
|
||||
};
|
||||
|
||||
function zjdH5st(_0x4be4df) {
|
||||
var _0x4cff43 = {
|
||||
'XOTjk': 'appid',
|
||||
'MaNeg': _0x1d9f('0', '4U@&'),
|
||||
'BYwop': function (_0x448c0d, _0x2f169d, _0x20a32e) {
|
||||
return _0x448c0d(_0x2f169d, _0x20a32e);
|
||||
},
|
||||
'uEkhV': 'yyyyMMddhhmmssSSS',
|
||||
'ZFYLd': function (_0x413960, _0x55afdb, _0x10fff9, _0xd657f3, _0x4825ba, _0x18a52d) {
|
||||
return _0x413960(_0x55afdb, _0x10fff9, _0xd657f3, _0x4825ba, _0x18a52d);
|
||||
},
|
||||
'nhcGz': _0x1d9f('1', 'THL^'),
|
||||
'BnPMu': _0x1d9f('2', 'ea1p'),
|
||||
'MltlC': _0x1d9f('3', 'ud6)')
|
||||
};
|
||||
let _0x5b05fe = [{
|
||||
'key': _0x4cff43[_0x1d9f('4', 'ws7Y')],
|
||||
'value': _0x4be4df[_0x1d9f('5', 'L%hf')]
|
||||
}, {'key': _0x4cff43[_0x1d9f('6', 'Jhwj')], 'value': _0x4be4df[_0x1d9f('7', '(kW3')]}, {
|
||||
'key': 'functionId',
|
||||
'value': _0x4be4df[_0x1d9f('8', '!zoL')]
|
||||
}], _0x593076 = '';
|
||||
_0x5b05fe[_0x1d9f('9', 'a@D4')](({key, value}) => {
|
||||
_0x593076 += key + ':' + value + '&';
|
||||
});
|
||||
_0x593076 = _0x593076[_0x1d9f('a', 'ZO!Y')](0x0, -0x1);
|
||||
let _0x24a2f4 = Date[_0x1d9f('b', '32dU')]();
|
||||
let _0x5c2223 = _0x4cff43['BYwop'](format, _0x24a2f4, _0x4cff43['uEkhV']);
|
||||
let _0x1ea52b = _0x4cff43[_0x1d9f('c', 'IG!]')](genKey, tk, '5751706390487846', _0x5c2223[_0x1d9f('d', '(kW3')](), _0x4cff43[_0x1d9f('e', 'XMEY')], CryptoJS)[_0x1d9f('f', 'Jhwj')](CryptoJS[_0x1d9f('10', 'Jhwj')][_0x1d9f('11', '%epl')]);
|
||||
const _0x55d05d = CryptoJS[_0x1d9f('12', 'bhY9')](_0x593076, _0x1ea52b)[_0x1d9f('13', '57Uz')]();
|
||||
return [''[_0x1d9f('14', '(ag8')](_0x5c2223[_0x1d9f('15', 'MW(X')]()), ''[_0x1d9f('16', '32dU')](_0x4cff43['BnPMu']), ''['concat'](_0x4cff43[_0x1d9f('17', 'eG&t')]), ''[_0x1d9f('18', 'THL^')](tk), ''[_0x1d9f('19', 'L%hf')](_0x55d05d), _0x4cff43[_0x1d9f('1a', 'Jhwj')], ''[_0x1d9f('1b', '4U@&')](_0x24a2f4[_0x1d9f('1c', '#7Xk')]())][_0x1d9f('1d', 'ud6)')](';');
|
||||
};_0xod6 = 'jsjiami.com.v6';
|
||||
|
||||
module.exports = {
|
||||
zjdInit,
|
||||
zjdH5st
|
||||
}
|
Loading…
Reference in New Issue
Block a user