deepadb 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +53 -19
  2. package/build/bridge/local-bridge.d.ts +40 -1
  3. package/build/bridge/local-bridge.d.ts.map +1 -1
  4. package/build/bridge/local-bridge.js +155 -5
  5. package/build/bridge/local-bridge.js.map +1 -1
  6. package/build/index.js +2 -1
  7. package/build/index.js.map +1 -1
  8. package/build/middleware/auth.d.ts +10 -0
  9. package/build/middleware/auth.d.ts.map +1 -1
  10. package/build/middleware/auth.js +48 -0
  11. package/build/middleware/auth.js.map +1 -1
  12. package/build/middleware/ui-dump.d.ts +21 -0
  13. package/build/middleware/ui-dump.d.ts.map +1 -1
  14. package/build/middleware/ui-dump.js +38 -0
  15. package/build/middleware/ui-dump.js.map +1 -1
  16. package/build/server.d.ts.map +1 -1
  17. package/build/server.js +6 -2
  18. package/build/server.js.map +1 -1
  19. package/build/tools/at-commands.d.ts.map +1 -1
  20. package/build/tools/at-commands.js +192 -0
  21. package/build/tools/at-commands.js.map +1 -1
  22. package/build/tools/diagnostics.d.ts +2 -2
  23. package/build/tools/diagnostics.d.ts.map +1 -1
  24. package/build/tools/diagnostics.js +86 -3
  25. package/build/tools/diagnostics.js.map +1 -1
  26. package/build/tools/firmware-analysis.d.ts.map +1 -1
  27. package/build/tools/firmware-analysis.js +24 -0
  28. package/build/tools/firmware-analysis.js.map +1 -1
  29. package/build/tools/input-gestures.d.ts +11 -0
  30. package/build/tools/input-gestures.d.ts.map +1 -0
  31. package/build/tools/input-gestures.js +766 -0
  32. package/build/tools/input-gestures.js.map +1 -0
  33. package/build/tools/multi-device.d.ts.map +1 -1
  34. package/build/tools/multi-device.js +186 -0
  35. package/build/tools/multi-device.js.map +1 -1
  36. package/build/tools/qemu.d.ts.map +1 -1
  37. package/build/tools/qemu.js +246 -2
  38. package/build/tools/qemu.js.map +1 -1
  39. package/build/tools/ui.js +2 -48
  40. package/build/tools/ui.js.map +1 -1
  41. package/build/tools/wireless-firmware.d.ts +16 -0
  42. package/build/tools/wireless-firmware.d.ts.map +1 -0
  43. package/build/tools/wireless-firmware.js +566 -0
  44. package/build/tools/wireless-firmware.js.map +1 -0
  45. package/package.json +3 -3
@@ -0,0 +1,566 @@
1
+ /**
2
+ * Wireless Firmware Tools — WiFi, Bluetooth, and NFC firmware identification.
3
+ *
4
+ * Provides detailed firmware versioning and chipset identification for
5
+ * short-range wireless radios. Complements the baseband/modem tools which
6
+ * cover cellular radio firmware.
7
+ *
8
+ * Queries Android system properties and dumpsys services to extract
9
+ * firmware versions, driver info, chipset identification, and capabilities.
10
+ *
11
+ * Privacy: MAC addresses and device names are opt-in (like IMEI in baseband
12
+ * tools) since they are permanent hardware identifiers.
13
+ */
14
+ import { z } from "zod";
15
+ import { OutputProcessor } from "../middleware/output-processor.js";
16
+ /**
17
+ * Parse WiFi firmware/driver information from dumpsys wifi output.
18
+ * Extracts firmware version, driver version, chipset info, and capabilities.
19
+ */
20
+ function parseWifiDumpsys(raw) {
21
+ const info = {};
22
+ // Firmware version — various formats across vendors
23
+ const fwMatch = raw.match(/Firmware\s*(?:version|Version|Ver)[:\s]+([^\n,]+)/i)
24
+ || raw.match(/Wi-?Fi\s+(?:FW|firmware)[:\s]+([^\n,]+)/i);
25
+ if (fwMatch)
26
+ info.firmwareVersion = fwMatch[1].trim();
27
+ // Driver version
28
+ const driverMatch = raw.match(/Driver\s*(?:version|Version|Ver)[:\s]+([^\n,]+)/i);
29
+ if (driverMatch)
30
+ info.driverVersion = driverMatch[1].trim();
31
+ // Chipset / hardware
32
+ const chipMatch = raw.match(/(?:Chip|Chipset|Hardware)[:\s]+([^\n,]+)/i);
33
+ if (chipMatch)
34
+ info.chipset = chipMatch[1].trim();
35
+ // Supported bands/frequencies
36
+ const band2g = raw.includes("2.4GHz") || raw.includes("2412") || raw.includes("2437");
37
+ const band5g = raw.includes("5GHz") || raw.includes("5180") || raw.includes("5745");
38
+ const band6g = raw.includes("6GHz") || raw.includes("5955") || raw.includes("6115");
39
+ const bands = [];
40
+ if (band2g)
41
+ bands.push("2.4 GHz");
42
+ if (band5g)
43
+ bands.push("5 GHz");
44
+ if (band6g)
45
+ bands.push("6 GHz");
46
+ if (bands.length > 0)
47
+ info.supportedBands = bands.join(", ");
48
+ // WiFi standard detection from capabilities
49
+ if (raw.includes("wifi7") || raw.includes("802.11be") || band6g)
50
+ info.wifiStandard = "Wi-Fi 7 (802.11be)";
51
+ else if (raw.includes("wifi6e") || raw.includes("6GHz"))
52
+ info.wifiStandard = "Wi-Fi 6E";
53
+ else if (raw.includes("wifi6") || raw.includes("802.11ax"))
54
+ info.wifiStandard = "Wi-Fi 6 (802.11ax)";
55
+ else if (raw.includes("802.11ac") || raw.includes("VHT"))
56
+ info.wifiStandard = "Wi-Fi 5 (802.11ac)";
57
+ // Country code
58
+ const ccMatch = raw.match(/Country\s*(?:code|Code)[:\s]+(\w{2})/i);
59
+ if (ccMatch)
60
+ info.countryCode = ccMatch[1].toUpperCase();
61
+ return info;
62
+ }
63
+ /**
64
+ * Parse Bluetooth information from dumpsys bluetooth_manager output.
65
+ * Extracts firmware version, chipset, BT version, adapter state, and profile support.
66
+ */
67
+ function parseBluetoothDumpsys(raw) {
68
+ const info = {};
69
+ // Firmware version / revision
70
+ const fwMatch = raw.match(/(?:FW|Firmware)\s*(?:version|Version|Ver|revision)[:\s]+([^\n,]+)/i)
71
+ || raw.match(/(?:LMP|HCI)\s*(?:sub)?version[:\s]+(?:0x)?([0-9a-fA-F]+)/i);
72
+ if (fwMatch)
73
+ info.firmwareVersion = fwMatch[1].trim();
74
+ // Chipset identification
75
+ const chipMatch = raw.match(/(?:Chip|Chipset|Controller)[:\s]+([^\n,]+)/i);
76
+ if (chipMatch)
77
+ info.chipset = chipMatch[1].trim();
78
+ // BT version from LMP version
79
+ const lmpMatch = raw.match(/(?:LMP\s*version|Bluetooth\s*version)[:\s]+(?:0x)?([0-9a-fA-F]+)/i);
80
+ if (lmpMatch) {
81
+ const lmpVer = parseInt(lmpMatch[1], 16) || parseInt(lmpMatch[1], 10);
82
+ if (lmpVer >= 13)
83
+ info.btVersion = "5.4";
84
+ else if (lmpVer >= 12)
85
+ info.btVersion = "5.3";
86
+ else if (lmpVer >= 11)
87
+ info.btVersion = "5.2";
88
+ else if (lmpVer >= 10)
89
+ info.btVersion = "5.1";
90
+ else if (lmpVer >= 9)
91
+ info.btVersion = "5.0";
92
+ else if (lmpVer >= 8)
93
+ info.btVersion = "4.2";
94
+ else if (lmpVer >= 7)
95
+ info.btVersion = "4.1";
96
+ else if (lmpVer >= 6)
97
+ info.btVersion = "4.0";
98
+ else
99
+ info.btVersion = `LMP ${lmpVer}`;
100
+ }
101
+ // Adapter state
102
+ const stateMatch = raw.match(/(?:state|State|isEnabled)[:\s=]+(ON|OFF|true|false|enabled|disabled)/i);
103
+ if (stateMatch) {
104
+ const val = stateMatch[1].toLowerCase();
105
+ info.adapterState = (val === "on" || val === "true" || val === "enabled") ? "enabled" : "disabled";
106
+ }
107
+ // LE (Low Energy) support
108
+ if (raw.includes("LE Audio") || raw.includes("isLeAudioSupported=true"))
109
+ info.leAudio = "supported";
110
+ if (raw.includes("isLe2MPhySupported=true"))
111
+ info.le2mPhy = "supported";
112
+ if (raw.includes("isLeCodedPhySupported=true"))
113
+ info.leCodedPhy = "supported";
114
+ if (raw.includes("isLeExtendedAdvertisingSupported=true"))
115
+ info.leExtAdv = "supported";
116
+ // Bonded device count (not the names/addresses)
117
+ const bondedMatch = raw.match(/Bonded\s*(?:devices?|count)[:\s]+(\d+)/i);
118
+ if (bondedMatch)
119
+ info.bondedDevices = bondedMatch[1];
120
+ // Profiles
121
+ const profiles = [];
122
+ if (raw.includes("A2dpService") || raw.includes("BluetoothA2dp"))
123
+ profiles.push("A2DP");
124
+ if (raw.includes("HeadsetService") || raw.includes("BluetoothHeadset"))
125
+ profiles.push("HFP");
126
+ if (raw.includes("HidHostService") || raw.includes("BluetoothHidHost"))
127
+ profiles.push("HID");
128
+ if (raw.includes("PanService") || raw.includes("BluetoothPan"))
129
+ profiles.push("PAN");
130
+ if (raw.includes("MapService") || raw.includes("BluetoothMap"))
131
+ profiles.push("MAP");
132
+ if (raw.includes("LeAudioService"))
133
+ profiles.push("LE Audio");
134
+ if (profiles.length > 0)
135
+ info.activeProfiles = profiles.join(", ");
136
+ return info;
137
+ }
138
+ /**
139
+ * Parse NFC information from dumpsys nfc output.
140
+ * Extracts controller type, firmware version, supported technologies, and SE info.
141
+ */
142
+ function parseNfcDumpsys(raw) {
143
+ const info = {};
144
+ // NFC controller / chip identification
145
+ const controllerMatch = raw.match(/(?:NFC\s*(?:Controller|Chip|Hardware)|mNfcChip)[:\s]+([^\n,]+)/i)
146
+ || raw.match(/((?:NXP|Broadcom|Samsung|ST|NQ)\s*\w+)/i);
147
+ if (controllerMatch)
148
+ info.controller = controllerMatch[1].trim();
149
+ // Firmware version
150
+ const fwMatch = raw.match(/(?:FW|Firmware)\s*(?:version|Version|Ver)[:\s]+([^\n,]+)/i)
151
+ || raw.match(/NCI\s*version[:\s]+([^\n,]+)/i);
152
+ if (fwMatch)
153
+ info.firmwareVersion = fwMatch[1].trim();
154
+ // NFC state
155
+ const stateMatch = raw.match(/mState[=:\s]+(STATE_\w+|\d+)/i)
156
+ || raw.match(/(?:NFC\s*state|isEnabled)[:\s=]+(ON|OFF|true|false|enabled|disabled)/i);
157
+ if (stateMatch) {
158
+ const val = stateMatch[1];
159
+ if (val.includes("ON") || val.includes("true") || val.includes("enabled") || val === "STATE_ON" || val === "3") {
160
+ info.state = "enabled";
161
+ }
162
+ else {
163
+ info.state = "disabled";
164
+ }
165
+ }
166
+ // Supported technologies
167
+ const techs = [];
168
+ if (raw.includes("NFC-A") || raw.includes("NfcA") || raw.includes("IsoDep"))
169
+ techs.push("NFC-A (ISO 14443-3A)");
170
+ if (raw.includes("NFC-B") || raw.includes("NfcB"))
171
+ techs.push("NFC-B (ISO 14443-3B)");
172
+ if (raw.includes("NFC-F") || raw.includes("NfcF"))
173
+ techs.push("NFC-F (FeliCa)");
174
+ if (raw.includes("NFC-V") || raw.includes("NfcV"))
175
+ techs.push("NFC-V (ISO 15693)");
176
+ if (raw.includes("MIFARE"))
177
+ techs.push("MIFARE");
178
+ if (techs.length > 0)
179
+ info.supportedTechnologies = techs.join(", ");
180
+ // Secure Element
181
+ if (raw.includes("eSE") || raw.includes("Embedded SE"))
182
+ info.secureElement = "eSE (embedded)";
183
+ else if (raw.includes("UICC") || raw.includes("SIM-based SE"))
184
+ info.secureElement = "UICC (SIM-based)";
185
+ if (raw.includes("HCE") || raw.includes("HostEmulation")) {
186
+ info.hce = "supported";
187
+ }
188
+ // Reader mode / tag dispatch
189
+ if (raw.includes("mReaderModeEnabled=true"))
190
+ info.readerMode = "enabled";
191
+ if (raw.includes("mNdefPushEnabled=true") || raw.includes("Android Beam"))
192
+ info.beam = "available";
193
+ return info;
194
+ }
195
+ /**
196
+ * Android GNSS constellation ID to name mapping.
197
+ * From android.location.GnssStatus constants.
198
+ */
199
+ const GNSS_CONSTELLATIONS = {
200
+ 1: "GPS",
201
+ 2: "SBAS",
202
+ 3: "GLONASS",
203
+ 4: "QZSS",
204
+ 5: "BeiDou",
205
+ 6: "Galileo",
206
+ 7: "IRNSS/NavIC",
207
+ };
208
+ /**
209
+ * Parse GNSS information from dumpsys location output.
210
+ * Extracts hardware model, firmware, capabilities, constellations, and signal types.
211
+ */
212
+ function parseGnssDumpsys(raw) {
213
+ const info = {};
214
+ // Hardware model name — contains chipset manufacturer, model, and firmware
215
+ const hwModelMatch = raw.match(/GNSS Hardware Model Name:\s*(.+)/i);
216
+ if (hwModelMatch) {
217
+ const parts = hwModelMatch[1].trim();
218
+ info.hardwareModel = parts;
219
+ // Parse manufacturer and model from common format: "Broadcom, BCM4776, GLL ver. X.Y.Z"
220
+ const commaSegs = parts.split(",").map(s => s.trim());
221
+ if (commaSegs.length >= 2) {
222
+ info.manufacturer = commaSegs[0];
223
+ info.chipModel = commaSegs[1];
224
+ if (commaSegs.length >= 3)
225
+ info.firmwareVersion = commaSegs.slice(2).join(", ");
226
+ }
227
+ }
228
+ // Hardware version
229
+ const hwVerMatch = raw.match(/Hardware Version:\s*(\S+)/i);
230
+ if (hwVerMatch)
231
+ info.hardwareVersion = hwVerMatch[1].trim();
232
+ // Capabilities — extract from the Capabilities: [...] block
233
+ const capMatch = raw.match(/Capabilities:\s*\[([^\]]+)\]/);
234
+ if (capMatch) {
235
+ const capStr = capMatch[1];
236
+ // Extract named capabilities (before signalTypes)
237
+ const sigIdx = capStr.indexOf("signalTypes");
238
+ const capsRaw = sigIdx > 0 ? capStr.substring(0, sigIdx) : capStr;
239
+ const caps = capsRaw.split(/\s+/).filter(c => c.length > 0 && !c.startsWith("signal"));
240
+ if (caps.length > 0)
241
+ info.capabilities = caps;
242
+ // A-GPS detection from capabilities
243
+ const agpsModes = [];
244
+ if (caps.includes("MSB"))
245
+ agpsModes.push("MSB (Mobile Station Based)");
246
+ if (caps.includes("MSA"))
247
+ agpsModes.push("MSA (Mobile Station Assisted)");
248
+ if (agpsModes.length > 0)
249
+ info.agpsModes = agpsModes.join(", ");
250
+ // Key capabilities for security research
251
+ if (caps.includes("MEASUREMENTS"))
252
+ info.rawMeasurements = "supported (pseudorange-level access)";
253
+ if (caps.includes("NAVIGATION_MESSAGES"))
254
+ info.navMessages = "supported";
255
+ if (caps.includes("SATELLITE_PVT"))
256
+ info.satellitePvt = "supported";
257
+ if (caps.includes("MEASUREMENT_CORRECTIONS"))
258
+ info.measurementCorrections = "supported";
259
+ if (caps.includes("ACCUMULATED_DELTA_RANGE"))
260
+ info.carrierPhase = "supported (accumulated delta range)";
261
+ // Extract constellations and signal types
262
+ const sigTypesMatch = capStr.match(/signalTypes=\[(.+)\]/);
263
+ if (sigTypesMatch) {
264
+ const constellationIds = new Set();
265
+ const freqs = new Set();
266
+ const sigTypeRegex = /Constellation=(\d+),\s*CarrierFrequencyHz=([^,\]]+),\s*CodeType=(\w+)/g;
267
+ let sigMatch;
268
+ while ((sigMatch = sigTypeRegex.exec(sigTypesMatch[1])) !== null) {
269
+ const cId = parseInt(sigMatch[1], 10);
270
+ const freqHz = parseFloat(sigMatch[2]);
271
+ constellationIds.add(cId);
272
+ const freqMhz = (freqHz / 1e6).toFixed(2);
273
+ const cName = GNSS_CONSTELLATIONS[cId] ?? `Unknown(${cId})`;
274
+ freqs.add(`${cName} ${sigMatch[3]} @ ${freqMhz} MHz`);
275
+ }
276
+ const constellations = [...constellationIds]
277
+ .sort()
278
+ .map(id => GNSS_CONSTELLATIONS[id] ?? `Unknown(${id})`);
279
+ if (constellations.length > 0)
280
+ info.constellations = constellations;
281
+ // Detect dual-frequency (L1+L5) support
282
+ const hasL1 = capStr.includes("1.57542E9");
283
+ const hasL5 = capStr.includes("1.17645E9");
284
+ if (hasL1 && hasL5)
285
+ info.dualFrequency = "L1 + L5";
286
+ if (freqs.size > 0)
287
+ info.signalTypes = [...freqs];
288
+ }
289
+ }
290
+ return info;
291
+ }
292
+ export function registerWirelessFirmwareTools(ctx) {
293
+ ctx.server.tool("adb_wifi_firmware", "WiFi chipset and firmware identification. Reports WiFi driver version, firmware version, chipset/hardware info, supported bands and standards, interface details, and connection state. MAC address is opt-in only (permanent hardware identifier).", {
294
+ device: z.string().optional().describe("Device serial"),
295
+ includeMac: z.boolean().optional().default(false)
296
+ .describe("Include WiFi MAC address (permanent hardware identifier — opt-in only)"),
297
+ }, async ({ device, includeMac }) => {
298
+ try {
299
+ const resolved = await ctx.deviceManager.resolveDevice(device);
300
+ const serial = resolved.serial;
301
+ const props = await ctx.deviceManager.getDeviceProps(serial);
302
+ const sections = [];
303
+ sections.push("=== WiFi Firmware Information ===");
304
+ sections.push(`Device: ${props["ro.product.model"] ?? "unknown"} (${serial})`);
305
+ // ── Properties ──
306
+ const wifiProps = [
307
+ ["WiFi hardware", props["ro.hardware.wifi"] ?? ""],
308
+ ["WiFi interface", props["wifi.interface"] ?? ""],
309
+ ["Concurrent interface", props["wifi.concurrent.interface"] ?? ""],
310
+ ["Driver version", props["wlan.driver.version"] ?? ""],
311
+ ["Firmware version", props["vendor.wifi.firmware.version"] ?? props["wifi.firmware.version"] ?? ""],
312
+ ["WiFi HAL", props["ro.hardware.wifi_hal"] ?? ""],
313
+ ["WiFi country code", props["wifi.lbs.lac"] ?? ""],
314
+ ];
315
+ sections.push("\n── System Properties ──");
316
+ for (const [label, value] of wifiProps) {
317
+ if (value)
318
+ sections.push(`${label}: ${value}`);
319
+ }
320
+ if (includeMac) {
321
+ const mac = props["wifi.interface.mac"] ?? "";
322
+ if (mac)
323
+ sections.push(`MAC address: ${mac}`);
324
+ }
325
+ // ── dumpsys wifi ──
326
+ try {
327
+ const wifiDump = await ctx.bridge.shell("dumpsys wifi 2>/dev/null | head -200", { device: serial, timeout: 10000, ignoreExitCode: true });
328
+ const parsed = parseWifiDumpsys(wifiDump.stdout);
329
+ if (Object.keys(parsed).length > 0) {
330
+ sections.push("\n── WiFi Detailed Info (from dumpsys) ──");
331
+ for (const [key, value] of Object.entries(parsed)) {
332
+ sections.push(`${key}: ${value}`);
333
+ }
334
+ }
335
+ // Connection state
336
+ const connMatch = wifiDump.stdout.match(/mWifiInfo\s+([^\n]+)/);
337
+ if (connMatch) {
338
+ sections.push(`\n── Current Connection ──`);
339
+ const ssidMatch = connMatch[1].match(/SSID:\s*([^,]+)/);
340
+ const rssiMatch = connMatch[1].match(/RSSI:\s*(-?\d+)/);
341
+ const linkMatch = connMatch[1].match(/Link speed:\s*(\d+)\s*Mbps/i);
342
+ const freqMatch = connMatch[1].match(/Frequency:\s*(\d+)/);
343
+ if (ssidMatch)
344
+ sections.push(`SSID: ${ssidMatch[1].trim()}`);
345
+ if (rssiMatch)
346
+ sections.push(`RSSI: ${rssiMatch[1]} dBm`);
347
+ if (linkMatch)
348
+ sections.push(`Link speed: ${linkMatch[1]} Mbps`);
349
+ if (freqMatch) {
350
+ const freq = parseInt(freqMatch[1], 10);
351
+ const band = freq >= 5925 ? "6 GHz" : freq >= 5000 ? "5 GHz" : "2.4 GHz";
352
+ sections.push(`Frequency: ${freq} MHz (${band})`);
353
+ }
354
+ }
355
+ }
356
+ catch { /* dumpsys may not be available */ }
357
+ return { content: [{ type: "text", text: sections.join("\n") }] };
358
+ }
359
+ catch (error) {
360
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
361
+ }
362
+ });
363
+ ctx.server.tool("adb_bluetooth_firmware", "Bluetooth firmware and chipset identification. Reports firmware version, BT version (4.x/5.x), chipset model, adapter state, supported profiles, LE capabilities, and bonded device count. MAC address and device name are opt-in only (permanent identifiers).", {
364
+ device: z.string().optional().describe("Device serial"),
365
+ includeIdentifiers: z.boolean().optional().default(false)
366
+ .describe("Include Bluetooth MAC address and device name (permanent identifiers — opt-in only)"),
367
+ }, async ({ device, includeIdentifiers }) => {
368
+ try {
369
+ const resolved = await ctx.deviceManager.resolveDevice(device);
370
+ const serial = resolved.serial;
371
+ const props = await ctx.deviceManager.getDeviceProps(serial);
372
+ const sections = [];
373
+ sections.push("=== Bluetooth Firmware Information ===");
374
+ sections.push(`Device: ${props["ro.product.model"] ?? "unknown"} (${serial})`);
375
+ // ── Properties ──
376
+ const btProps = [
377
+ ["BT hardware", props["ro.hardware.bt"] ?? ""],
378
+ ["Firmware version", props["vendor.bluetooth.firmware.version"] ?? props["bluetooth.firmware.version"] ?? ""],
379
+ ["HCI firmware revision", props["bluetooth.hci.firmware_revision"] ?? ""],
380
+ ["BT enabled", props["bluetooth.enable_timeout_ms"] ? "yes" : ""],
381
+ ];
382
+ sections.push("\n── System Properties ──");
383
+ for (const [label, value] of btProps) {
384
+ if (value)
385
+ sections.push(`${label}: ${value}`);
386
+ }
387
+ if (includeIdentifiers) {
388
+ const btName = props["persist.bluetooth.bluetooth_name"] ?? props["net.bt.name"] ?? "";
389
+ const btAddr = props["persist.bluetooth.bluetoothaddr"] ?? "";
390
+ if (btName)
391
+ sections.push(`Device name: ${btName}`);
392
+ if (btAddr)
393
+ sections.push(`MAC address: ${btAddr}`);
394
+ }
395
+ // ── dumpsys bluetooth_manager ──
396
+ try {
397
+ const btDump = await ctx.bridge.shell("dumpsys bluetooth_manager 2>/dev/null | head -300", { device: serial, timeout: 10000, ignoreExitCode: true });
398
+ const parsed = parseBluetoothDumpsys(btDump.stdout);
399
+ if (Object.keys(parsed).length > 0) {
400
+ sections.push("\n── Bluetooth Detailed Info (from dumpsys) ──");
401
+ for (const [key, value] of Object.entries(parsed)) {
402
+ sections.push(`${key}: ${value}`);
403
+ }
404
+ }
405
+ }
406
+ catch { /* dumpsys may not be available */ }
407
+ return { content: [{ type: "text", text: sections.join("\n") }] };
408
+ }
409
+ catch (error) {
410
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
411
+ }
412
+ });
413
+ ctx.server.tool("adb_nfc_firmware", "NFC controller firmware identification. Reports controller type (NXP/Broadcom/Samsung/ST), firmware version, NCI version, supported technologies (NFC-A/B/F/V), secure element availability (eSE/UICC), and HCE (Host Card Emulation) support.", {
414
+ device: z.string().optional().describe("Device serial"),
415
+ }, async ({ device }) => {
416
+ try {
417
+ const resolved = await ctx.deviceManager.resolveDevice(device);
418
+ const serial = resolved.serial;
419
+ const props = await ctx.deviceManager.getDeviceProps(serial);
420
+ const sections = [];
421
+ sections.push("=== NFC Firmware Information ===");
422
+ sections.push(`Device: ${props["ro.product.model"] ?? "unknown"} (${serial})`);
423
+ // ── Properties ──
424
+ const nfcProps = [
425
+ ["NFC hardware", props["ro.hardware.nfc"] ?? props["ro.hardware.nfc_nci"] ?? ""],
426
+ ["NFC port", props["ro.nfc.port"] ?? ""],
427
+ ["NFC SE ID", props["persist.nfc.se_id"] ?? ""],
428
+ ["NFC features", props["ro.hardware.nfc_ese"] ? "eSE present" : ""],
429
+ ];
430
+ sections.push("\n── System Properties ──");
431
+ let hasNfcProps = false;
432
+ for (const [label, value] of nfcProps) {
433
+ if (value) {
434
+ sections.push(`${label}: ${value}`);
435
+ hasNfcProps = true;
436
+ }
437
+ }
438
+ if (!hasNfcProps) {
439
+ sections.push("No NFC hardware properties found — device may not have NFC");
440
+ }
441
+ // ── dumpsys nfc ──
442
+ try {
443
+ const nfcDump = await ctx.bridge.shell("dumpsys nfc 2>/dev/null | head -200", { device: serial, timeout: 10000, ignoreExitCode: true });
444
+ if (nfcDump.stdout.includes("NfcService") || nfcDump.stdout.includes("mState")
445
+ || nfcDump.stdout.includes("NFC")) {
446
+ const parsed = parseNfcDumpsys(nfcDump.stdout);
447
+ if (Object.keys(parsed).length > 0) {
448
+ sections.push("\n── NFC Detailed Info (from dumpsys) ──");
449
+ for (const [key, value] of Object.entries(parsed)) {
450
+ sections.push(`${key}: ${value}`);
451
+ }
452
+ }
453
+ }
454
+ else {
455
+ sections.push("\n── NFC Service ──");
456
+ sections.push("NFC service not responding — NFC may be disabled or unavailable");
457
+ }
458
+ }
459
+ catch { /* dumpsys may not be available */ }
460
+ return { content: [{ type: "text", text: sections.join("\n") }] };
461
+ }
462
+ catch (error) {
463
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
464
+ }
465
+ });
466
+ ctx.server.tool("adb_gps_firmware", "GNSS/GPS chipset and firmware identification. Reports GNSS hardware model (manufacturer, chip, firmware version), supported constellations (GPS, GLONASS, Galileo, BeiDou, QZSS, NavIC, SBAS), signal types with frequencies, dual-frequency (L1+L5) support, raw measurement capabilities (pseudorange access for spoofing detection), A-GPS modes (MSB/MSA — cellular-routed assisted GPS relevant to IMSI catcher research), carrier phase measurements, navigation message decoding, and SUPL server configuration.", {
467
+ device: z.string().optional().describe("Device serial"),
468
+ }, async ({ device }) => {
469
+ try {
470
+ const resolved = await ctx.deviceManager.resolveDevice(device);
471
+ const serial = resolved.serial;
472
+ const props = await ctx.deviceManager.getDeviceProps(serial);
473
+ const sections = [];
474
+ sections.push("=== GNSS/GPS Firmware Information ===");
475
+ sections.push(`Device: ${props["ro.product.model"] ?? "unknown"} (${serial})`);
476
+ // ── Properties ──
477
+ const gpsHw = props["ro.hardware.gps"] ?? "";
478
+ if (gpsHw)
479
+ sections.push(`GPS hardware: ${gpsHw}`);
480
+ // ── dumpsys location (GNSS Manager section) ──
481
+ try {
482
+ const locDump = await ctx.bridge.shell("dumpsys location", { device: serial, timeout: 15000, ignoreExitCode: true });
483
+ const parsed = parseGnssDumpsys(locDump.stdout);
484
+ if (parsed.hardwareModel) {
485
+ sections.push(`\n── GNSS Hardware ──`);
486
+ sections.push(`Model: ${parsed.hardwareModel}`);
487
+ if (parsed.manufacturer)
488
+ sections.push(`Manufacturer: ${parsed.manufacturer}`);
489
+ if (parsed.chipModel)
490
+ sections.push(`Chipset: ${parsed.chipModel}`);
491
+ if (parsed.firmwareVersion)
492
+ sections.push(`Firmware: ${parsed.firmwareVersion}`);
493
+ if (parsed.hardwareVersion)
494
+ sections.push(`Hardware version: ${parsed.hardwareVersion}`);
495
+ }
496
+ if (parsed.constellations && Array.isArray(parsed.constellations)) {
497
+ sections.push(`\n── Supported Constellations (${parsed.constellations.length}) ──`);
498
+ sections.push(parsed.constellations.join(", "));
499
+ if (parsed.dualFrequency)
500
+ sections.push(`Dual-frequency: ${parsed.dualFrequency}`);
501
+ }
502
+ if (parsed.signalTypes && Array.isArray(parsed.signalTypes)) {
503
+ sections.push(`\n── Signal Types (${parsed.signalTypes.length}) ──`);
504
+ for (const sig of parsed.signalTypes) {
505
+ sections.push(` ${sig}`);
506
+ }
507
+ }
508
+ // Capabilities relevant to security research
509
+ const secCaps = [];
510
+ if (parsed.rawMeasurements)
511
+ secCaps.push(`Raw GNSS measurements: ${parsed.rawMeasurements}`);
512
+ if (parsed.navMessages)
513
+ secCaps.push(`Navigation messages: ${parsed.navMessages}`);
514
+ if (parsed.satellitePvt)
515
+ secCaps.push(`Satellite PVT: ${parsed.satellitePvt}`);
516
+ if (parsed.measurementCorrections)
517
+ secCaps.push(`Measurement corrections: ${parsed.measurementCorrections}`);
518
+ if (parsed.carrierPhase)
519
+ secCaps.push(`Carrier phase: ${parsed.carrierPhase}`);
520
+ if (secCaps.length > 0) {
521
+ sections.push(`\n── Research Capabilities ──`);
522
+ for (const cap of secCaps)
523
+ sections.push(cap);
524
+ }
525
+ // A-GPS / SUPL configuration
526
+ sections.push(`\n── A-GPS / Assisted GNSS ──`);
527
+ if (parsed.agpsModes) {
528
+ sections.push(`A-GPS modes: ${parsed.agpsModes}`);
529
+ }
530
+ // Check SUPL settings
531
+ try {
532
+ const agpsEnabled = await ctx.bridge.shell("settings get global assisted_gps_enabled", { device: serial, timeout: 5000, ignoreExitCode: true });
533
+ const enabled = agpsEnabled.stdout.trim();
534
+ sections.push(`A-GPS enabled: ${enabled === "1" ? "yes" : enabled === "0" ? "no" : enabled}`);
535
+ const suplHost = await ctx.bridge.shell("settings get global assisted_gps_supl_host", { device: serial, timeout: 5000, ignoreExitCode: true });
536
+ const host = suplHost.stdout.trim();
537
+ if (host && host !== "null") {
538
+ sections.push(`SUPL server: ${host}`);
539
+ const suplPort = await ctx.bridge.shell("settings get global assisted_gps_supl_port", { device: serial, timeout: 5000, ignoreExitCode: true });
540
+ const port = suplPort.stdout.trim();
541
+ if (port && port !== "null")
542
+ sections.push(`SUPL port: ${port}`);
543
+ sections.push(`⚠ SUPL traffic is routed through the cellular network — susceptible to interception by IMSI catchers`);
544
+ }
545
+ else {
546
+ sections.push(`SUPL server: not configured`);
547
+ }
548
+ }
549
+ catch { /* settings query failed */ }
550
+ // All capabilities dump
551
+ if (parsed.capabilities && Array.isArray(parsed.capabilities) && parsed.capabilities.length > 0) {
552
+ sections.push(`\n── All Capabilities (${parsed.capabilities.length}) ──`);
553
+ sections.push(parsed.capabilities.join(", "));
554
+ }
555
+ }
556
+ catch {
557
+ sections.push("\nGNSS data not available — location service may not be running");
558
+ }
559
+ return { content: [{ type: "text", text: sections.join("\n") }] };
560
+ }
561
+ catch (error) {
562
+ return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
563
+ }
564
+ });
565
+ }
566
+ //# sourceMappingURL=wireless-firmware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wireless-firmware.js","sourceRoot":"","sources":["../../src/tools/wireless-firmware.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "deepadb",
3
- "version": "1.0.6",
4
- "description": "DeepADB — the deepest Android Debug Bridge MCP server. 147 tools across 41 modules for device inspection from UI to baseband.",
3
+ "version": "1.0.8",
4
+ "description": "DeepADB — the deepest Android Debug Bridge MCP server. 174 tools across 43 modules for device inspection from UI to baseband.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "deepadb": "build/index.js"
@@ -32,7 +32,7 @@
32
32
  "zod": "^3.25.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@types/node": "^25.5.0",
35
+ "@types/node": "^25.6.0",
36
36
  "typescript": "^6.0.2"
37
37
  }
38
38
  }