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ícia | Veľkosť | Typ | Účel |
|---|---|---|---|
| ID 1 | 2 936 B | MODELEXT header | Metadáta o čipe, modeli, dátume |
| ID 2 | 6 317 336 B (6.0 MB) | TTComp/BCL1 komprimovaná | Hlavný RTOS firmware |
| ID 3 | 269 048 B (263 KB) | Raw dáta | Bootstrap/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é:
| Typ | Počet výskytov |
|---|---|
| JPEG obrázky | 70 |
| BMP obrázky | 3 (vrátane 640KB grafík) |
| Novatek MODELEXT sekcie | 10 |
| NT96 markery | 66 |
| 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í:
| Skupina | Veľkosť | Čo to je |
|---|---|---|
| jpg_000 až jpg_002 | ~280 KB | Splash screen / úvodný obrázok pri zapnutí |
| jpg_003 až jpg_005 | 60–886 KB | Pozadiové grafiky menu |
| jpg_009 až jpg_018 | 0.5–4 KB | Ikonky UI — batéria, WiFi, SD karta, PIR, nastavenia |
| jpg_019 až jpg_030 | 0.6–3.5 KB | OSD elementy — šípky, checkboxy, slidery |
| jpg_031 až jpg_032 | 116–141 KB | Grafiky pre režim prehrávania |
| jpg_033 až jpg_037 | 1.8–8.9 KB | Ikony 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ória | Počet | Príklady |
|---|---|---|
| UI/Menu | 340 | UIMenuWndSetuppassword, MenuCommonItem_Choose_Menu |
| Movie/Video | 465 | FlowMovie_StartRec, StreamSender_PostVInfo |
| FileSystem | 336 | fs_GetNextFile, fs_CreateNormalEntry, FST_CMDFormatStorage |
| Sensor/ISP | 117 | IPL_AlgSetUIInfo, drv_sensor_power_save_on |
| Photo | 94 | FlowPhoto_InitCfgSetting, GxImgFile_CombineJPG |
| WiFi/Sieť | 91 | NetHTTP_Open, WifiCmdParser, MovieWifiTsk |
| GPIO/HW | 6 | MsdcNvtCb_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ý:
- Inicializuje DRAM (preto je v Partition 1 sekcia
DRAMINFO) - Nastaví clock a periférie
- Dekomprimuje Partition 2 do RAM
- 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 <<<day>>>photo capture.........
Monitor IQinit table <<<day>>>video rec or preview.........
Monitor IQinit table <<<night>>>photo capture.........
Monitor IQinit table <<<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):
<action><name>GetDeviceInfo</name>...</action>
<action><name>GetAPSettings</name>...</action>
<action><name>SetAPSettings</name>...</action>
<action><name>SetSelectedRegistrar</name>...</action>
<action><name>RebootAP</name>...</action>
<action><name>ResetAP</name>...</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: <?xml version="1.0"?><Function><Cmd>3016</Cmd><Status>0</Status></Function>
xml_001: <?xml version="1.0" encoding="UTF-8" ?>
xml_002: <?xml version="1.0" encoding="UTF-8" ?><LIST>
xml_004: <e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0">%s</e:propertyset>
xml_005: <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ť
| Čo | Koľko | Ako |
|---|---|---|
| Partície | 3 | NTKFWinfo -x all |
| Dekomprimovaný firmware | 9.3 MB | bfc4ntk -d |
| JPEG obrázky (UI) | 38 | Vyhľadanie FF D8 FF / FF D9 markerov |
| BMP obrázky | 3 | Vyhľadanie BM markerov + veľkosť z headeru |
| XML šablóny | 7 | Vyhľadanie <?xml |
| Symboly/funkcie | 2 890 | Extrakcia stringov z BCL1 sekcie |
| Všetky stringy | 26 618 | Regex [\x20-\x7e]{4,} |
| MODELEXT sekcie | 10 | Vyhľ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:
- Ghidra (zadarmo, NSA) — otvorte
partID2_full_decompressed.binako MIPS 32-bit big-endian, importujtesymbols.txtako label list - IDA Pro (platený) — to isté, ale s lepším MIPS dekompilátorom
- 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 |
|---|---|
| NTKFWinfo | Parsovanie a extrakcia Novatek firmware partícií |
| bfc4ntk | BCL1 dekomprimácia Novatek firmware |
Python 3 + re, struct | Vlastné skripty na extrakciu obrázkov a stringov |
| Hex editor | Manuá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.