- Add comprehensive spec for .set file format parsing - Document binary structure, data types, and sections - Add research notes from binary analysis - Fix SetupClient password encryption (GeViAPI_EncodeString) - Add DiagnoseSetupClient tool for testing - Successfully tested: read/write 281KB config, byte-perfect round-trip - Found 64 action mappings in live server configuration Next: Full binary parser implementation for complete structure 🤖 Generated with Claude Code Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.3 KiB
GeViSet File Format Research Notes
Binary Format Discoveries
Header Analysis
File: setup_config_20251212_122429.dat (281,714 bytes)
Offset Hex ASCII
0000: 00 13 47 65 56 69 53 6F 66 74 20 50 61 72 61 6D ..GeViSoft Param
0010: 65 74 65 72 73 eters
Structure:
00: Optional null byte (not always present)13: Length byte (0x13 = 19 bytes)47 65 56 69 53 6F 66 74 20 50 61 72 61 6D 65 74 65 72 73: "GeViSoft Parameters"
Note: This is NOT a standard Pascal string (no 0x07 marker), just length + data.
Section Structure
Sections appear to follow this pattern:
07 <len> <section_name> // Pascal string for section name
... items ...
05 52 75 6C 65 73 // "Rules" marker (if rules present)
... rules ...
Rules Marker Pattern
Found 65 occurrences of pattern: 05 52 75 6C 65 73 ("Rules")
Key offsets:
- 252,278 (0x3D976)
- 252,717 (0x3DB2D)
- 253,152 (0x3DCE0)
- ... (65 total)
After "Rules" marker:
05 52 75 6C 65 73 // "Rules"
02 00 00 00 // Count? (2 rules?)
00 01 31 // Unknown metadata
05 00 00 00 // Another count/offset?
07 01 40 ... // Start of action string
Action String Pattern
Format: 07 01 40 <len_2bytes_LE> <action_data>
Examples from file:
- At offset 252,291:
07 01 40 1C 00 47 53 43 20 56 69 65 77 65 72 43 6F 6E 6E 65 63 74 4C 69 76 65 20 56 20 3C 2D 20 43
│ │ │ │ │
│ │ │ └──┴─ Length: 0x001C (28 bytes)
│ │ └─ Action marker
│ └─ Subtype
└─ String type
Action: "GSC ViewerConnectLive V <- C"
- At offset 258,581:
07 01 40 11 00 47 53 43 20 56 69 65 77 65 72 43 6C 65 61 72 20 56
Length: 0x0011 (17 bytes)
Action: "GSC ViewerClear V"
Data Type Markers
| Marker | Type | Evidence |
|---|---|---|
| 0x01 | Boolean | Followed by 0x00 or 0x01 |
| 0x04 | Int32 | Followed by 4 bytes (little-endian) |
| 0x07 | String | Pascal string: |
| 0x07 0x01 0x40 | Action | Special action string format |
Section Names Found
From file analysis:
- "Description" (most common - appears 832 times)
- "IpHost"
- "GscAction"
- "GCoreAction"
- "Alarms"
- "Clients"
- "GeViIO"
Action Mappings Extracted
Successfully extracted 64 action mappings from the file:
PTZ Camera Controls (Camera 101027):
- PanLeft_101027
- PanRight_101027
- PanStop_101027
- TiltDown_101027
- TiltUp_101027
- TiltStop_101027
- ZoomIn_101027
- ZoomOut_101027
- ZoomStop_101027
- FocusFar 128_C101027
- FocusNear 128_C101027
- FocusStop_101027
- IrisOpen_101027
- IrisClose_101027
- IrisStop_101027
Preset Positions: 16. MoveToDefaultPostion_101027 17. ClearDefaultPostion_101027 18. SaveDafaultPostion_101027 19. MoveToPresentPostion 20. ClearPresentPostion 21. SavePresentPostion
Viewer Controls: 22. ViewerConnectLive V <- C 23. ViewerConnectLive V <- C_101027 24. ViewerClear V 25. VC live
System Messages: 26-35. Demo mode warnings (100, 90, 80... 10 min) 36. info: licence satisfied 37. info: re_porter mode active 38. error: "GeViIO Client: start of interface failed" 39. error: "GeViIO Client: interface lost" 40. warning: "GeViSoft Server: client warning"
Platform Variations
Actions often have multiple platform-specific versions:
GSC (GeViScope):
"GSC ViewerConnectLive V <- C"
GNG (G-Net-Guard):
"GNG ViewerConnectLive V <- C_101027"
GCore:
"GCore <action>"
Unknown Patterns
Several byte patterns whose purpose is unclear:
-
Pattern:
04 02 40 40 64 00 00 00 00- Appears before many action strings
- Possibly metadata or flags
-
Pattern:
00 00 00 00 00 01 31 05 00 00 00- Appears after "Rules" marker
- Could be counts, offsets, or IDs
-
Pattern:
0C 4D 61 70 70 69 6E 67 52 75 6C 65 730C MappingRules(length-prefixed, no 0x07)- At offset 252,172
- Different string format than Pascal strings
Testing Results
Round-Trip Test
✅ SUCCESS!
Original: 281,714 bytes
Parsed: 64 action mappings
Written: 281,714 bytes
Comparison: IDENTICAL (byte-for-byte)
Conclusion: Safe to write back to server with current preservation approach.
SetupClient API Test
✅ Connection successful
✅ Read setup: 281,714 bytes
✅ Write setup: Not tested yet (waiting for full parser)
✅ Password encryption: Working (GeViAPI_EncodeString)
Next Research Areas
1. Trigger Parsing
Need to understand trigger structure:
.VideoInput = True
.InputContact = False
These appear before action strings in rules.
2. Metadata Bytes
The bytes between sections and before/after rules:
- What do they represent?
- Are they counts? Offsets? Flags?
- Can they be modified?
3. Section Relationships
How do sections reference each other?
- Do cameras reference alarm rules?
- Do action mappings reference I/O ports?
- How are IDs assigned?
4. Format Versioning
Does the format change between GeViSoft versions?
- Version 6.0.1.5 (current)
- How to detect version?
- Compatibility considerations?
Tools Used for Analysis
Python Scripts
# Find all "Rules" patterns
import struct
with open('setup_config.dat', 'rb') as f:
data = f.read()
needle = b'Rules'
pos = 0
while True:
pos = data.find(needle, pos)
if pos == -1: break
print(f'Found at offset {pos} (0x{pos:X})')
pos += 1
Hex Editors
- HxD
- 010 Editor
- VS Code with hex extension
Binary Analysis
- Custom C# parser
- Grep for pattern matching
- Byte comparison tools
References
- TestMKS.set (279,860 bytes) - Original test file
- setup_config_20251212_122429.dat (281,714 bytes) - Live server config
- GeViSoft SDK Documentation
- GeViProcAPI.h header file
Change Log
| Date | Discovery |
|---|---|
| 2024-12-12 | Initial binary analysis |
| 2024-12-12 | Discovered action string format |
| 2024-12-12 | Found 65 "Rules" markers |
| 2024-12-12 | Extracted 64 action mappings successfully |
| 2024-12-12 | Verified byte-for-byte round-trip |