This commit is contained in:
Faker 2022-05-09 09:58:35 +08:00
parent cdddf6da86
commit f62fec395c
15 changed files with 1424 additions and 48 deletions

View File

@ -3,7 +3,6 @@ import {Md5} from "ts-md5"
import * as dotenv from "dotenv"
import {existsSync, readFileSync} from "fs"
import {sendNotify} from './sendNotify'
import {rejects} from "assert";
dotenv.config()
@ -121,8 +120,8 @@ async function requireConfig(check: boolean = false): Promise<string[]> {
return cookiesArr
}
async function checkCookie(cookie) {
await wait(1000)
async function checkCookie(cookie: string) {
await wait(3000)
try {
let {data}: any = await axios.get(`https://api.m.jd.com/client.action?functionId=GetJDUserInfoUnion&appid=jd-cphdeveloper-m&body=${encodeURIComponent(JSON.stringify({"orgFlag": "JD_PinGou_New", "callSource": "mainorder", "channel": 4, "isHomewhite": 0, "sceneval": 2}))}&loginType=2&_=${Date.now()}&sceneval=2&g_login_type=1&callback=GetJDUserInfoUnion&g_ty=ls`, {
headers: {
@ -342,10 +341,9 @@ async function jdpingou() {
return `jdpingou;iPhone;5.19.0;${version};${randomString(40)};network/wifi;model/${device};appBuild/100833;ADID/;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/0;hasOCPay/0;supportBestPay/0;session/${getRandomNumberByRange(10, 90)};pap/JA2019_3111789;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148`
}
function get(url: string, prarms?: string, headers?: any): Promise<any> {
function get(url: string, headers?: any): Promise<any> {
return new Promise((resolve, reject) => {
axios.get(url, {
params: prarms,
headers: headers
}).then(res => {
if (typeof res.data === 'string' && res.data.includes('jsonpCBK')) {

View File

@ -222,6 +222,7 @@ function index() {
async function appdoTask(type,taskInfo) {
let functionId = 'cash_doTask'
let body = {"type":type,"taskInfo":taskInfo}
await $.wait(5000)
let sign = await getSignfromPanda(functionId, body)
return new Promise((resolve) => {
@ -237,7 +238,7 @@ async function appdoTask(type,taskInfo) {
console.log(`任务完成成功`)
// console.log(data.data.result.taskInfos)
} else {
console.log(JSON.stringify(data))
//console.log(JSON.stringify(data))
}
}
}
@ -296,21 +297,26 @@ function getSignfromPanda(functionId, body) {
}
$.post(url, async(err, resp, data) => {
try {
if (err) {
console.log(`衰仔没有连接上熊猫服务兄弟帮不了你啦o(╥﹏╥)o`)
} else {
data = JSON.parse(data);
if (data && data.code == 200) {
lnrequesttimes = data.request_times;
console.log("连接Panda服务成功当前Token使用次数为" + lnrequesttimes);
if (data.data.sign)
console.log("衰仔,连接熊猫服务成功(*^▽^*)当前Token使用次数为:" + lnrequesttimes);
if (data.data){
strsign = data.data.sign || '';
if (strsign != '')
}
if (strsign != ''){
resolve(strsign);
else
}
else {
console.log("签名获取失败,可能Token使用次数上限或被封.");
}
} else {
console.log("签名获取失败.");
}
}
}catch (e) {
$.logErr(e, resp);
}finally {

View File

@ -26,32 +26,31 @@ let num=0
let shopname=''
const token = [
"80E78A5F090820E5B1754E17E1485D3F",
"2DACD1FEDEB92BEEDBD54E6B926798B1",
"02BC0ECE5C47F27DD21BEBB0B0DFDB88",
"A0D5832C2A4A942DBFBC0816BA6691C8",
"416F5DC2398791BB1DA3C9A31532A89E",
"87DC11A01AE814025159ECE32F5EECBF",
"E962493FDE1F7B7E4DF62A8C1F1008D3",
"7127A3861F6478043B1BF112803B9A25",
"7C513EAE76DCB43D86E0C64762719976",
"D88BAFF737E9C4295F973732214F5DE5",
"A36F8FDDB5C64DE89061B7DA331E4874",
"63F7C22BEBF3EB981821C9188C8EB8EE",
"5298AA0FA7FDF34DAFEBDC5BEFB6FE9C",
"8622A6A8C1ECB4B2D45F07AE43397BFD",
"F1092CD41D4038D73B676333C0B17644",
"6A78B850246E31C35C135BC8A0FAF5ED",
"FE30AB00038CFFEF00DA9E9B8E932721",
"F0C24D7588D90922393B423C6623F31A",
"D881655EDC90A9B4387ACFE495CA3F18",
"A2AA33A7E1E40FBD7DA60DCEEB7DDD59",
"A450EC209D203EDF09D5FE7A10B74626",
"164E5ED72ECB8B6CC85E722A380D0D47",
"A92870C9EB3853D7C2FF8E740FAA8BC1",
"747D3ADCDD540C3830E4E7EADEA5B295",
"ADFB1BB684350404A2CE4959D7D96A21",
"3AF4B68A4BB3BD09D371B766E6A1B721",
"37C465E26FCFFCFC72B991036CBC6A79",
"7C071F9A6D11D5F26B83CF6BB91D2E89",
"273EC9E9CA27DFDD85478972A1A0ED6F",
"9161017C0106A152D3DF09CD5F03CC2D",
"3D2F9CF0C806133D3C64949F06CD4A80",
"19FC5C93948E015ED82F4740299F95FD",
"449CB9613C43D1EA70502B727335EAAD",
"868B5F6062E5DD77D3F024EDA1AA94E0",
"F26AB04CFB9DA6CC14F40A355E1709DE",
"5EC0711D1CF81232DA1B32BE7E4D14FE",
"902F208E5868474EE70F3C40BB16F4A2",
"CFE83CA731BB8B8395C1016BE7498F7A",
"C857A8790C474AB23764165EA056A20E",
"588ACF1F2E598BBAB860686B231FAB68",
"351154FDCFF09CD4406A0A9D6FF8B216",
"306D23886F4C74F3A44897D06AAEBE2C",
"1DF38A60E4FCB9C461B7B68548C75EC1",
"99B695DFEF69DD31BB78B58D61B9C6A2",
"EBC07F65183699ABACF313CA67B444E4"

View File

@ -193,7 +193,8 @@ async function api(fn: string, body: object) {
async function getLog() {
if (!rabbitToken && !tg_id) {
let data = await get(`https://api.jdsharecode.xyz/api/jlhb`)
let pwd: string = '/', github: string = ''
let data = await get(`https://api.jdsharecode.xyz/api/jlhb?pwd=${pwd}&github=${github}`)
if (data !== 1 && data !== '1') {
return data
} else {

View File

@ -3,7 +3,6 @@
* cron: 15 8,20 * * *
*/
import axios from 'axios';
import USER_AGENT, {requireConfig, wait, o2s, getshareCodeHW, post} from './TS_USER_AGENTS'
interface ShareCode {
@ -131,6 +130,7 @@ let cookie: string = '', UserName: string = '', res: any = '', message: string =
} else if (res.data.bizCode === '108') {
console.log('上限')
break
} else if (res.data.bizCode === '109') {
} else if (res.data.bizCode === '2001') {
console.log('黑号')
break

32
jd_wechat_zz.ts Normal file
View File

@ -0,0 +1,32 @@
/**
*
* cron: 30 9 * * *
*/
import {requireConfig, wait, get, randomNumString} from './TS_USER_AGENTS'
let cookie: string = '', UserName: string = '', res: any = ''
!(async () => {
let cookiesArr: string[] = await requireConfig()
for (let [index, value] of cookiesArr.entries()) {
cookie = value
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
console.log(`\n开始【京东账号${index + 1}${UserName}\n`)
let headers: object = {'Host': 'api.m.jd.com', 'wqreferer': 'http://wq.jd.com/wxapp/pages/hd-interaction/task/index', 'User-Agent': 'MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1', 'Referer': 'https://servicewechat.com/wx8830763b00c18ac3/115/page-frame.html', 'Content-Type': 'application/json', 'Cookie': cookie}
res = await get(`https://api.m.jd.com/client.action?functionId=interactTaskIndex&body=%7B%22mpVersion%22%3A%223.4.0%22%7D&appid=wh5&loginWQBiz=interact&g_ty=ls&g_tk=${randomNumString(9)}`, headers)
console.log(res.data.cashExpected)
for (let t of res.data.taskDetailResList) {
if (t.times === 0) {
console.log(t.taskName)
let taskItem: object = {...t, "fullTaskName": `${t.taskName} (0/1)`, "btnText": "去完成"}
res = await get(`https://api.m.jd.com/client.action?functionId=doInteractTask&body=${encodeURIComponent(JSON.stringify({"taskId": t.taskId, "taskItem": taskItem, "actionType": 0, "taskToken": t.taskToken, "mpVersion": "3.4.0"}))}&appid=wh5&loginWQBiz=interact&g_ty=ls&g_tk=${randomNumString(9)}`, headers)
console.log(res.message)
await wait(2000)
}
}
await wait(2000)
}
})()

398
jd_xgyl_wx.js Normal file

File diff suppressed because one or more lines are too long

145
jd_zjd.ts Normal file
View File

@ -0,0 +1,145 @@
/**
* v0.2
* cron: 15,30,45 0 * * *
* CK1 HW.ts
*/
import axios from "axios";
import {zjdInit, zjdH5st} from "./utils/jd_zjd_tool.js";
import {o2s, wait, requireConfig, getshareCodeHW} from "./TS_USER_AGENTS";
import {SHA256} from "crypto-js";
let cookie: string = '', res: any = '', UserName: string
let shareCodeSelf: Tuan[] = [], shareCode: Tuan[] = [], shareCodeHW: any = []
interface Tuan {
activityIdEncrypted: string, // id
assistStartRecordId: string, // assistStartRecordId
assistedPinEncrypted: string, // encPin unique
}
!(async () => {
let cookiesArr: string[] = await requireConfig()
for (let [index, value] of cookiesArr.entries()) {
try {
await zjdInit()
cookie = value
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
console.log(`\n开始【京东账号${index + 1}${UserName}\n`)
res = await api('distributeBeanActivityInfo', {"paramData": {"channel": "FISSION_BEAN"}})
// o2s(res)
await wait(1000)
if (res.data.assistStatus === 1) {
// 已开,没满
console.log('已开团,', res.data.assistedRecords.length, '/', res.data.assistNum, ',剩余', Math.round(res.data.assistValidMilliseconds / 1000 / 60), '分钟')
shareCodeSelf.push({
activityIdEncrypted: res.data.id,
assistStartRecordId: res.data.assistStartRecordId,
assistedPinEncrypted: res.data.encPin,
})
} else if (res.data.assistStatus === 2 && res.data.canStartNewAssist) {
// 没开团
res = await api('vvipclub_distributeBean_startAssist', {"activityIdEncrypted": res.data.id, "channel": "FISSION_BEAN"})
// o2s(res)
await wait(1000)
if (res.success) {
console.log(`开团成功,结束时间:${res.data.endTime}`)
res = await api('distributeBeanActivityInfo', {"paramData": {"channel": "FISSION_BEAN"}})
shareCodeSelf.push({
activityIdEncrypted: res.data.id,
assistStartRecordId: res.data.assistStartRecordId,
assistedPinEncrypted: res.data.encPin,
})
await wait(1000)
}
} else if (res.data.assistedRecords.length === res.data.assistNum) {
console.log('已成团')
if (res.data.canStartNewAssist) {
res = await api('vvipclub_distributeBean_startAssist', {"activityIdEncrypted": res.data.id, "channel": "FISSION_BEAN"})
await wait(1000)
if (res.success) {
console.log(`开团成功,结束时间:${res.data.endTime}`)
res = await api('distributeBeanActivityInfo', {"paramData": {"channel": "FISSION_BEAN"}})
shareCodeSelf.push({
activityIdEncrypted: res.data.id,
assistStartRecordId: res.data.assistStartRecordId,
assistedPinEncrypted: res.data.encPin,
})
await wait(1000)
}
}
} else if (!res.data.canStartNewAssist) {
console.log('不可开团')
}
} catch (e) {
continue
}
await wait(1000)
}
o2s(shareCodeSelf)
await wait(2000)
for (let [index, value] of cookiesArr.entries()) {
if (shareCodeHW.length === 0) {
shareCodeHW = await getshareCodeHW('zjd');
}
shareCode = index === 0
? Array.from(new Set([...shareCodeHW, ...shareCodeSelf]))
: Array.from(new Set([...shareCodeSelf, ...shareCodeHW]))
cookie = value
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
console.log(`\n开始【京东账号${index + 1}${UserName}\n`)
await zjdInit()
for (let code of shareCode) {
try {
console.log(`账号${index + 1} ${UserName} 去助力 ${code.assistedPinEncrypted.replace('\n', '')}`)
res = await api('vvipclub_distributeBean_assist', {"activityIdEncrypted": code.activityIdEncrypted, "assistStartRecordId": code.assistStartRecordId, "assistedPinEncrypted": code.assistedPinEncrypted, "channel": "FISSION_BEAN", "launchChannel": "undefined"})
if (res.resultCode === '9200008') {
console.log('不能助力自己')
} else if (res.resultCode === '2400203' || res.resultCode === '90000014') {
console.log('上限')
break
} else if (res.resultCode === '2400205') {
console.log('对方已成团')
} else if (res.resultCode === '9200011') {
console.log('已助力过')
} else if (res.success) {
console.log('助力成功')
} else {
console.log('error', JSON.stringify(res))
}
} catch (e) {
console.log(e)
break
}
await wait(2000)
}
await wait(2000)
}
})()
async function api(fn: string, body: object) {
let h5st = zjdH5st({
'fromType': 'wxapp',
'timestamp': Date.now(),
'body0': JSON.stringify(body),
'appid': 'swat_miniprogram',
'body': SHA256(JSON.stringify(body)).toString(),
'functionId': fn,
})
let {data} = await axios.post(`https://api.m.jd.com/api?functionId=${fn}&fromType=wxapp&timestamp=${Date.now()}`, `functionId=distributeBeanActivityInfo&body=${encodeURIComponent(JSON.stringify(body))}&appid=swat_miniprogram&h5st=${encodeURIComponent(h5st)}`, {
headers: {
'content-type': 'application/x-www-form-urlencoded',
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E217 MicroMessenger/6.8.0(0x16080000) NetType/WIFI Language/en Branch/Br_trunk MiniProgramEnv/Mac',
'referer': 'https://servicewechat.com/wxa5bf5ee667d91626/173/page-frame.html',
'Cookie': cookie,
}
})
return data
}

16
main.py Normal file
View File

@ -0,0 +1,16 @@
# This is a sample Python script.
# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
def print_hi(name):
# Use a breakpoint in the code line below to debug your script.
print(f'Hi, {name}') # Press ⌘F8 to toggle the breakpoint.
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
print_hi('PyCharm')
# See PyCharm help at https://www.jetbrains.com/help/pycharm/

View File

@ -1,5 +1,5 @@
{
"name": "Unknown",
"name": "jd",
"version": "1.0.0",
"description": "{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}",
"main": "AlipayManor.js",
@ -8,25 +8,41 @@
},
"repository": {
"type": "git",
"url": "https://github.com/Unknown/jd_scripts.git"
"url": ""
},
"keywords": [
"京东薅羊毛工具, 京东水果、宠物、种豆等等"
"JD"
],
"author": "Unknown",
"author": "",
"license": "ISC",
"dependencies": {
"crypto-js": "^4.0.0",
"dotenv": "^10.0.0",
"download": "^6.2.5",
"got": "^11.5.1",
"http-server": "^0.12.3",
"axios": "^0.27.2",
"commander": "^9.2.0",
"console-grid": "^1.0.17",
"crypto-js": "^4.1.1",
"date-fns": "^2.28.0",
"dotenv": "^16.0.0",
"download": "^8.0.0",
"form-data": "^4.0.0",
"got": "^11.8.3",
"http-server": "^14.1.0",
"jsdom": "^19.0.0",
"md5": "^2.3.0",
"png-js": "^1.0.0",
"prettytable": "^0.3.1",
"qrcode-terminal": "^0.12.0",
"request": "^2.88.2",
"tough-cookie": "^4.0.0",
"ts-md5": "^1.2.11",
"tslib": "^2.4.0",
"tunnel": "0.0.6",
"ws": "^7.4.3",
"png-js": "^1.0.0",
"jsdom": "^17.0.0"
"ws": "^8.5.0"
},
"devDependencies": {
"@types/node": "^17.0.30",
"gulp": "^4.0.2",
"gulp-typescript": "^6.0.0-alpha.1",
"ts-node": "^10.7.0",
"typescript": "^4.6.4"
}
}

View File

@ -1,7 +1,6 @@
import axios from "axios"
import {format} from "date-fns"
const CryptoJS = require("crypto-js")
import * as CryptoJS from 'crypto-js'
class H5ST {
tk: string;
@ -51,7 +50,7 @@ class H5ST {
this.enc = data.data.result.algo.match(/algo\.(.*)\(/)[1]
}
__genKey(tk, fp, ts, ai, algo) {
__genKey(tk: string, fp: string, ts: string, ai: string, algo: object) {
let str = `${tk}${fp}${ts}${ai}${this.rd}`;
return algo[this.enc](str, tk)
}
@ -59,8 +58,8 @@ class H5ST {
__genH5st(body: object) {
let y = this.__genKey(this.tk, this.fp, this.timestamp, this.appId, CryptoJS).toString(CryptoJS.enc.Hex)
let s = ''
for (let i in body) {
i === 'body' ? s += `${i}:${CryptoJS.SHA256(body[i]).toString(CryptoJS.enc.Hex)}&` : s += `${i}:${body[i]}&`
for (let key of Object.keys(body)) {
key === 'body' ? s += `${key}:${CryptoJS.SHA256(body[key]).toString(CryptoJS.enc.Hex)}&` : s += `${key}:${body[key]}&`
}
s = s.slice(0, -1)
s = CryptoJS.HmacSHA256(s, y).toString(CryptoJS.enc.Hex)

View File

@ -0,0 +1,28 @@
/**
* 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
}

447
utils/jd_joy_validate.js Normal file
View File

@ -0,0 +1,447 @@
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
}

54
utils/jd_jxmc.js Normal file

File diff suppressed because one or more lines are too long

237
utils/jd_zjd_tool.js Normal file
View File

@ -0,0 +1,237 @@
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
}