validation.sh 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env bash
  2. ERR_FOUND=0
  3. REQUIRED_PATTERNS=(
  4. "Filetype: Flipper NFC device"
  5. "Version: 4"
  6. "Device type: SLIX"
  7. "UID:( [A-F0-9]{2}){8}"
  8. "DSFID: 00"
  9. "AFI: 00"
  10. "IC Reference: 03"
  11. "Lock DSFID: false"
  12. "Lock AFI: false"
  13. "Block Count: 8"
  14. "Block Size: 04"
  15. "Data Content:( [A-F0-9]{2}){32}"
  16. "Security Status: 00 00 00 00 00 00 00 00"
  17. "Capabilities: Default"
  18. "Password Privacy: 7F FD 6E 5B"
  19. "Password Destroy: 0F 0F 0F 0F"
  20. "Password EAS: 00 00 00 00"
  21. "Privacy Mode: false"
  22. "Lock EAS: false"
  23. )
  24. FORBIDDEN_PATTERNS=(
  25. "Subtype: ([0-9]){2}"
  26. # Add more forbidden patterns here
  27. )
  28. # Use process substitution so that ERR_FOUND is updated in the main shell.
  29. while read -r filename; do
  30. content=$(cat "$filename")
  31. for pattern in "${REQUIRED_PATTERNS[@]}"; do
  32. if ! echo "$content" | awk "/$pattern/ { found=1 } END { exit !found }"; then
  33. echo "$filename"
  34. echo " Missing: $pattern"
  35. ERR_FOUND=1
  36. fi
  37. done
  38. # The likelihood of two blocks of 00 in data content is almost impossible,
  39. # so use that as a check for when the full data is not read
  40. if echo "$content" | awk '/Data Content:( [A-F0-9]{2})* 00 00( [A-F0-9]{2})*/ { found=1 } END { exit !found }'; then
  41. echo "$filename"
  42. echo " Full data not read"
  43. ERR_FOUND=1
  44. fi
  45. if echo "$content" | awk '/\r/ { found=1 } END { exit !found }'; then
  46. echo "$filename"
  47. echo " Has carriage return characters"
  48. ERR_FOUND=1
  49. fi
  50. for pattern in "${FORBIDDEN_PATTERNS[@]}"; do
  51. if echo "$content" | awk "/$pattern/ { found=1 } END { exit !found }"; then
  52. echo "$filename"
  53. echo " Forbidden pattern found: $pattern"
  54. ERR_FOUND=1
  55. fi
  56. done
  57. done < <(find . -type f -name "*.nfc")
  58. exit $ERR_FOUND