M5Stack ESP32 장치의 하이테크 장난용 펌웨어
@unagironin의 로고
올해 초 발표된 바와 같이 M5Stick-NEMO는 보관되었으며 더 이상 적극적으로 개발되지 않습니다. 이 프로젝트는 내 개인적인 목표를 모두 초과했으며, 커뮤니티가 함께 모여 프로젝트에 대해 흥미를 갖고 기여하고 영감을 얻는 모습은 정말 놀라웠습니다.
내가 아는 한, 이 프로젝트는 SD 카드, 무선 모뎀, 대형 LED, RFID 모듈 또는 기타 장치와 같은 외부 하드웨어를 추가하지 않고도 이러한 종류의 속임수와 장난을 위해 M5Stick 제품군이 할 수 있는 한계에 도달했습니다. 배터리 수명은 이러한 외부 주변 장치를 구동하는 데에도 최적이 아닙니다. 많은 기능 요청이 이러한 외부 장치에 대한 지원을 중심으로 이루어지며 이를 추가할 리소스나 시간이 없지만 좋은 소식은 다른 사람들이 솔직히 더 나은 기능으로 이러한 정신을 이어가고 있다는 것입니다. 많은 가능성을 지닌 프로젝트 중 하나가 CatHack입니다.
오랜만입니다. 모든 물고기에게 감사드립니다!
NEMO는 Arduino IDE를 사용한 ESP32 개발에 대해 더 자세히 배울 수 있도록 개인 프로젝트를 시작했습니다. 나는 기술 커뮤니티에서 많은 관심을 받고 있는 몇 가지 일반적이고 유행하는 장난을 나 자신에 대한 도전으로 재현하고 이러한 공격을 더 잘 이해하기로 결정했습니다.
NEMO라는 이름은 니모를 찾아서에 나오는 작고 영리하며 완고한 물고기의 이름을 따서 명명되었습니다. 이 프로젝트는 특정 바다에 사는 생물과 관련된 또 다른 첨단 장치와 대조됩니다. 저는 작은 개발 키트와 약간의 호기심으로 할 수 있는 일이 많다는 것을 증명하고 싶었습니다. 나는 이 프로젝트를 통해 유사한 장치의 기능을 대체할 수 있다는 망상을 갖고 있지 않습니다. 그것은 단지 재미를 위한 것이고 나만의 교육을 위한 것입니다.
DEAUTH 함수로 컴파일하도록 .github/workflow/compile.yml을 조정했습니다.
StickC Plus 및 Plus2의 SONG에 대한 지원이 추가되었습니다.
액세스 포인트의 세부 정보를 볼 때 "공격 메뉴"를 추가했습니다.
Clone Portal(대상과 동일한 SSID를 사용하여 Evil Portal 생성)
인증 해제 공격(이 액세스 포인트에 연결된 장치에 인증 해제 프레임을 브로드캐스트)
Deauth+Clone(동일한 SSID로 사악한 포털을 생성하고 해당 AP에 인증 해제 프레임을 보냅니다)
M5StickC 장치를 사용할 때 SDCard 마운트/마운트 해제 설정에 옵션이 추가되었습니다.
CARDPUTER를 사용하지 않는 경우 SPI/SD를 처리하기 위한 새 파일 생성
SDCARD는 현재 M5StickC Plus2에서 작업 중입니다.
아이디어?
많은 적외선 제어 TV, 프로젝터 및 기타 장치를 차단하는 TV B-Gone 포트(MrArm의 HAKRWATCH 덕분에)
AppleJuice iOS Bluetooth 장치 페어링 스팸
SwiftPair(Windows) 및 Android에 대한 Bluetooth 장치 알림 스팸
WiFi 스팸 - 재미있는 SSID, WiFi Rickrolling 및 분당 수백 개의 무작위 이름 SSID를 생성하는 무작위 모드
WiFi NEMO 포털 - 소셜 엔지니어 이메일 자격 증명을 시도하는 캡티브 포털 - 사용자 이름과 비밀번호를 SD 카드에 저장합니다(지원되는 리더기에 삽입된 경우)
WiFi SSID 스캐너 - 근처에 2.4GHz SSID를 표시하고 이에 대한 정보를 얻고 NEMO 포털에서 SSID를 복제할 수도 있습니다.
M5 스틱 RTC가 지원되는 사용자 조정 가능한 24시간 디지털 시계로 깊은 절전 모드 및 배터리 부족 모드에서도 상대적으로 안정적인 시간을 유지합니다.
회전, 밝기, 자동 밝기 조절 및 NEMO Portal SSID를 위한 EEPROM 지원 설정
설정 메뉴의 배터리 잔량 및 크레딧
세 가지 주요 컨트롤이 있습니다.
홈 - 현재 프로세스를 중지하고 NEMO의 거의 모든 곳에서 메뉴로 돌아갑니다.
다음 - 커서를 다음 메뉴 옵션으로 이동합니다. 기능 모드에서는 일반적으로 프로세스가 중지되고 이전 메뉴로 돌아갑니다.
선택 - 현재 선택된 메뉴 옵션을 활성화하고 기능 모드에서 어두워진 화면을 활성화합니다.
StickC와 StickC-Plus
전원: 전원 버튼을 6초 동안 길게 누르면 장치가 꺼집니다.
홈: 전원 버튼을 탭합니다(USB 포트에 가장 가까운 위치).
다음: 측면 버튼을 탭하세요
선택: 장치 전면에 있는 M5 버튼을 탭합니다.
카드퓨터
Home: Esc/~/` 키 또는 왼쪽 화살표/, 키를 탭합니다.
다음/이전: 아래쪽 화살표/를 탭합니다. 키 및 위쪽 화살표/; 탐색용 키
선택: 확인/Enter 키 또는 오른쪽 화살표/?를 탭합니다. 열쇠
NEMO 포털 모드에서 NEMO는 DNS, DHCP 및 웹 서버가 활성화된 "Nemo Free WiFi"(portal.h에서 구성 가능)라는 개방형 WiFi 핫스팟을 활성화합니다.
NEMO 포털은 로그인하면 인터넷 액세스를 제공한다고 주장하는 가짜 로그인 페이지를 제공합니다.
이는 사회 공학 공격으로, 페이지에 입력된 사용자 이름과 비밀번호를 기록합니다.
Wi-Fi 검색 세부정보의 검색 목록에서 기존 SSID를 복제할 수 있습니다. NEMO 포털을 종료하면 Evil Twin SSID가 지워집니다.
자신의 장치에서 포털에 연결하고 http://172.0.0.1/creds로 이동하여 캡처된 자격 증명을 볼 수 있습니다.
자신의 장치에서 포털에 연결하고 http://172.0.0.1/ssid로 이동하여 사용자 지정 SSID를 설정할 수 있습니다.
장치가 설정을 위해 EEPROM을 지원하는 경우 입력한 사용자 정의 SSID는 전원이 꺼진 경우에도 기본값으로 저장됩니다.
장치에 FAT 파일 시스템 형식의 카드가 삽입된 SD 카드 리더가 있는 경우 나중에 확인할 수 있도록 사용자 이름과 비밀번호가 SD 카드의 nemo-portal-creds.txt에 기록됩니다.
SD 카드 지원은 M5Stack Cardputer 플랫폼에서만 기본적으로 활성화됩니다. M5Stick 장치에서 활성화할 수 있지만 SD 카드 리더를 내장하고 전면 패널 핀 헤더에 부착해야 합니다.
NEMO 포털은 유효한 작업 범위, 교육 또는 시연 목적으로 전문적인 업무에만 사용할 수 있습니다. 동의 없이 개인정보를 저장, 판매, 사용하는 것은 위법입니다. ?
이것이 NEMO를 얻는 가장 쉬운 방법입니다.
M5Stick C Plus Quick Start에는 Linux, MacOS 및 Windows용 M5Burner 앱에 대한 링크가 있습니다. 이것은 UIFlow 및 기타 공식 펌웨어를 설치하는 공식 도구입니다. 나는 거기에서 NEMO에 대한 최신 바이너리를 제공합니다.
M5Burner 실행
왼쪽 메뉴에서 "StickC"(또는 Cardputer의 경우 StampS3)를 선택합니다.
앱 상단의 검색을 사용하여 "NEMO"를 찾으세요. 내 공식 빌드는 "4x0nn"에 의해 업로드되고 사진이 포함됩니다.
다운로드를 클릭하세요
굽기를 클릭하세요
Espressif 시작 가이드에 따라 ESP-IDF 도구를 설치합니다.
esp-idf CMD 도구를 엽니다(Windows에서). Mac 또는 Linux에서는 esp-idf.py 및 esptool.py가 시스템 경로에 있어야 합니다.
esptool.py --port COMPORT -b 115200 write_flash -z 0x0 M5Nemo-VERSION.bin
port는 COM 포트(예: Windows의 경우 COM4, COM11)일 수 있습니다. Mac 및 Linux에서는 일반적으로 /dev/ttyUSB0, /dev/ttyACM0 또는 /dev/cu.usbserial-3과 같은 /dev에 있습니다.
M5Nemo-VERSION.bin은 GitHub 릴리스에서 다운로드한 버전이어야 합니다. 가능한 최신 버전을 사용하는 것이 좋습니다.
NEMO를 사용자 정의하거나 프로젝트에 기여하려면 소스에서 NEMO를 구축하는 방법에 익숙해야 합니다.
아두이노 IDE를 설치하세요. 저는 Linux와 Windows에서는 Arduino 1.8을, Windows에서는 Arduino 2.2를 성공적으로 사용했습니다.
Arduino IDE용 M5Stack 보드 설치: 파일 -> 기본 설정에서 이 URL을 "보드 관리자 URL" 텍스트 상자에 붙여넣습니다. 이미 URL이 있는 경우 URL 사이에 쉼표를 사용하세요. https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
M5Stack -> M5Stick-C-Plus가 도구 -> 보드에 표시되지 않으면 도구 -> 보드 -> 보드 관리자를 사용하여 M5Stack을 검색하세요. 이렇게 하면 Stick C Plus를 포함한 대부분의 M5Stack 보드에 대한 지원이 설치됩니다.
보드 메뉴에서 올바른 장치 모델(예: M5Stick-C, M5Stick-C-Plus 또는 M5Cardputer)이 선택되었는지 확인하십시오.
필요한 라이브러리를 설치합니다. Sketch -> 라이브러리 포함 -> 라이브러리 관리자에서 다음 라이브러리와 필요한 종속성을 검색하여 설치합니다.
M5StickCPlus, M5StickC 또는 M5Cardputer
IRRemoteESP8266
플랫폼(STICK_C, STICK_C_PLUS 또는 CARDPUTER) 상단 근처에 있는 적절한 #define
줄의 주석 처리를 제거하세요.
파티션 구성표를 전환하십시오. Tools
-> Partition Scheme
-> No OTA (Large APP)
- 때때로 이 옵션은 Huge APP
으로 표시됩니다.
구성
코드는 깔끔하게 컴파일되어야 하며 마스터 브랜치 또는 릴리스 태그의 M5Stick C Plus에서 바로 작동해야 합니다.
적절한 #define
옵션 하나만 주석 처리를 제거하세요. 그렇지 않으면 컴파일러 오류가 발생합니다.
어떤 이유로 화면이 레벨 0에서 매우 어두움에서 레벨 1에서 거의 완전히 밝아지고 추가 밝기 레벨이 아무 영향도 미치지 않는 경우 pct_brightness 변수를 false로 설정하십시오.
프로젝트 컴파일 및 업로드
아두이노 CLI 설치
Arduino 코어에 M5Stack 인덱스 추가
M5Stack 라이브러리 추가
# m5stack 보드 설치sarduino-cli core install m5stack:esp32 --additional-urls https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json --log-level warning --verbose# 설치 필수 라이브러리arduino-cli lib install M5Cardputer --log-level 경고 --verbose arduino-cli lib install IRRemoteESP8266 --log-level 경고 --verbose# 스케치arduino-cli 컴파일 compile --fqbn m5stack:esp32:m5stack_cardputer -e --build-property build.partitions=huge_app --build-property upload.maximum_size= 3145728 ./m5stick-nemo.ino
이렇게 하면 파티션 스케치를 기반으로 여러 바이너리가 생성됩니다. esptool
사용하여 단일 바이너리를 병합할 수 있습니다.
esptool 설치 - pip install -U esptool
esptool.py --chip esp32s3 merge_bin --output final.bin 0x0000 m5stick-nemo.ino.bootloader.bin 0x8000 m5stick-nemo.ino.partitions.bin 0x10000 m5stick-nemo.ino.bin
이제 esptool
사용하여 병합된 바이너리 펌웨어를 플래시할 수 있습니다.
esptool.exe write_flash -z 0 final.bin
도커 설치
./scripts/docker-build.sh
실행
./scripts/flash.sh --device=
실행
# 이렇게 하면 구성된 플랫폼을 기반으로 필요한 모든 라이브러리에 대한 이미지가 빌드되고 바이너리가 컴파일, 출력 및 병합됩니다.# 기본적으로 이는 en-us 로케일인 ./config/.env.M5Cardputer./에서 M5Cardputer용으로 컴파일됩니다. 스크립트/docker-build.sh # 다른 빌드 구성을 선택하려면 이를 매개변수로 전달할 수 있습니다. 다양한 구성은 ./configs/를 참조하세요./scripts/docker-build.sh ./config/.env.M5Cardputer# 바이너리 파일은 ./buildls ./build#로 출력됩니다. 그러면 빌드 단계의 빌드 출력이 플래시됩니다. 이전 단계의 컨테이너 이미지를 재사용합니다.# 기본적으로 이는 en-us 로캘인 ./config/.env.M5Cardputer./scripts/flash.sh --device=/dev/ttyusb0에서 M5Cardputer용으로 컴파일됩니다. # 다른 빌드 구성을 전달한 경우 이를 플래시 스크립트에 전달해야 합니다./scipts/flash.sh --device=/dev/ttyusb0 --build-config=./config/.env.M5Cardputer
여러 기능이 디버깅 정보를 직렬 모니터에 출력합니다. Arduino IDE 또는 M5Burner의 직렬 모니터 기능을 사용하여 이 정보를 수집하십시오. 유용한 힌트가 있을 수 있습니다. 버그 보고서를 제출할 때 직렬 모니터 출력을 포함하는 것이 도움이 되는 경우가 많습니다.
EEPROM을 재설정합니다. EEPROM 설정을 지원하는 모델의 경우 설정 메뉴에서 "설정 지우기"를 사용하거나 전원을 켜는 동안 "다음" 버튼(StickC 모델의 측면 키, 카드퓨터의 Tab 또는 아래쪽 화살표)을 길게 누르세요.
TV-B-Gone의 IR LED는 스마트폰 카메라를 통해 관찰할 수 있으며, 연한 보라색 광선을 방출합니다. 계속 켜져 있는 것처럼 보이거나 TV-B-Gone 작동 중에 전혀 깜박이지 않으면 뭔가 잘못된 것입니다. 버그를 신고하세요. 블루투스 스팸 또는 무작위 Wi-Fi 스팸을 사용한 후 TVBG가 작동하지 않는 알려진 문제가 있습니다.
Wi-Fi 스팸이 작동하지 않는 것으로 의심되면 여러 장치에서 Wi-Fi 목록을 확인해 보세요. 때로는 Linux 네트워크 관리자가 스마트폰이 볼 수 없는 네트워크를 볼 수도 있습니다. Wi-Fi 스팸 문제를 신고하는 경우 이 테스트 결과를 포함해 주세요.
Apple은 2023년 여름부터 많은 Bluetooth 관련 패치를 적용했습니다. AppleJuice를 테스트하는 경우 일부 AppleTV 장치 유형을 사용해 보십시오. Apple이 해당 플랫폼에 대해 약한 Bluetooth 신호를 필터링하지 않기 때문에 더 안정적인 경향이 있기 때문입니다.
GitHub 문제를 통해 버그를 보고해 주세요. 소셜 미디어 게시물, M5Burner 항목 등에 대한 댓글보다 추적하기가 더 쉽습니다. 문제가 있는 경우 다음을 포함해 주세요.
펌웨어 버전
설치 방법(M5Burner, 직접 컴파일, esptool.py)
하드웨어
구체적으로 어떤 기능과 옵션이 작동하지 않는지
작동하지 않는다고 판단한 방법과 수행한 테스트. 해당하는 경우 테스트한 장치 모델 및 운영 체제와 직렬 모니터의 오류 또는 관련 출력을 포함합니다.
식별한 버그를 수정하는 방법을 알아냈다면 PR을 환영합니다!
기여를 환영합니다.
프로젝트에 대한 GitHub 문제를 살펴보세요. 거기에 보고된 기능 제안과 버그가 있으며, 이를 해결하는 PR에 감사드립니다.
Pull Request를 제출할 때 개발 브랜치를 대상으로 지정하세요. 이를 수행하는 가장 쉬운 방법은 모든 브랜치를 포크하거나 단순히 자신의 포크에 "개발" 브랜치를 생성한 다음 GitHub를 사용하여 개발 브랜치를 동기화하는 것입니다.
특정 하드웨어(예: LED 및 RTC)가 코드에서 어떻게 정의되고 제어되는지 기록하고 해당 패턴을 고수하도록 노력하십시오. 또한 내장 디스플레이에 출력할 때 FGCOLOR, BGCOLOR, TEXT_SIZE* 및 DISP 별칭에 대한 정의를 사용하세요.
끌어오기 요청의 일부로 기여자 배열에 github을 자유롭게 추가하세요.
도움을 받고 싶은 사항:
NEMO 포털 HTML뿐만 아니라 메뉴의 현지화/번역이 개선되었습니다.
아마도 새로운 .h 파일이 필요할 것입니다.
설정에서 구성할 수 있으며 eeprom 바이트를 사용하여 설정을 저장합니다.
많은 SRAM을 사용하는 대신 현지화 문자열이 플래시 스토리지에만 저장되고 플래시 스토리지에서 직접 참조되도록 구현 시 const
를 불필요하게 사용하세요.
적외선
RGB LED 스트립, 에어컨, 팬, 사운드 바 등을 켜고 끌 수 있는 추가 IR 코드로 가득 찬 TV-B-Gone의 새로운 "영역"
NEMO의 코드 베이스 내에서 플리퍼 제로 IR 코드를 변환하거나 사용하는 방법
AXP192 PMU가 없는 Cardputer 및 StickC-Plus2 모델에서 배터리 수준을 읽고 표시하는 방법을 찾아보세요. Cardputer 공장 데모의 배터리 코드는 시작하기에 좋은 곳일 수 있습니다.
대상 특정 액세스 포인트에 대해서만 인증 해제. 인증 스팸 PR은 거부됩니다.
내가 병합하지 않을 것 같은 것들:
대량 Wi-Fi 인증 해제 스팸
건강 및 피트니스 추적기, 스마트 시계 등을 잠재적으로 방해하는 블루투스 스팸입니다.