| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/usr/bin/env bash
- ERR_FOUND=0
- REQUIRED_PATTERNS=(
- "Filetype: Flipper NFC device"
- "Version: 4"
- "Device type: SLIX"
- "UID:( [A-F0-9]{2}){8}"
- "DSFID: 00"
- "AFI: 00"
- "IC Reference: 03"
- "Lock DSFID: false"
- "Lock AFI: false"
- "Block Count: 8"
- "Block Size: 04"
- "Data Content:( [A-F0-9]{2}){32}"
- "Security Status: 00 00 00 00 00 00 00 00"
- "Capabilities: Default"
- "Password Privacy: 7F FD 6E 5B"
- "Password Destroy: 0F 0F 0F 0F"
- "Password EAS: 00 00 00 00"
- "Privacy Mode: false"
- "Lock EAS: false"
- )
- FORBIDDEN_PATTERNS=(
- "Subtype: ([0-9]){2}"
- # Add more forbidden patterns here
- )
- # Use process substitution so that ERR_FOUND is updated in the main shell.
- while read -r filename; do
- content=$(cat "$filename")
- for pattern in "${REQUIRED_PATTERNS[@]}"; do
- if ! echo "$content" | awk "/$pattern/ { found=1 } END { exit !found }"; then
- echo "$filename"
- echo " Missing: $pattern"
- ERR_FOUND=1
- fi
- done
- # The likelihood of two blocks of 00 in data content is almost impossible,
- # so use that as a check for when the full data is not read
- if echo "$content" | awk '/Data Content:( [A-F0-9]{2})* 00 00( [A-F0-9]{2})*/ { found=1 } END { exit !found }'; then
- echo "$filename"
- echo " Full data not read"
- ERR_FOUND=1
- fi
- if echo "$content" | awk '/\r/ { found=1 } END { exit !found }'; then
- echo "$filename"
- echo " Has carriage return characters"
- ERR_FOUND=1
- fi
- for pattern in "${FORBIDDEN_PATTERNS[@]}"; do
- if echo "$content" | awk "/$pattern/ { found=1 } END { exit !found }"; then
- echo "$filename"
- echo " Forbidden pattern found: $pattern"
- ERR_FOUND=1
- fi
- done
- done < <(find . -type f -name "*.nfc")
- exit $ERR_FOUND
|