fix:设备信息

This commit is contained in:
kissnavel 2024-09-22 00:48:04 +08:00
parent 7f27bbf332
commit d6e52b1a24
8 changed files with 49 additions and 14 deletions

View file

@ -69,7 +69,7 @@ git clone --depth=1 https://gitee.com/bietiaop/ZZZ-Plugin.git ./plugins/ZZZ-Plug
## 绑定设备 ## 绑定设备
本插件会自带一个默认设备参数模拟真机进行请求,但是这个设备参数会被所有使用本插件的用户共同使用,因此**大概率**会遭遇账号异常,因此在遇到米游社抛出对应错误时,需要每个人绑定真实设备参数进行请求。 本插件会自带一个默认设备参数模拟真机进行请求,但是这个设备参数会被所有使用本插件的用户共同使用,因此**大概率**会遭遇账号异常,因此在遇到米游社抛出对应错误时,需要每个人绑定登陆米游社账号的常用设备参数进行请求。
如果需要绑定设备,请发送 `%绑定设备帮助` 进行查看如何绑定。第一种方法就是抓包此种方法危害性较小技术难度相对较高但是IOS与Android设备通用。 如果需要绑定设备,请发送 `%绑定设备帮助` 进行查看如何绑定。第一种方法就是抓包此种方法危害性较小技术难度相对较高但是IOS与Android设备通用。

View file

@ -33,6 +33,7 @@ export async function toSetDefaultDevice() {
!info?.deviceName || !info?.deviceName ||
!info?.deviceBoard || !info?.deviceBoard ||
!info?.deviceModel || !info?.deviceModel ||
!info?.androidVersion ||
!info?.deviceFingerprint || !info?.deviceFingerprint ||
!info?.deviceProduct !info?.deviceProduct
) { ) {
@ -43,6 +44,7 @@ export async function toSetDefaultDevice() {
productName: info.deviceProduct, productName: info.deviceProduct,
productType: info.deviceName, productType: info.deviceName,
modelName: info.deviceModel, modelName: info.deviceModel,
osVersion: info.androidVersion,
deviceInfo: info.deviceFingerprint, deviceInfo: info.deviceFingerprint,
board: info.deviceBoard, board: info.deviceBoard,
}); });

View file

@ -30,7 +30,6 @@ export class Panel extends ZZZPlugin {
async bindDevice() { async bindDevice() {
const uid = await this.getUID(); const uid = await this.getUID();
//先throw一步 //先throw一步
const ltuid = await this.getLtuid();
this.setContext('toBindDevice'); this.setContext('toBindDevice');
await this.reply( await this.reply(
`为UID ${uid}绑定设备,请发送设备信息(建议私聊发送),或者发送“取消”取消绑定`, `为UID ${uid}绑定设备,请发送设备信息(建议私聊发送),或者发送“取消”取消绑定`,
@ -73,6 +72,7 @@ export class Panel extends ZZZPlugin {
!info?.deviceBoard || !info?.deviceBoard ||
!info?.deviceModel || !info?.deviceModel ||
!info?.oaid || !info?.oaid ||
!info?.androidVersion ||
!info?.deviceFingerprint || !info?.deviceFingerprint ||
!info?.deviceProduct !info?.deviceProduct
) { ) {

View file

@ -2,5 +2,6 @@
productName: J9110 productName: J9110
productType: J9110 productType: J9110
modelName: J9110 modelName: J9110
osVersion: 11
deviceInfo: Sony/J9110/J9110:11/55.2.A.4.332/055002A004033203408384484:user/release-keys deviceInfo: Sony/J9110/J9110:11/55.2.A.4.332/055002A004033203408384484:user/release-keys
board: msmnile board: msmnile

View file

@ -259,6 +259,15 @@ export function supportGuoba() {
placeholder: '请输入modelName', placeholder: '请输入modelName',
}, },
}, },
{
field: 'device.osVersion',
label: 'osVersion(androidVersion)',
bottomHelpMessage: '设置默认设备osVersion字段',
component: 'Input',
componentProps: {
placeholder: '请输入osVersion',
},
},
{ {
field: 'device.deviceInfo', field: 'device.deviceInfo',
label: 'deviceInfo(deviceFingerprint)', label: 'deviceInfo(deviceFingerprint)',

View file

@ -212,10 +212,17 @@ export default class MysZZZApi extends MysApi {
* @returns {object} * @returns {object}
*/ */
getHeaders(query = '', body = '') { getHeaders(query = '', body = '') {
const info = this.getBindInfo()
const deviceCfg = settings.getConfig('device');
const defDeviceCfg = settings.getdefSet('device');
const deviceInfo = info?.deviceFingerprint ?? _.get(deviceCfg, 'deviceInfo') ?? _.get(defDeviceCfg, 'deviceInfo');
const osVersion = info?.androidVersion ?? _.get(deviceCfg, 'osVersion') ?? _.get(defDeviceCfg, 'osVersion');
const modelName = info?.deviceModel ?? _.get(deviceCfg, 'modelName') ?? _.get(defDeviceCfg, 'modelName');
const deviceDisplay = deviceInfo.split('/')[3];
const cn = { const cn = {
app_version: '2.73.1', app_version: '2.73.1',
User_Agent: User_Agent:
'Mozilla/5.0 (Linux; Android 11; J9110 Build/55.2.A.4.332; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/124.0.6367.179 Mobile Safari/537.36 miHoYoBBS/2.73.1', `Mozilla/5.0 (Linux; Android ${osVersion}; ${modelName} Build/${deviceDisplay}; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/124.0.6367.179 Mobile Safari/537.36 miHoYoBBS/2.73.1`,
client_type: '5', client_type: '5',
Origin: 'https://act.mihoyo.com', Origin: 'https://act.mihoyo.com',
X_Requested_With: 'com.mihoyo.hyperion', X_Requested_With: 'com.mihoyo.hyperion',
@ -224,7 +231,7 @@ export default class MysZZZApi extends MysApi {
const os = { const os = {
app_version: '2.57.1', app_version: '2.57.1',
User_Agent: User_Agent:
'Mozilla/5.0 (Linux; Android 11; J9110 Build/55.2.A.4.332; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/124.0.6367.179 Mobile Safari/537.36 miHoYoBBSOversea/2.57.1', `Mozilla/5.0 (Linux; Android ${osVersion}; ${modelName} Build/${deviceDisplay}; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/124.0.6367.179 Mobile Safari/537.36 miHoYoBBSOversea/2.57.1`,
client_type: '2', client_type: '2',
Origin: 'https://act.hoyolab.com', Origin: 'https://act.hoyolab.com',
X_Requested_With: 'com.mihoyo.hoyolab', X_Requested_With: 'com.mihoyo.hoyolab',
@ -250,6 +257,22 @@ export default class MysZZZApi extends MysApi {
}; };
} }
async getBindInfo() {
// 从 this.cookie 中获取ltuid
const ck = this.cookie;
let ltuid = ck.match(/ltuid=(\d+);/);
if (ltuid) {
ltuid = ltuid[1];
}
let bindInfo = await redis.get(`ZZZ:DEVICE_FP:${ltuid}:BIND`);
if (bindInfo) {
bindInfo = JSON.parse(bindInfo);
} else {
bindInfo = null;
}
return { bindInfo };
}
/** /**
* 校验状态码 * 校验状态码
* @param e 消息e * @param e 消息e
@ -310,16 +333,16 @@ export default class MysZZZApi extends MysApi {
ltuid = ltuid[1]; ltuid = ltuid[1];
} }
if (ltuid) { if (ltuid) {
let bindInfo = await redis.get(`ZZZ:DEVICE_FP:${ltuid}:BIND`); let bindInfo = this.getBindInfo();
if (bindInfo) { if (bindInfo) {
try { try {
bindInfo = JSON.parse(bindInfo);
data = { data = {
...data, ...data,
productName: bindInfo?.deviceProduct, productName: bindInfo?.deviceProduct,
deviceType: bindInfo?.deviceName, deviceType: bindInfo?.deviceName,
modelName: bindInfo?.deviceModel, modelName: bindInfo?.deviceModel,
oaid: bindInfo?.oaid, oaid: bindInfo?.oaid,
osVersion: bindInfo?.androidVersion,
deviceInfo: bindInfo?.deviceFingerprint, deviceInfo: bindInfo?.deviceFingerprint,
board: bindInfo?.deviceBoard, board: bindInfo?.deviceBoard,
}; };

View file

@ -83,10 +83,12 @@ export default class ZZZApiTool {
deviceType = _.get(deviceCfg, 'productType') ?? _.get(defDeviceCfg, 'productType'), deviceType = _.get(deviceCfg, 'productType') ?? _.get(defDeviceCfg, 'productType'),
modelName = _.get(deviceCfg, 'modelName') ?? _.get(defDeviceCfg, 'modelName'), modelName = _.get(deviceCfg, 'modelName') ?? _.get(defDeviceCfg, 'modelName'),
oaid = this.uuid, oaid = this.uuid,
osVersion = _.get(deviceCfg, 'osVersion') ?? _.get(defDeviceCfg, 'osVersion'),
deviceInfo = _.get(deviceCfg, 'deviceInfo') ?? _.get(defDeviceCfg, 'deviceInfo'), deviceInfo = _.get(deviceCfg, 'deviceInfo') ?? _.get(defDeviceCfg, 'deviceInfo'),
board = _.get(deviceCfg, 'board') ?? _.get(defDeviceCfg, 'board'), board = _.get(deviceCfg, 'board') ?? _.get(defDeviceCfg, 'board'),
} = data; } = data;
const deviceBrand = deviceInfo.split('/')[0]; const deviceBrand = deviceInfo.split('/')[0];
const deviceDisplay = deviceInfo.split('/')[3];
let urlMap = { let urlMap = {
zzz: { zzz: {
...(['prod_gf_cn'].includes(this.server) ...(['prod_gf_cn'].includes(this.server)
@ -98,7 +100,7 @@ export default class ZZZApiTool {
bbs_device_id: `${this.uuid}`, bbs_device_id: `${this.uuid}`,
device_fp: '38d7faa51d2b6', device_fp: '38d7faa51d2b6',
device_id: '35315696b7071100', device_id: '35315696b7071100',
ext_fields: `{"proxyStatus":1,"isRoot":1,"romCapacity":"512","deviceName":"${modelName}","productName":"${productName}","romRemain":"456","hostname":"BuildHost","screenSize":"1096x2434","isTablet":0,"aaid":"${this.uuid}","model":"${modelName}","brand":"${deviceBrand}","hardware":"qcom","deviceType":"${deviceType}","devId":"REL","serialNumber":"unknown","sdCapacity":107433,"buildTime":"1633631032000","buildUser":"BuildUser","simState":1,"ramRemain":"96757","appUpdateTimeDiff":1722171241616,"deviceInfo":"${deviceInfo}","vaid":"${this.uuid}","buildType":"user","sdkVersion":"30","ui_mode":"UI_MODE_TYPE_NORMAL","isMockLocation":0,"cpuType":"arm64-v8a","isAirMode":0,"ringMode":2,"chargeStatus":1,"manufacturer":"${deviceBrand}","emulatorStatus":0,"appMemory":"512","osVersion":"11","vendor":"unknown","accelerometer":"-0.084346995x8.73799x4.6301117","sdRemain":96600,"buildTags":"release-keys","packageName":"com.mihoyo.hyperion","networkType":"WiFi","oaid":"${oaid}","debugStatus":1,"ramCapacity":"107433","magnetometer":"-13.9125x-17.8875x-5.4750004","display":"${modelName}","appInstallTimeDiff":1717065300325,"packageVersion":"2.20.2","gyroscope":"0.017714571x-4.5813544E-4x0.0015271181","batteryStatus":76,"hasKeyboard":0,"board":"${board}"}`, ext_fields: `{"proxyStatus":1,"isRoot":1,"romCapacity":"512","deviceName":"${modelName}","productName":"${productName}","romRemain":"456","hostname":"BuildHost","screenSize":"1096x2434","isTablet":0,"aaid":"${this.uuid}","model":"${modelName}","brand":"${deviceBrand}","hardware":"qcom","deviceType":"${deviceType}","devId":"REL","serialNumber":"unknown","sdCapacity":107433,"buildTime":"1633631032000","buildUser":"BuildUser","simState":1,"ramRemain":"96757","appUpdateTimeDiff":1722171241616,"deviceInfo":"${deviceInfo}","vaid":"${this.uuid}","buildType":"user","sdkVersion":"30","ui_mode":"UI_MODE_TYPE_NORMAL","isMockLocation":0,"cpuType":"arm64-v8a","isAirMode":0,"ringMode":2,"chargeStatus":1,"manufacturer":"${deviceBrand}","emulatorStatus":0,"appMemory":"512","osVersion":"${osVersion}","vendor":"unknown","accelerometer":"-0.084346995x8.73799x4.6301117","sdRemain":96600,"buildTags":"release-keys","packageName":"com.mihoyo.hyperion","networkType":"WiFi","oaid":"${oaid}","debugStatus":1,"ramCapacity":"107433","magnetometer":"-13.9125x-17.8875x-5.4750004","display":"${deviceDisplay}","appInstallTimeDiff":1717065300325,"packageVersion":"2.20.2","gyroscope":"0.017714571x-4.5813544E-4x0.0015271181","batteryStatus":77,"hasKeyboard":0,"board":"${board}"}`,
platform: '2', platform: '2',
seed_id: `${this.uuid}`, seed_id: `${this.uuid}`,
seed_time: new Date().getTime() + '', seed_time: new Date().getTime() + '',
@ -135,7 +137,7 @@ export default class ZZZApiTool {
app_name: 'bbs_oversea', app_name: 'bbs_oversea',
device_fp: '38d7f2352506c', device_fp: '38d7f2352506c',
device_id: '35315696b7071100', device_id: '35315696b7071100',
ext_fields: `{"proxyStatus":1,"isRoot":1,"romCapacity":"512","deviceName":"${modelName}","productName":"${productName}","romRemain":"474","hostname":"BuildHost","screenSize":"1096x2434","isTablet":0,"model":"${modelName}","brand":"${deviceBrand}","hardware":"qcom","deviceType":"${deviceType}","devId":"REL","serialNumber":"unknown","sdCapacity":107433,"buildTime":"1633631032000","buildUser":"BuildUser","simState":1,"ramRemain":"96715","appUpdateTimeDiff":1722171191009,"deviceInfo":"${deviceInfo}","buildType":"user","sdkVersion":"30","ui_mode":"UI_MODE_TYPE_NORMAL","isMockLocation":0,"cpuType":"arm64-v8a","isAirMode":0,"ringMode":2,"app_set_id":"${this.uuid}","chargeStatus":1,"manufacturer":"${deviceBrand}","emulatorStatus":0,"appMemory":"512","adid":"${this.uuid}","osVersion":"11","vendor":"unknown","accelerometer":"-0.22372891x-1.5332011x9.802497","sdRemain":96571,"buildTags":"release-keys","packageName":"com.mihoyo.hoyolab","networkType":"WiFi","debugStatus":1,"ramCapacity":"107433","magnetometer":"3.73125x-10.668751x3.7687502","display":"${modelName}","appInstallTimeDiff":1716489549794,"packageVersion":"","gyroscope":"0.18386503x-0.006413896x-0.008857286","batteryStatus":77,"hasKeyboard":0,"board":"${board}"}`, ext_fields: `{"proxyStatus":1,"isRoot":1,"romCapacity":"512","deviceName":"${modelName}","productName":"${productName}","romRemain":"474","hostname":"BuildHost","screenSize":"1096x2434","isTablet":0,"model":"${modelName}","brand":"${deviceBrand}","hardware":"qcom","deviceType":"${deviceType}","devId":"REL","serialNumber":"unknown","sdCapacity":107433,"buildTime":"1633631032000","buildUser":"BuildUser","simState":1,"ramRemain":"96715","appUpdateTimeDiff":1722171191009,"deviceInfo":"${deviceInfo}","buildType":"user","sdkVersion":"30","ui_mode":"UI_MODE_TYPE_NORMAL","isMockLocation":0,"cpuType":"arm64-v8a","isAirMode":0,"ringMode":2,"app_set_id":"${this.uuid}","chargeStatus":1,"manufacturer":"${deviceBrand}","emulatorStatus":0,"appMemory":"512","adid":"${this.uuid}","osVersion":"${osVersion}","vendor":"unknown","accelerometer":"-0.22372891x-1.5332011x9.802497","sdRemain":96571,"buildTags":"release-keys","packageName":"com.mihoyo.hoyolab","networkType":"WiFi","debugStatus":1,"ramCapacity":"107433","magnetometer":"3.73125x-10.668751x3.7687502","display":"${deviceDisplay}","appInstallTimeDiff":1716489549794,"packageVersion":"2.20.2","gyroscope":"0.18386503x-0.006413896x-0.008857286","batteryStatus":77,"hasKeyboard":0,"board":"${board}"}`,
hoyolab_device_id: `${this.uuid}`, hoyolab_device_id: `${this.uuid}`,
platform: '2', platform: '2',
seed_id: `${this.uuid}`, seed_id: `${this.uuid}`,

View file

@ -80,10 +80,7 @@ export class ZZZPlugin extends plugin {
handler: this.e?.runtime?.handler || {}, handler: this.e?.runtime?.handler || {},
e: this.e, e: this.e,
}); });
const currentCK = Object.values(ck).find(item => { const ltuid = await this.getLtuid();
return item.ck && item.uid === uid;
});
const ltuid = currentCK?.ltuid || '';
if (!ltuid) { if (!ltuid) {
this.reply('ltuid为空请重新绑定CK'); this.reply('ltuid为空请重新绑定CK');
throw new Error('ltuid为空'); throw new Error('ltuid为空');
@ -103,6 +100,7 @@ export class ZZZPlugin extends plugin {
deviceType: bindInfo?.deviceName, deviceType: bindInfo?.deviceName,
modelName: bindInfo?.deviceModel, modelName: bindInfo?.deviceModel,
oaid: bindInfo?.oaid, oaid: bindInfo?.oaid,
osVersion: bindInfo?.androidVersion,
deviceInfo: bindInfo?.deviceFingerprint, deviceInfo: bindInfo?.deviceFingerprint,
board: bindInfo?.deviceBoard, board: bindInfo?.deviceBoard,
}; };
@ -150,7 +148,7 @@ export class ZZZPlugin extends plugin {
} }
} }
} else { } else {
deviceFp = await redis.get(`ZZZ:DEVICE_FP:${uid}`); deviceFp = await redis.get(`ZZZ:DEVICE_FP:${uid}:FP`);
if (!deviceFp) { if (!deviceFp) {
const sdk = api.getUrl('getFp'); const sdk = api.getUrl('getFp');
const res = await request(sdk.url, { const res = await request(sdk.url, {
@ -161,7 +159,7 @@ export class ZZZPlugin extends plugin {
const fpRes = await res.json(); const fpRes = await res.json();
deviceFp = fpRes?.data?.device_fp; deviceFp = fpRes?.data?.device_fp;
if (deviceFp) { if (deviceFp) {
await redis.set(`ZZZ:DEVICE_FP:${uid}`, deviceFp, { await redis.set(`ZZZ:DEVICE_FP:${uid}:FP`, deviceFp, {
EX: 86400 * 7, EX: 86400 * 7,
}); });
} }