Analýza firmware WACHMAN SOLAR PRO

Keď som získal firmware súbor FW96675A.bin (6.3 MB) z fotopasce Wachman Solar Pro / Campark T180, vedel som len toľko, že vo vnútri beží Novatek čip. Tento článok dokumentuje celý proces — od prvého otvorenia binárneho súboru až po extrakciu menu obrázkov, symbolov funkcií a kompletné pochopenie architektúry fotopascového firmwaru.


Krok 1: Prvý pohľad na FW96675A.bin

Súbor FW96675A.bin má presne 6 589 484 bajtov. Keď ho otvorím v hex editore, prvé bajty prezradia veľa:

00000000: 3800 0000 0100 0000 0100 0000 1922 0716
00000010: 4d4f 4445 4c45 5854 4e54 3936 3637 3500
00000020: 3030 3030 3030 3031 3230 3232 3035 3230

Na offsete 0x10 vidím text MODELEXTNT96675 a na 0x20 string 0000000120220520. To sú prvé stopy:

  • NT96675 — Novatek čip, SoC pre kamery a fotopasce
  • 20220520 — dátum buildu, 20. máj 2022

O kúsok ďalej na offsete 0xC0:

000000c0: 0000 0000 0000 0000 4c44 3a47 5335 3130

Text LD:GS510 — interný kódový názov platformy. GS510 je Novatek referenčný dizajn pre hunting kamery.

Krok 2: Rozdelenie na partície pomocou NTKFWinfo

Novatek firmware nie je jeden monolitický blob — je to kontajner s viacerými partíciami. Na jeho rozbalenie existuje komunitný nástroj NTKFWinfo od vývojára Dex9999.

python NTKFWinfo.py -i FW96675A.bin

Výstup ukázal tri partície:

PartíciaVeľkosťTypÚčel
ID 12 936 BMODELEXT headerMetadáta o čipe, modeli, dátume
ID 26 317 336 B (6.0 MB)TTComp/BCL1 komprimovanáHlavný RTOS firmware
ID 3269 048 B (263 KB)Raw dátaBootstrap/loader kód

Extrakcia všetkých partícií:

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

Výsledkom sú tri súbory:

fw_extracted/
├── FW96675A.bin-partitionID1    (2.9 KB)
├── FW96675A.bin-partitionID2    (6.0 MB)
└── FW96675A.bin-partitionID3    (263 KB)

Krok 3: Analýza Partition 1 — hlavička firmware

Partition 1 je najmenšia, ale obsahuje kľúčové metadáta. Hex dump odhalí prehľadnú štruktúru:

00000090: ... 4e54 3936 3637 3500  NT96675.
000000a0: 3130 3030 3030 3030 3230 3136 3035 3039  1000000020160509
000000c0: ... 4c44 3a47 5335 3130  LD:GS510
00000100: ... 4452 414d 494e464f  DRAMINFO
00000140: ... 434f 4d4d 494e464f  COMMINFO
00000180: ... 4657 3936 3637 3541  FW96675A

Header obsahuje sekcie s preddefinovanými názvami:

  • MODELEXT — konfigurácia modelu (opakovane, viaceré záznamy)
  • DRAMINFO — konfigurácia pamäte RAM
  • COMMINFO — komunikačné parametre
  • CODEINFO — informácie o kóde
  • FW96675A — identifikátor firmware

Každá sekcia je zarovnaná na 1 KB bloky, čo je typické pre Novatek SDK.

Krok 4: Dekomprimácia Partition 2 — jadro firmware

Partition 2 je najväčšia a najdôležitejšia — obsahuje celý operačný systém a aplikačný kód. Problém je, že je komprimovaná algoritmom BCL1 (Basic Compression Library), proprietárnym kompresorom Novateku.

Príkaz file na ňu vyhlási TTComp archive data, binary, 1K dictionary — čo je v podstate BCL1/LZ77 kompresia.

Na dekompresiu som použil nástroj bfc4ntk — špecializovaný BCL dekompresor pre Novatek firmware:

bfc4ntk.exe -d FW96675A.bin-partitionID2 partID2_full_decompressed.bin

Výsledok: 9 346 952 bajtov (8.9 MB) dekomprimovaného firmware. Z 6 MB sa rozbalilo takmer 9 MB — kompresný pomer cca 1.5:1.

Overenie hlavičky dekomprimovaného súboru:

00000000: 0004 4000 0000 0000 ...
00000050: 4e54 3936 3637 3500 4646 4646 4646 4646  NT96675.FFFFFFFF
00000060: 3230 3232 3035 3230 1865 6000 55aa 3b81  20220520.e`.U.;.

Opäť NT96675, dátum 20220520 a magický marker 55aa — boot signature. Dekomprimovaný firmware začína vlastným headerom a pokračuje strojovým kódom.

Krok 5: Čo sa skrýva v 9 MB firmware — sken vnútornej štruktúry

Na dekomprimovanom firmware som spustil vlastný Python skript, ktorý hľadá signatúry známych formátov:

import struct, re

with open('partID2_full_decompressed.bin', 'rb') as f:
    data = f.read()

signatures = {
    b'\xff\xd8\xff': 'JPEG',
    b'BM':           'BMP',
    b'MODELEXT':     'Novatek MODELEXT',
    b'NT96':         'Novatek marker',
    b'\x55\xaa':     'Boot signature',
}

for sig, name in signatures.items():
    count = 0
    pos = 0
    while True:
        pos = data.find(sig, pos)
        if pos == -1: break
        count += 1
        pos += 1
    if count > 0:
        print(f'{name}: {count} výskytov')

Výsledky boli prekvapivo bohaté:

TypPočet výskytov
JPEG obrázky70
BMP obrázky3 (vrátane 640KB grafík)
Novatek MODELEXT sekcie10
NT96 markery66
Boot signatúry (0x55AA)15

Vo firmware je 70 JPEG obrázkov — od veľkých 282KB splash screenov po malé 162-bajtové ikonky. Všetky sú priamo vložené v binárke.

Krok 6: Extrakcia obrázkov — UI fotopasce

Na extrakciu obrázkov stačí nájsť JPEG markery (FF D8 FF pre začiatok, FF D9 pre koniec) a vyrezať dáta medzi nimi:

import os

os.makedirs('fw_extracted_full', exist_ok=True)

jpegs = []
pos = 0
while True:
    pos = data.find(b'\xff\xd8\xff', pos)
    if pos == -1: break
    end = data.find(b'\xff\xd9', pos + 3)
    if end != -1:
        size = end - pos + 2
        if size > 500:
            jpegs.append((pos, size))
    pos += 1

for i, (off, sz) in enumerate(jpegs):
    with open(f'fw_extracted_full/jpg_{i:03d}_0x{off:08x}.jpg', 'wb') as f:
        f.write(data[off:off+sz])

Výsledok — 38 validných JPEG obrázkov rôznych veľkostí:

SkupinaVeľkosťČo to je
jpg_000 až jpg_002~280 KBSplash screen / úvodný obrázok pri zapnutí
jpg_003 až jpg_00560–886 KBPozadiové grafiky menu
jpg_009 až jpg_0180.5–4 KBIkonky UI — batéria, WiFi, SD karta, PIR, nastavenia
jpg_019 až jpg_0300.6–3.5 KBOSD elementy — šípky, checkboxy, slidery
jpg_031 až jpg_032116–141 KBGrafiky pre režim prehrávania
jpg_033 až jpg_0371.8–8.9 KBIkony pre timelapse, GPS, senzor

Rovnako som vyextrahoval 3 BMP obrázky, z ktorých dva mali ~640 KB — pravdepodobne full-screen grafiky pre LCD displej fotopasce.

Krok 7: Nález symboltable — 26 618 názvov funkcií

Toto bol najväčší nález. Nástroj bfc4ntk okrem dekomprimovaného firmware vyprodukoval aj súbor partID2_bcl1_section.bin (4.8 MB). Keď som naň pozrel v hex editore:

00000000: 7400 0000 6673 5f53 746f 7265 5265 6365  t...fs_StoreRece
00000010: 6e74 4469 7200 0000 6673 5f43 6865 636b  ntDir...fs_Check
00000020: 5265 6365 6e74 4469 7200 0000 6673 5f47  RecentDir...fs_G
00000030: 6574 4e65 7874 4669 6c65 0000 6673 5f49  etNextFile..fs_I

Symboltable! Firmware obsahuje debug stringy — kompletné názvy funkcií. Toto je pre reverse engineering absolútna zlatá baňa. Normálne by ste v Ghidre videli len FUN_00412a3c, ale vďaka týmto symbolom uvidíte fs_GetNextFile.

Extrakcia všetkých stringov:

with open('partID2_bcl1_section.bin', 'rb') as f:
    symdata = f.read()

strings = re.findall(b'[\x20-\x7e]{4,}', symdata)

with open('symbols.txt', 'w') as f:
    for s in strings:
        f.write(s.decode('ascii', errors='ignore') + '\n')

Výsledok: 26 618 stringov, z toho 2 890 rozpoznaných názvov funkcií. Rozdelil som ich do kategórií:

KategóriaPočetPríklady
UI/Menu340UIMenuWndSetuppassword, MenuCommonItem_Choose_Menu
Movie/Video465FlowMovie_StartRec, StreamSender_PostVInfo
FileSystem336fs_GetNextFile, fs_CreateNormalEntry, FST_CMDFormatStorage
Sensor/ISP117IPL_AlgSetUIInfo, drv_sensor_power_save_on
Photo94FlowPhoto_InitCfgSetting, GxImgFile_CombineJPG
WiFi/Sieť91NetHTTP_Open, WifiCmdParser, MovieWifiTsk
GPIO/HW6MsdcNvtCb_DispIcstGet

Krok 8: Identifikácia operačného systému

V symboltable som našiel jednoznačný dôkaz, aký OS beží na fotopasci:

cyg_uint8* Cyg_Mempolt2<T>::try_alloc(cyg_int32)

[with T = Cyg_Mempool_dlmalloc_Implementation]

void Cyg_Mempolt2<T>::get_status(…)

[with T = Cyg_Mempool_dlmalloc_Implementation]

static void Cyg_Thread::sleep()

Prefix Cyg_ je jednoznačný — eCos (embedded Configurable operating system). A ďalšie stringy to potvrdzujú:

Benchmark : Start ----- (uITRON)
FsUitron_SearchFile
FsUitron_ChDir

Firmware beží na kombinácii uITRON + eCos RTOS:

  • uITRON — japonský real-time kernel štandard, používaný Novatekom ako hlavný scheduler
  • eCos — pamäťový manažment (vidno dlmalloc), threading, niektoré drivery

Žiadny Linux, žiadny Android — čistý RTOS. To vysvetľuje, prečo sa fotopasca zapne za menej ako sekundu a vydrží mesiace na batériách.

Krok 9: Partition 3 — bootstrap kód

Partition 3 (263 KB) je iná ako predchádzajúce. Obsahuje strojový kód, ale takmer žiadne čitateľné stringy — len ub51023 a dátum 20220520:

00000000: 0080 0d40 f8ff ad31 0200 ad35 0080 8d40
00000010: 0010 8040 0018 8040 0028 8040 0030 8040

Inštrukcie vyzerajú ako MIPS32 — typická architektúra pre Novatek SoC. Táto partícia je boot loader / init kód, ktorý:

  1. Inicializuje DRAM (preto je v Partition 1 sekcia DRAMINFO)
  2. Nastaví clock a periférie
  3. Dekomprimuje Partition 2 do RAM
  4. Odovzdá riadenie hlavnému RTOS firmware

Krok 10: Hlboko v menu — odhalenie fotopasce

A teraz to najzaujímavejšie. V dekomprimovanom firmware som hľadal všetko, čo súvisí s funkciami fotopasce. Výsledky jednoznačne potvrdzujú, že ide o hunting cam / trail camera:

Explicitné identifikátory

HUNTING-CAM
Trail camera
POOL_ID_HUNTING_INFO
SysGetFlag(FL_HUNTING_WORK_MODE)
Not select HUNTING_SYS_MODE

Nie dashcam, nie IP kamera — firmware sa interne nazýva HUNTING-CAM.

PIR senzory — dva kusy

Fotopasca má dva PIR senzory — hlavný a bočný:

PIR MAIN-SIDE:%d-%d
PIR1:%d
PIR2:%d
FLG_ID_PIR1
^B----TURN ON PIR  RESULT==%d
^RMCU----pir1--COM_MCUREQ_PIR1EVT--comes
^R CheckPowerMode_GpioMode_tsk---WaitPir1Conunt=%d

PIR senzory neriadi hlavný Novatek čip, ale externý MCU (mikrokontrolér), ktorý komunikuje sériovým protokolom:

CMD_COM_PIRENCFG       ← konfigurácia PIR
CMD_COM_PIRMOD1_EN     ← zapnutie PIR módu 1
CMD_COM_PIRMOD1_DS     ← vypnutie PIR módu 1
CMD_COM_PIRRESCFG      ← PIR response konfigurácia

Nočné videnie

Firmware rozlišuje deň a noc a podľa toho prepína IQ (image quality) parametre:

Monitor IQinit table &lt;&lt;&lt;day>>>photo capture.........
Monitor IQinit table &lt;&lt;&lt;day>>>video rec or preview.........
Monitor IQinit table &lt;&lt;&lt;night>>>photo capture.........
Monitor IQinit table &lt;&lt;&lt;night>>>video rec or preview.........

Nočný režim má vlastnú gamma korekciu:

gamma_night0
gamma_night1
data->GammaLut_Night
data->GammaLut_TH.NIGHT

A IR LED (infračervené podsvietenie) je riadené spoločne s meraním batérie:

---test battery LOW CAUSE:IRLED ON,BUT BATTERY NOT SUP

Batérie — AA aj Li-Ion

Fotopasca podporuje dva typy napájania:

UIFlowWndMovie_Status_Choose_bat_AA     ← AA batérie
UIFlowWndMovie_Status_Choose_bat_LIO    ← Li-Ion akumulátor
GetBattery_Type==%d
ChangeBatteryType_MonitorMode
UIMenuSetupVersionText_AA_battery
UIMenuSetupVersion_BATTERY
A:\battery_adc.txt                       ← log merania napätia

Meranie napätia prebieha cez ADC kanál MCU:

~RERR: Can't open ADC channel for battery voltage detection
~RERR: Can't open ADC channel for battery voltage1 detection
~RERR: Can't open ADC channel for light voltage detection
~RERR: Can't open ADC channel for temp voltage detection

Zaujímavé — ADC meria aj svetelný senzor (light voltage) a teplotu (temp voltage).

Režimy snímania

photonum=%ld  huntmode=%ld  time lapse=%ld  irmenu=%ld phspeed=%ld
pir time=%ld  sidepir=%ld   ble=%ld         lptime=%ld

Tento formátovací string prezrádza kompletné menu nastavení:

  • photonum — počet fotiek v sérii (burst)
  • huntmode — mód loveckej kamery
  • time lapse — časozberné snímanie
  • irmenu — IR LED nastavenia
  • phspeed — rýchlosť spúšte
  • pir time — čas aktívneho PIR
  • sidepir — bočný PIR senzor
  • ble — Bluetooth Low Energy
  • lptime — low power time (čas do uspania)

Timelapse

Pre timelapse existuje dokonca vlastný priečinok na SD karte:

A:\Timelapse\
TIMELAPSE
^R fsID[%d] emrON and TIMELAPSE!! do nothing!
[VDOENC][%d] Timelapse time exceeds max 1hr, Change to 1 sec one shot

Maximálny timelapse interval je 1 hodina — ak nastavíte viac, firmware automaticky prepne na 1-sekundový single shot.

Burst (séria fotiek)

Firmware má komplexný burst systém:

Cap_Burst          ← jednoduchá séria
Cap_EBurst         ← rozšírená séria
Cap_InfBurst       ← nekonečná séria
Cap_MulInfBurst    ← viacnásobná nekonečná séria
PowerMange_MonitorMode_PhotoBurst

Každý burst prechádza pipeline: Cap → Proc → Enc → Write:

Proc_Burst → Enc_Burst → Write_Burst
Proc_EBurst → Enc_EBurst → Write_EBurst

Motion Detection (softvérová)

Okrem hardvérového PIR má firmware aj softvérovú detekciu pohybu cez ISP:

ime_chgMotionDectionEnable
ime_chgMotionDectionGlobalParam
ime_chgMotionDectionLvParam
ime_chgMotionDectionRegionParam
ime_chgMotionDectionTamperParam
Motion Detection
WiFiCmd_OnExeSetMotionDet

Dokonca aj tamper detection — detekcia manipulácie s kamerou.

GPS modul

Fotopasca podporuje GPS:

GPSRecTsk                    ← GPS recording task
Start GPS receive task
Terminate GPS receive task
MOVWriteGPSTag               ← GPS tag do videa
COPY GPS BSQ
FLG_ID_GPS
NMediaRecTS_AddGPSData

GPS súradnice sa zapisujú do EXIF metadát fotiek aj do videa.

Data stamp / Watermark

DATASTAMP
DATASTAMP(enable/disable) = %d
MovieStamp_Setup
MovieStamp_UpdateData
MovieStamp_GenCustomStampData
IMG_CAP_CBMSG_GEN_DATASTAMP_PIC
IMG_CAP_CBMSG_GEN_DATASTAMP_STR
datestamp,  index value 0 ~ 2
photo datestamp %d

Vodotlač na fotkách s dátumom, časom a voliteľne GPS súradnicami.

WiFi streaming

wifistart %     ← Start wifi streaming
wifistop %      ← Stop wifi streaming
dumpwifilink %  ← Dump WifiLink Status
MovieWifiTsk
_ImageApp_MovieMulti_WifiLinkOpen
_ImageApp_MovieMulti_WifiLinkClose
_ImageApp_MovieMulti_open_http_cb
NetHTTP_Open
NetHTTP_Close

WiFi sa používa nielen na sťahovanie fotiek, ale aj na živý video stream cez HTTP.

UPnP/WPS

V extrahovaných XML súboroch som našiel kompletný UPnP SCPD (Service Control Protocol Description):

&lt;action>&lt;name>GetDeviceInfo&lt;/name>...&lt;/action>
&lt;action>&lt;name>GetAPSettings&lt;/name>...&lt;/action>
&lt;action>&lt;name>SetAPSettings&lt;/name>...&lt;/action>
&lt;action>&lt;name>SetSelectedRegistrar&lt;/name>...&lt;/action>
&lt;action>&lt;name>RebootAP&lt;/name>...&lt;/action>
&lt;action>&lt;name>ResetAP&lt;/name>...&lt;/action>

Fotopasca implementuje WPS (WiFi Protected Setup) pre jednoduchšie párovanie.

Sleep/Wake cyklus

Celý životný cyklus fotopasce v teréne:

System_ModeSleepEnter          ← vstup do spánku
System_ModeSleepLeave          ← opustenie spánku
PRESS OK KEY TO SLEEP          ← manuálne uspanie
^MSLEEP Begin (Lvl: 0x%x=>0x%x) ...
^MSLEEP End (Lvl: 0x%x)
IPL_ID_%d set sleep            ← ISP pipeline do spánku
IPL_ID_%d set wakeup %d        ← ISP pipeline prebudenie
CPU2 goes to sleep             ← druhé jadro CPU do spánku
DSP goes to standby!!          ← DSP do standby
MonitorMode_Powermange_and_NightorDay  ← monitor mód

Fotopasca väčšinu času spí. MCU sleduje PIR senzory a keď detekuje pohyb, prebudí hlavný Novatek SoC, ktorý do zlomku sekundy naštartuje ISP pipeline, odfotí/natočí a znova zaspí.

Krok 11: XML šablóny a formátovacie stringy

Z firmware som extrahoval 7 XML súborov:

xml_000: &lt;?xml version="1.0"?>&lt;Function>&lt;Cmd>3016&lt;/Cmd>&lt;Status>0&lt;/Status>&lt;/Function>
xml_001: &lt;?xml version="1.0" encoding="UTF-8" ?>
xml_002: &lt;?xml version="1.0" encoding="UTF-8" ?>&lt;LIST>
xml_004: &lt;e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0">%s&lt;/e:propertyset>
xml_005: &lt;s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" ...>
xml_006: Kompletný UPnP SCPD (4.8 KB) — WiFi/WPS konfigurácia

xml_000 je šablóna pre WiFi command response — príkaz č. 3016 so statusom 0 (OK). Tieto XML šablóny sa dynamicky plnia dátami a posielajú cez HTTP klientovi (mobilnej appke).

Krok 12: Verifikačné moduly vo firmware

Pre úplnosť — firmware obsahuje aj vstavané diagnostické a testové nástroje:

AudioTestWnd        ← test zvuku
BurnInWnd           ← burn-in test (výrobný)
KeyTestWnd          ← test tlačidiel
LCDTestWnd          ← test LCD displeja
UIFlowWndMovie_StaticTXT_pir_test   ← PIR test
UIFlowWndMovie_StaticTXT_pir1_test  ← PIR1 test

A dokonca aj zabudovaný iperf (sieťový benchmark) a kompletný WiFi debug:

iperf [-h|--help] [-v|--version]
ifconfig -a [-d] [-m] [-u] [address_family]
dot11DefaultSSID
dot11DesiredBssid
dot11FragmentationThreshold
autoRate
beacon_prd
power_percent

Zhrnutie: Čo všetko sa dá z 6 MB firmwaru vyťažiť

ČoKoľkoAko
Partície3NTKFWinfo -x all
Dekomprimovaný firmware9.3 MBbfc4ntk -d
JPEG obrázky (UI)38Vyhľadanie FF D8 FF / FF D9 markerov
BMP obrázky3Vyhľadanie BM markerov + veľkosť z headeru
XML šablóny7Vyhľadanie <?xml
Symboly/funkcie2 890Extrakcia stringov z BCL1 sekcie
Všetky stringy26 618Regex [\x20-\x7e]{4,}
MODELEXT sekcie10Vyhľadanie MODELEXT markeru

Nástroje na pokročilú analýzu

Ak chcete ísť ešte hlbšie — napríklad disassemblovať strojový kód a porozumieť jednotlivým funkciám:

  1. Ghidra (zadarmo, NSA) — otvorte partID2_full_decompressed.bin ako MIPS 32-bit big-endian, importujte symbols.txt ako label list
  2. IDA Pro (platený) — to isté, ale s lepším MIPS dekompilátorom
  3. Binwalk — automatická extrakcia (vyžaduje Python 3.10–3.12, na 3.14 nefunguje kvôli odstránenému modulu imp)

Architektúra firmware — celkový obraz

┌─────────────────────────────────────────────────┐
│              FW96675A.bin (6.3 MB)               │
├──────────┬────────────────────┬──────────────────┤
│ Part. 1  │    Partition 2     │   Partition 3    │
│ MODELEXT │  BCL1 komprimovaná │   Bootstrap      │
│  2.9 KB  │     6.0 MB         │    263 KB        │
│          │        │           │                  │
│ Metadáta │        ▼           │ MIPS init kód    │
│ DRAMINFO │  Dekomprimovaná    │ DRAM init        │
│ COMMINFO │     9.3 MB         │ Clock setup      │
│ CODEINFO │        │           │ Decompress → RAM │
│          │   ┌────┴─────┐    │                  │
│          │   │          │    │                  │
│          │   ▼          ▼    │                  │
│          │ RTOS kód   Assets │                  │
│          │ uITRON     38 JPG │                  │
│          │ + eCos     3 BMP  │                  │
│          │            7 XML  │                  │
│          │                   │                  │
│          │ Moduly:           │                  │
│          │ ├─ PIR/MCU comm   │                  │
│          │ ├─ WiFi/HTTP/RTSP │                  │
│          │ ├─ BLE            │                  │
│          │ ├─ GPS            │                  │
│          │ ├─ Video encoder  │                  │
│          │ ├─ Photo capture  │                  │
│          │ ├─ ISP pipeline   │                  │
│          │ ├─ FAT filesystem │                  │
│          │ ├─ UI/OSD/Menu    │                  │
│          │ ├─ Motion detect  │                  │
│          │ ├─ Sleep/Wake mgr │                  │
│          │ └─ Data stamp     │                  │
└──────────┴───────────────────┴──────────────────┘

Na záver

Z jedného 6.3 MB binárneho súboru sa dá vyčítať prakticky všetko o zariadení — od čipu cez operačný systém, cez UI obrázky až po kompletný zoznam funkcií firmware. Novatek SDK síce používa proprietárnu kompresiu, ale komunita vytvorila nástroje na jej prekonanie.

Najcennejším nálezom je symboltable s takmer 3000 názvami funkcií — to je niečo, čo výrobcovia zvyčajne zo release firmware odstraňujú. V tomto prípade to zabudli, čo nám umožnilo nahliadnuť hlboko do vnútorností hunting kamery postavenej na Novatek NT96675.


Použité nástroje

NástrojÚčel
NTKFWinfoParsovanie a extrakcia Novatek firmware partícií
bfc4ntkBCL1 dekomprimácia Novatek firmware
Python 3 + re, structVlastné skripty na extrakciu obrázkov a stringov
Hex editorManuálna analýza binárnych štruktúr

Tento článok slúži na vzdelávacie účely. Reverse engineering firmware vlastného zariadenia je vo väčšine jurisdikcií legálny na účely interoperability podľa smernice EÚ 2009/24/EC.

Leave a Comment