mirror of
https://github.com/shufflewzc/faker2.git
synced 2025-04-23 02:48:44 +08:00
update
This commit is contained in:
parent
cdddf6da86
commit
f62fec395c
@ -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')) {
|
||||
|
22
jd_cash.js
22
jd_cash.js
@ -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 {
|
||||
data = JSON.parse(data);
|
||||
|
||||
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 {
|
||||
|
31
jd_dpqd.js
31
jd_dpqd.js
@ -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"
|
||||
|
@ -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 {
|
||||
|
@ -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
32
jd_wechat_zz.ts
Normal 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
398
jd_xgyl_wx.js
Normal file
File diff suppressed because one or more lines are too long
145
jd_zjd.ts
Normal file
145
jd_zjd.ts
Normal 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×tamp=${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
16
main.py
Normal 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/
|
40
package.json
40
package.json
@ -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"
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
28
utils/jd_joy_getInvokeKey.ts
Normal file
28
utils/jd_joy_getInvokeKey.ts
Normal 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
447
utils/jd_joy_validate.js
Normal 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
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
237
utils/jd_zjd_tool.js
Normal 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
|
||||
}
|
Loading…
Reference in New Issue
Block a user