x1ongzhu 1 년 전
부모
커밋
3ad16fe936
12개의 변경된 파일580개의 추가작업 그리고 3개의 파일을 삭제
  1. 30 0
      device.json
  2. 2 2
      index.js
  3. 200 0
      ip
  4. 41 0
      magisk-c.js
  5. 55 0
      magisk.js
  6. 61 0
      module.js
  7. 62 0
      name.js
  8. 2 1
      package.json
  9. 62 0
      pif.js
  10. 10 0
      setup.sh
  11. 50 0
      updateDevice.js
  12. 5 0
      yarn.lock

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 30 - 0
device.json


+ 2 - 2
index.js

@@ -21,7 +21,7 @@ const socket = io("http://47.98.225.28/")
 socket.on("connect", async () => {
     console.log("connected")
     for (let d of devices) {
-        if (parseInt(d.version) < 131) {
+        if (parseInt(d.version) < 136) {
             console.log("update " + d.name)
             socket.emit(
                 "redirect",
@@ -31,7 +31,7 @@ socket.on("connect", async () => {
                         id: new Date().getTime() + "",
                         action: "installApk",
                         data: {
-                            apkUrl: "https://nebuai.oss-cn-hangzhou.aliyuncs.com/application/20241010/5y3t86wh.apk"
+                            apkUrl: "https://nebuai.oss-cn-hangzhou.aliyuncs.com/application/20241016/zje1ynoq.apk"
                         }
                     }
                 },

+ 200 - 0
ip

@@ -0,0 +1,200 @@
+192.168.11.1
+192.168.11.51
+192.168.11.52
+192.168.11.53
+192.168.11.56
+192.168.11.57
+192.168.11.58
+192.168.11.59
+192.168.11.60
+192.168.11.61
+192.168.11.64
+192.168.11.65
+192.168.11.66
+192.168.11.67
+192.168.11.68
+192.168.11.69
+192.168.11.70
+192.168.11.78
+192.168.11.82
+192.168.11.83
+192.168.11.84
+192.168.11.85
+192.168.11.86
+192.168.11.89
+192.168.11.90
+192.168.11.91
+192.168.11.92
+192.168.11.93
+192.168.11.94
+192.168.11.98
+192.168.11.99
+192.168.11.100
+192.168.11.104
+192.168.11.106
+192.168.11.109
+192.168.11.110
+192.168.11.111
+192.168.11.112
+192.168.11.114
+192.168.11.115
+192.168.11.116
+192.168.11.120
+192.168.11.122
+192.168.11.125
+192.168.11.137
+192.168.11.141
+192.168.11.146
+192.168.11.147
+192.168.11.148
+192.168.11.149
+192.168.11.151
+192.168.11.154
+192.168.11.156
+192.168.11.157
+192.168.11.158
+192.168.11.159
+192.168.11.160
+192.168.11.161
+192.168.11.162
+192.168.11.163
+192.168.11.170
+192.168.11.172
+192.168.11.173
+192.168.11.174
+192.168.11.176
+192.168.11.178
+192.168.11.181
+192.168.11.182
+192.168.11.183
+192.168.11.184
+192.168.11.185
+192.168.11.186
+192.168.11.187
+192.168.11.188
+192.168.11.189
+192.168.11.190
+192.168.11.191
+192.168.11.195
+192.168.11.196
+192.168.11.197
+192.168.11.198
+192.168.11.199
+192.168.11.206
+192.168.11.207
+192.168.11.208
+192.168.11.209
+192.168.11.211
+192.168.11.212
+192.168.11.216
+192.168.11.217
+192.168.11.218
+192.168.11.221
+192.168.11.222
+192.168.11.225
+192.168.11.226
+192.168.11.234
+192.168.11.238
+192.168.11.242
+192.168.11.244
+192.168.11.246
+192.168.11.247
+192.168.12.1
+192.168.12.52
+192.168.12.53
+192.168.12.54
+192.168.12.55
+192.168.12.56
+192.168.12.59
+192.168.12.62
+192.168.12.63
+192.168.12.66
+192.168.12.67
+192.168.12.70
+192.168.12.77
+192.168.12.78
+192.168.12.85
+192.168.12.86
+192.168.12.88
+192.168.12.90
+192.168.12.91
+192.168.12.97
+192.168.12.98
+192.168.12.99
+192.168.12.100
+192.168.12.102
+192.168.12.106
+192.168.12.107
+192.168.12.108
+192.168.12.109
+192.168.12.113
+192.168.12.116
+192.168.12.117
+192.168.12.119
+192.168.12.120
+192.168.12.121
+192.168.12.124
+192.168.12.126
+192.168.12.127
+192.168.12.130
+192.168.12.136
+192.168.12.138
+192.168.12.142
+192.168.12.145
+192.168.12.148
+192.168.12.150
+192.168.12.152
+192.168.12.156
+192.168.12.158
+192.168.12.161
+192.168.12.162
+192.168.12.165
+192.168.12.166
+192.168.12.172
+192.168.12.173
+192.168.12.177
+192.168.12.179
+192.168.12.186
+192.168.12.187
+192.168.12.189
+192.168.12.193
+192.168.12.194
+192.168.12.195
+192.168.12.196
+192.168.12.198
+192.168.12.199
+192.168.12.200
+192.168.12.202
+192.168.12.203
+192.168.12.204
+192.168.12.205
+192.168.12.206
+192.168.12.207
+192.168.12.209
+192.168.12.211
+192.168.12.212
+192.168.12.213
+192.168.12.214
+192.168.12.215
+192.168.12.220
+192.168.12.221
+192.168.12.222
+192.168.12.223
+192.168.12.224
+192.168.12.228
+192.168.12.229
+192.168.12.230
+192.168.12.231
+192.168.12.232
+192.168.12.233
+192.168.12.234
+192.168.12.235
+192.168.12.238
+192.168.12.240
+192.168.12.241
+192.168.12.242
+192.168.12.243
+192.168.12.244
+192.168.12.245
+192.168.12.246
+192.168.12.247

+ 41 - 0
magisk-c.js

@@ -0,0 +1,41 @@
+import { io } from "socket.io-client"
+import axios from "axios"
+import { setTimeout } from "timers/promises"
+const axiosInstance = axios.create({
+    baseURL: "http://47.98.225.28/api",
+    headers: {
+        Authorization:
+            "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpvdW1hQWRtaW4iLCJzdWIiOjEsInJvbGVzIjpbImFkbWluIl0sImlhdCI6MTcyNjU4MTk1OH0.dQiHFYaDDa1qp4OpEHaH5SCZ9dafJ8uO9fAAc8HZgAo"
+    }
+})
+
+const {
+    data: { items: devices }
+} = await axiosInstance.post("/device", {
+    page: { page: 1, limit: 1000 },
+    search: { where: { online: true }, order: { name: "ASC" } }
+})
+
+for (let device of devices) {
+    try {
+        const {
+            data: { out }
+        } = await axiosInstance.post(
+            `/device/${device.id}/sendMessage`,
+            {
+                action: "runScript",
+                data: {
+                    script: "magisk -c"
+                }
+            },
+            {
+                timeout: 2000
+            }
+        )
+        if (!out.includes("27000")) {
+            console.error(device.id, device.name)
+        }
+    } catch (e) {
+        console.log(device.id, device.name, e.message)
+    }
+}

+ 55 - 0
magisk.js

@@ -0,0 +1,55 @@
+import { io } from "socket.io-client"
+import axios from "axios"
+import { setTimeout } from "timers/promises"
+const axiosInstance = axios.create({
+    baseURL: "http://47.98.225.28/api",
+    headers: {
+        Authorization:
+            "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpvdW1hQWRtaW4iLCJzdWIiOjEsInJvbGVzIjpbImFkbWluIl0sImlhdCI6MTcyNjU4MTk1OH0.dQiHFYaDDa1qp4OpEHaH5SCZ9dafJ8uO9fAAc8HZgAo"
+    }
+})
+
+const {
+    data: { items: devices }
+} = await axiosInstance.post("/device", {
+    page: { page: 1, limit: 1000 },
+    search: { where: { online: true }, order: { name: "ASC" } }
+})
+
+for (let device of devices) {
+    try {
+        const {
+            data: { out }
+        } = await axiosInstance.post(
+            `/device/${device.id}/sendMessage`,
+            {
+                action: "runScript",
+                data: {
+                    script: "dumpsys package com.topjohnwu.magisk | grep versionName"
+                }
+            },
+            {
+                timeout: 2000
+            }
+        )
+        if (!out.includes("versionName=28.0")) {
+            console.error(device.id, device.name)
+            axiosInstance
+                .post(
+                    `/device/${device.id}/sendMessage`,
+                    {
+                        action: "installApk",
+                        data: {
+                            apkUrl: "https://nebuai.oss-cn-hangzhou.aliyuncs.com/application/20241011/t9ocwlqc.apk"
+                        }
+                    },
+                    {
+                        timeout: 2000
+                    }
+                )
+                .catch(e => console.log(e.message))
+        }
+    } catch (e) {
+        console.log(device.id, device.name, e.message)
+    }
+}

+ 61 - 0
module.js

@@ -0,0 +1,61 @@
+import { io } from "socket.io-client"
+import axios from "axios"
+import { setTimeout } from "timers/promises"
+const axiosInstance = axios.create({
+    baseURL: "http://47.98.225.28/api",
+    headers: {
+        Authorization:
+            "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpvdW1hQWRtaW4iLCJzdWIiOjEsInJvbGVzIjpbImFkbWluIl0sImlhdCI6MTcyNjU4MTk1OH0.dQiHFYaDDa1qp4OpEHaH5SCZ9dafJ8uO9fAAc8HZgAo"
+    }
+})
+
+const {
+    data: { items: devices }
+} = await axiosInstance.post("/device", {
+    page: { page: 1, limit: 1000 },
+    search: { where: { online: true }, order: { name: "ASC" } }
+})
+for (let device of devices) {
+    try {
+        const {
+            data: { out }
+        } = await axiosInstance.post(
+            `/device/${device.id}/sendMessage`,
+            {
+                action: "runScript",
+                data: {
+                    script: `cat /data/adb/modules/playintegrityfix/module.prop`
+                }
+            },
+            {
+                timeout: 10000
+            }
+        )
+        if (!out.includes("versionCode=17700")) {
+            console.error(device.id, device.name)
+            axiosInstance
+                .post(
+                    `/device/${device.id}/sendMessage`,
+                    {
+                        action: "runScript",
+                        data: {
+                            script: `magisk --denylist rm com.google.android.gms
+    magisk --denylist rm com.google.android.apps.messaging
+    magisk --sqlite "update settings set value = 1 where key = 'zygisk'"
+    /data/adb/magisk/busybox wget -O /data/local/tmp/pif.zip https://nebuai.oss-cn-hangzhou.aliyuncs.com/application/20241016/1txzpcgs.zip
+    magisk --install-module /data/local/tmp/pif.zip
+    rm /data/local/tmp/pif.zip
+    /data/adb/magisk/busybox wget -O /data/adb/modules/playintegrityfix/pif.json https://nebuai.oss-cn-hangzhou.aliyuncs.com/application/20241016/yq6jx56d.json
+    am force-stop com.google.android.gms`
+                        }
+                    },
+                    {
+                        timeout: 10000
+                    }
+                )
+                .catch(e => console.log(e.message))
+        }
+    } catch (e) {
+        console.log(device.id, device.name, e.message)
+    }
+}

+ 62 - 0
name.js

@@ -0,0 +1,62 @@
+import axios from "axios"
+import { WebSocket } from "ws"
+const axiosInstance = axios.create({
+    baseURL: "http://47.98.225.28/api",
+    headers: {
+        Authorization:
+            "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpvdW1hQWRtaW4iLCJzdWIiOjEsInJvbGVzIjpbImFkbWluIl0sImlhdCI6MTcyNjU4MTk1OH0.dQiHFYaDDa1qp4OpEHaH5SCZ9dafJ8uO9fAAc8HZgAo"
+    }
+})
+
+const {
+    data: { items: devices }
+} = await axiosInstance.post("/device", {
+    page: { page: 1, limit: 1000 },
+    search: { where: { online: true }, order: { name: "ASC" } }
+})
+
+const ws = new WebSocket("ws://121.40.132.44:6001")
+let xwDevices = []
+ws.onopen = () => {
+    console.log("Connected to WebSocket")
+    ws.send(
+        JSON.stringify({
+            action: "list"
+        })
+    )
+    console.log("Requesting device list")
+
+    setTimeout(() => {
+        console.log("Updating device names")
+        if (xwDevices.length > 0) {
+            let i = 101
+            for (let device of devices) {
+                const xwDevice = xwDevices.find(
+                    xwDevice => xwDevice.onlySerial === device.id
+                )
+                if (xwDevice) {
+                    console.log(device.name)
+                    ws.send(
+                        JSON.stringify({
+                            action: "updateDevices",
+                            devices: xwDevice.serial,
+                            data: {
+                                sort: i++,
+                                name: device.name
+                            }
+                        })
+                    )
+                }
+            }
+        } else {
+            console.log("No device found")
+        }
+    }, 2000)
+}
+ws.onmessage = e => {
+    const data = JSON.parse(e.data)
+    if (data.code === 10000 && data.data instanceof Array) {
+        xwDevices = data.data
+        console.log("found " + xwDevices.length + " devices")
+    }
+}

+ 2 - 1
package.json

@@ -1,7 +1,8 @@
 {
   "dependencies": {
     "axios": "^1.7.7",
-    "socket.io-client": "^4.7.5"
+    "socket.io-client": "^4.7.5",
+    "ws": "^8.18.0"
   },
   "type": "module"
 }

+ 62 - 0
pif.js

@@ -0,0 +1,62 @@
+import { io } from "socket.io-client"
+import axios from "axios"
+import { setTimeout } from "timers/promises"
+const axiosInstance = axios.create({
+    baseURL: "http://47.98.225.28/api",
+    headers: {
+        Authorization:
+            "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpvdW1hQWRtaW4iLCJzdWIiOjEsInJvbGVzIjpbImFkbWluIl0sImlhdCI6MTcyNjU4MTk1OH0.dQiHFYaDDa1qp4OpEHaH5SCZ9dafJ8uO9fAAc8HZgAo"
+    }
+})
+
+const {
+    data: { items: devices }
+} = await axiosInstance.post("/device", {
+    page: { page: 1, limit: 1000 },
+    search: { where: { online: true }, order: { name: "ASC" } }
+})
+
+for (let device of devices) {
+    try {
+        const {
+            data: { out }
+        } = await axiosInstance.post(
+            `/device/${device.id}/sendMessage`,
+            {
+                action: "runScript",
+                data: {
+                    script: "cat /data/adb/modules/playintegrityfix/pif.json"
+                }
+            },
+            {
+                timeout: 10000
+            }
+        )
+        if (
+            !out.includes(
+                "google/komodo_beta/komodo:15/AP41.240823.009/12329489:user/release-keys"
+            )
+        ) {
+            console.error(device.id, device.name, "update")
+            axiosInstance
+                .post(
+                    `/device/${device.id}/sendMessage`,
+                    {
+                        action: "runScript",
+                        data: {
+                            script: `/data/adb/magisk/busybox wget -O /data/adb/modules/playintegrityfix/pif.json https://nebuai.oss-cn-hangzhou.aliyuncs.com/application/20241016/yq6jx56d.json
+am force-stop com.google.android.gms`
+                        }
+                    },
+                    {
+                        timeout: 10000
+                    }
+                )
+                .catch(e => console.log(device.id, device.name, e.message))
+        } else {
+            console.log(device.id, device.name, "OK")
+        }
+    } catch (e) {
+        console.log(e.message)
+    }
+}

+ 10 - 0
setup.sh

@@ -0,0 +1,10 @@
+
+magisk --denylist rm com.google.android.gms
+magisk --denylist rm com.google.android.apps.messaging
+magisk --sqlite "update settings set value = 1 where key = 'zygisk'"
+/data/adb/magisk/busybox wget -O /data/local/tmp/pif.zip https://nebuai.oss-cn-hangzhou.aliyuncs.com/application/20241016/1txzpcgs.zip
+magisk --install-module /data/local/tmp/pif.zip
+rm /data/local/tmp/pif.zip
+/data/adb/magisk/busybox wget -O /data/adb/modules/playintegrityfix/pif.json https://nebuai.oss-cn-hangzhou.aliyuncs.com/application/20241016/yq6jx56d.json
+am force-stop com.google.android.gms
+sleep 5 reboot

+ 50 - 0
updateDevice.js

@@ -0,0 +1,50 @@
+import { io } from "socket.io-client"
+import axios from "axios"
+import { setTimeout } from "timers/promises"
+const axiosInstance = axios.create({
+    baseURL: "http://47.98.225.28/api",
+    headers: {
+        Authorization:
+            "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpvdW1hQWRtaW4iLCJzdWIiOjEsInJvbGVzIjpbImFkbWluIl0sImlhdCI6MTcyNjU4MTk1OH0.dQiHFYaDDa1qp4OpEHaH5SCZ9dafJ8uO9fAAc8HZgAo"
+    }
+})
+
+const {
+    data: { items: devices }
+} = await axiosInstance.post("/device", {
+    page: { page: 1, limit: 1000 },
+    search: { where: { online: true }, order: { name: "ASC" } }
+})
+
+for (let device of devices) {
+    if (device.id.length === 16) {
+        console.log(device.name)
+        try {
+            const {
+                data: { out }
+            } = await axiosInstance.post(
+                `/device/${device.id}/sendMessage`,
+                {
+                    action: "runScript",
+                    data: {
+                        script: "getprop ro.serialno"
+                    }
+                },
+                {
+                    timeout: 2000
+                }
+            )
+            const serial = out.trim()
+            if (serial && serial != device.id) {
+                axiosInstance.post(`/device/${device.id}/sendMessage`, {
+                    action: "updateDevice",
+                    data: {
+                        id: serial
+                    }
+                })
+            }
+        } catch (e) {
+            console.log(e.message)
+        }
+    }
+}

+ 5 - 0
yarn.lock

@@ -110,6 +110,11 @@ socket.io-parser@~4.2.4:
     "@socket.io/component-emitter" "~3.1.0"
     debug "~4.3.1"
 
+ws@^8.18.0:
+  version "8.18.0"
+  resolved "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
+  integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
+
 ws@~8.17.1:
   version "8.17.1"
   resolved "https://registry.npmmirror.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.