2025-02-21 13:20:08 +01:00
|
|
|
#!/usr/bin/env bash
|
2024-09-02 09:57:45 -07:00
|
|
|
|
2025-02-21 13:20:08 +01:00
|
|
|
ERR_FOUND=0
|
2024-09-02 09:57:45 -07:00
|
|
|
|
|
|
|
|
REQUIRED_PATTERNS=(
|
2025-02-21 13:20:08 +01:00
|
|
|
"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"
|
2024-09-02 09:57:45 -07:00
|
|
|
)
|
|
|
|
|
|
2025-02-21 13:20:08 +01:00
|
|
|
FORBIDDEN_PATTERNS=(
|
|
|
|
|
"Subtype: ([0-9]){2}"
|
|
|
|
|
# Add more forbidden patterns here
|
|
|
|
|
)
|
2024-09-02 09:57:45 -07:00
|
|
|
|
2025-02-21 13:20:08 +01:00
|
|
|
# Use process substitution so that ERR_FOUND is updated in the main shell.
|
|
|
|
|
while read -r filename; do
|
|
|
|
|
content=$(cat "$filename")
|
2024-09-02 09:57:45 -07:00
|
|
|
|
2025-02-21 13:20:08 +01:00
|
|
|
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
|
2024-09-02 09:57:45 -07:00
|
|
|
fi
|
2025-02-21 13:20:08 +01:00
|
|
|
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
|
2024-09-02 09:57:45 -07:00
|
|
|
|
2025-02-21 13:20:08 +01:00
|
|
|
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
|
2025-02-19 16:39:09 -08:00
|
|
|
fi
|
2025-02-21 13:20:08 +01:00
|
|
|
done
|
|
|
|
|
|
|
|
|
|
done < <(find . -type f -name "*.nfc")
|
2025-02-19 16:39:09 -08:00
|
|
|
|
2025-02-21 13:20:08 +01:00
|
|
|
exit $ERR_FOUND
|