Hackujeme fotopascu Wachman Solar Pro

Fotopasce Wachman Solar Pro nie su žiadna špička. Je to obyčajná lacná fotopasca vyrábana masovo v číne a na temu sa predáva za 60 euro. Funguje to tak, že temu fotopasce predáva aj po 100 kusoch a dáva obrovské zľavy, tým pádom jedna takáto fotopasca výjde na 25-30 euro. Firmy ich nakúpia vo veľkom, osadia vlastný firmware a vlastný názov. Táto fotopasca sa predáva pod obrovským množstvom názvov:)

  • Ceyomur CY95
  • Voopeak T180 (alebo aj Voopeak TC02)
  • Campark T180
  • NewTech TC02 * Fuvision Y11 * Solareye WiFi Solar (častý generický brand na Amazone)
  • Vimel WIFI Outdoor Solar Powered Trail Camera

Kúpili ste si fotopascu Wachman Solar Pro alebo Campark T180 a zaujíma vás, čo sa skrýva vo vnútri? V tomto článku sa pozrieme pod kapotu — rozanalyzujeme firmware, odhalíme skutočný hardvér, WiFi/Bluetooth protokol a ukážeme, ako si naprogramovať vlastnú PC aplikáciu na sťahovanie fotiek.

Keď som získal firmware z Campark T180 (súbor FW96675A.bin, 6.3 MB) a otvoril ho v nástroji NTKFWinfo, prvé čo ma prekvapilo bolo, že vo firmware nie je ani slovo “Campark” ani “Wachman”. Namiesto toho som našiel interný model flag _MODEL_A119V3_ a build cestu D:/Project/NT96510/07_ecos/.

To prezrádza, že obe fotopasce pochádzajú od rovnakého čínskeho ODM výrobcu, ktorý jednu platformu predáva pod rôznymi značkami:

Čínsky ODM výrobca
  │
  ├── rovnaký hardvér
  ├── rovnaký firmware (FW96675A.bin)
  ├── rovnaká mobilná appka
  │
  ├──► "Campark T180"
  ├──► "Wachman Solar Pro"
  ├──► "DSOON"
  └──► desiatky ďalších značiek...

Líšia sa len logom na tele, krabicou a cenou — pričom Wachman býva spravidla drahší.

Čo je vo vnútri: Hardvér odhalený firmwarom

Analýzou stringov v binárnom firmware som identifikoval kompletný hardvérový stack:

KomponentDetail
ProcesorNovatek NT96675
Obrazový senzorSony IMX335M (5MP natívne, interpolované na 46MP)
WiFi modulRealtek RTL8189ES (SDIO, 2.4 GHz 802.11 b/g/n)
BluetoothIntegrovaný BLE 5.0
Operačný systémeCos RTOS (nie Linux!)
RAM128 MB DDR
Úložisko fotiekSD karta, súborový systém FAT32, štruktúra A:\DCIM\

Zaujímavé je, že fotopasca nebeží na Linuxe ako väčšina moderných IoT zariadení, ale na eCos — real-time operačnom systéme. To vysvetľuje rýchle zapnutie a nízku spotrebu energie.

Analýza firmware krok za krokom

Extrakcia partícií

Firmware som rozbalil pomocou nástroja NTKFWinfo:

python NTKFWinfo.py -i FW96675A.bin

Výstup ukázal 3 partície:

#TypVeľkosťObsah
1MODELEXT2.9 KBInfo o čipe, build dátum 20220520
2Komprimovaný (TTComp)6.0 MBHlavný UITRON/eCos firmware
3Data263 KBResources, boot config

Extrakcia:

python NTKFWinfo.py -i FW96675A.bin -x all -o fw_extracted

Hľadanie zaujímavých stringov

Keďže strings nie je na Windows štandardne dostupný, použil som Python:

import re

with open('FW96675A.bin-partitionID2', 'rb') as f:
    data = f.read()

strings = re.findall(rb'[\x20-\x7e]{5,}', data)

for s in strings:
    decoded = s.decode('ascii', errors='replace')
    if any(kw in decoded.lower() for kw in ['wifi', 'bluetooth', '192.168', 'ssid', 'password']):
        print(decoded)

A tu začalo byť naozaj zaujímavo.

WiFi: Ako fotopasca komunikuje

Fotopasca ako Access Point

Fotopasca sa nepripája k vašej domácej WiFi. Funguje to presne naopak — fotopasca si vytvorí vlastnú WiFi sieť a vy sa k nej pripojíte.

Vo firmware som našiel tieto sieťové konfigurácie natvrdo:

192.168.0.1 / 192.168.0.2
192.168.1.1 / 192.168.1.2
192.168.2.1 / 192.168.2.2
192.168.2.101

A taktiež:

12345678                    ← default WiFi heslo (natvrdo vo firmware!)
RTKAP_                      ← SSID prefix (Realtek Access Point)
defaultSSID                 ← fallback názov siete
SSID:%s, Passphrase:%s      ← formátovací string pre zobrazenie

DHCP server beží priamo na fotopasci a prideľuje IP adresu vášmu telefónu/počítaču.

WiFi príkazy nájdené vo firmware

WiFiCmd_OnExeModeChange      ← prepínanie módov fotopasce
WiFiCmd_OnExeSetPassphrase   ← zmena hesla WiFi
WiFiCmd_OnExeFormat          ← formátovanie SD karty
SetupExe_OnWifiStart         ← štart WiFi AP
SetupExe_OnWifiStop          ← zastavenie WiFi

HTTP API endpointy

Fotopasca používa Novatek SDK modul HFS (HTTP File Server). Na základe reverse engineeringu rovnakých Novatek fotopascí (DSOON, Campark) sú k dispozícii tieto HTTP endpointy:

EndpointFunkcia
GET /SetMode?StoragePrepnutie do režimu úložiska
GET /SetMode?SetupPrepnutie do režimu nastavení
GET /SetMode?PhotoCaptureŽivý náhľad
GET /Storage?GetDirFileInfoInformácie o priečinkoch
GET /Storage?GetFilePage={page}&type=PhotoZoznam fotiek (stránkovane)
GET /Storage?GetFileThumb={fid}Náhľad fotky
GET /Storage?Download={fid}Stiahnutie plného súboru
GET /Storage?Delete={fid}Zmazanie súboru
GET /Misc?PowerOffVypnutie WiFi

Video stream je dostupný na porte 8221.

Bluetooth: Prebudenie fotopasce

Fotopasca väčšinu času spí kvôli šetreniu batérie. WiFi sa zapne až po BLE príkaze:

BLE protokol

ParameterHodnota
Service UUID0000ff00-0000-1000-8000-00805f9b34fb
Characteristic UUID0000ff01-0000-1000-8000-00805f9b34fb
Príkaz na zapnutie WiFiBT_KEY_ON (hex: 42545f4b65795f4f6e)
Príkaz na vypnutieBT_KEY_OFF

Vo firmware som to potvrdil nálezom:

Set_bluetooth_cmd_poweron
Set_bluetooth_cmd_poweroff
BT_Event_Handel

Postup je jednoduchý:

  1. Cez BLE sa pripojíte k fotopasci
  2. Zapíšete BT_KEY_ON na charakteristiku 0xff01
  3. Fotopasca klikne (reštart), spustí WiFi AP
  4. Pripojíte sa k WiFi a komunikujete cez HTTP

MCU komunikácia: PIR senzor a power management

Zaujímavý nález bol aj komunikačný protokol medzi hlavným procesorom a MCU (mikrokontrolérom), ktorý riadi PIR senzor a napájanie:

CMD_COM_PIRMOD1_EN    ← zapnutie PIR módu 1
CMD_COM_PIRMOD1_DS    ← vypnutie PIR módu 1
CMD_COM_PIRENCFG      ← konfigurácia PIR
CMD_COM_PIRRESCFG     ← PIR response konfigurácia
CMD_COM_SECTION1_EN   ← časový úsek 1 (napr. noc)
CMD_COM_SECTION2_EN   ← časový úsek 2 (napr. deň)
CMD_COM_TIMELAPS_EN   ← time-lapse mód
CMD_COM_SETRTC        ← nastavenie hodín
CMD_COM_GETRTC        ← čítanie hodín
CMD_COM_PWRSRCCTL     ← riadenie napájania (solár/batéria)
CMD_COM_RFCTRL        ← zapnutie/vypnutie RF (WiFi/BT)
CMD_COM_DSPONRDY      ← DSP zapnutý a pripravený
CMD_COM_SETOFFREQ     ← požiadavka na vypnutie

Toto otvára možnosti pre pokročilé ovládanie fotopasce — napríklad vzdialené zapnutie/vypnutie PIR detekcie alebo zmenu time-lapse intervalu.

Vlastná PC aplikácia v Pythone

Na základe všetkých zistení som napísal PC aplikáciu na sťahovanie fotiek. Skladá sa z troch modulov:

1. BLE klient (bleak)

from bleak import BleakClient, BleakScanner

SERVICE_UUID = "0000ff00-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_UUID = "0000ff01-0000-1000-8000-00805f9b34fb"

async def wake_wifi(device):
    async with BleakClient(device.address) as client:
        await client.write_gatt_char(CHARACTERISTIC_UUID, b"BT_KEY_ON")
        # Fotopasca sa reštartuje a spustí WiFi AP

2. HTTP API klient (requests)

import requests

class CameraAPI:
    def __init__(self, ip="192.168.1.1"):
        self.base_url = f"http://{ip}"

    def get_file_list(self, page=1):
        resp = requests.get(f"{self.base_url}/Storage?GetFilePage={page}&type=Photo")
        return resp.json()

    def download_file(self, fid, save_path):
        resp = requests.get(f"{self.base_url}/Storage?Download={fid}", stream=True)
        with open(save_path, 'wb') as f:
            for chunk in resp.iter_content(8192):
                f.write(chunk)

3. GUI aplikácia (tkinter)

Aplikácia s grafickým rozhraním umožňuje:

  • BLE skenovanie a prebudenie fotopasce
  • Pripojenie na fotopascu cez WiFi
  • Prehliadanie fotiek s náhľadmi
  • Hromadné sťahovanie vybraných alebo všetkých súborov

Potrebné knižnice

pip install bleak requests Pillow

Bezpečnostné postrehy

Pri analýze firmware som si všimol niekoľko vecí, ktoré stoja za zmienku:

  1. Heslo natvrdo vo firmware12345678 je default a mnoho používateľov ho nikdy nezmení
  2. Žiadne šifrovanie — HTTP komunikácia prebieha v čistom texte
  3. Žiadna autentifikácia — ktokoľvek pripojený k WiFi fotopasce má plný prístup k fotkám
  4. BLE bez párovania — príkaz BT_KEY_ON môže poslať ktokoľvek v dosahu
  5. Mobilná appka loguje heslo v plaintexte — WiFi heslo sa objavuje priamo v logoch appky

V praxi to nie je veľký problém, pretože dosah WiFi je len 15–30 metrov a fotopasce bývajú v odľahlých oblastiach. Ale je dobré o tom vedieť.

Analýza logov mobilnej appky: Wachman nie je Wachman

Ďalší prekvapivý nález prišiel z analýzy logov oficiálnej mobilnej aplikácie. Porovnal som logy z dvoch rôznych fotopascí Wachman Solar Pro:

Fotopasca #1 (staršia)

[SYSV]iPhone13,3/18.4/1.1.0 25040100
[BLEC]已经获取到蓝牙版本:v1.2 2022072900
[FFEB]Wachman-00e2c4cf0398/12345678/(null)/1
[HTTP]675/RD7000_V01/REGULAR_0402_001/Nov 15 2023, 15:26:35/SJCAM

Fotopasca #2 (novšia)

[SYSV]iPhone18,2/26.2.1/1.1.3 25081200
[BLEC]已经获取到蓝牙版本:v27 250322#565#1
[FFEB]Wachman-88492d998c1a/12345678/0248/1
[HTTP]565/RD7010PRO_01/20190620/Nov 18 2025, 18:43:41/HUNTCAM

Čo prezrádzajú FW info stringy

Formát je: čip/model/variant/dátum_kompilácie/ODM_výrobca

ParameterFotopasca #1Fotopasca #2
ČipNovatek NT96675Novatek NT96565
Interný modelRD7000_V01RD7010PRO_01
Build variantREGULAR_0402_00120190620
Dátum kompilácieNov 15 2023Nov 18 2025
ODM výrobcaSJCAMHUNTCAM
BLE firmwarev1.2 (2022)v27 (2025)
WiFi heslo1234567812345678

Kľúčové zistenia

  1. Fotopasca sa predáva od minimálne dvoch rôznych ODM výrobcov (SJCAM a HUNTCAM)
  2. Rôzny hardvér za rovnakú cenu — zákazník dostane buď NT96675 alebo NT96565 podľa toho, kedy objedná
  3. RD7010PRO je novšia generácia — vyššie číslo modelu, PRO prípona, výrazne novší BLE firmware (v27 vs v1.2)
  4. MAC adresa v SSID — formát Wachman-{MAC} umožňuje identifikovať každú fotopascu unikátne
  5. Appka je univerzálna — rovnaký BLE/HTTP protokol funguje s oboma čipmi
  6. Heslo 12345678 v plaintexte — appka ho loguje otvorene v riadku [FFEB], čo je ďalšia bezpečnostná slabina
Čínski ODM výrobcovia
  │
  ├── SJCAM (NT96675, model RD7000)
  │     ├──► "Wachman Solar Pro" (staršie kusy)
  │     ├──► "Campark T180"
  │     └──► ďalšie značky...
  │
  └── HUNTCAM (NT96565, model RD7010PRO)
        ├──► "Wachman Solar Pro" (novšie kusy)
        └──► ďalšie značky...

Takže pod jednou značkou “Wachman” sa skrývajú dva úplne rôzne hardvéry od dvoch rôznych výrobcov. Klasický white-label biznis dotlačený do extrému.

Záver

Wachman Solar Pro nie je jeden produkt — je to obchodná značka nalepená na fotopasce od rôznych ODM výrobcov. Pod kapotou môže bežať Novatek NT96675 (SJCAM) alebo NT96565 (HUNTCAM), s eCos RTOS a rovnakým komunikačným protokolom. Komunikácia prebieha cez jednoduchý BLE handshake a HTTP API bez akéhokoľvek zabezpečenia, čo umožňuje pomerne jednoducho vytvoriť vlastný softvér na správu fotiek.

Ak máte rovnakú alebo podobnú fotopascu a chcete si overiť, či API funguje rovnako, stačí:

  1. Nainštalovať si PCAPDroid na Android
  2. Pripojiť sa k WiFi fotopasce
  3. Otvoriť oficiálnu appku a zachytiť HTTP komunikáciu
  4. Analyzovať PCAP súbor vo Wiresharku

Použité nástroje a zdroje

Leave a Comment