protocol.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. #include "protocol_i.h"
  2. #include "furi.h"
  3. // #######################
  4. // ## Ibutton Protocols ##
  5. // #######################
  6. #define DS1990_DATA_SIZE (8)
  7. #define Metakom_DATA_SIZE (4)
  8. #define Cyfral_DATA_SIZE (2)
  9. const uint8_t uid_list_ds1990[][DS1990_DATA_SIZE] = {
  10. {0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1}, //– код универсального ключа, для Vizit
  11. {0x01, 0xBE, 0x40, 0x11, 0x5A, 0x56, 0x00, 0xBB}, //- проверен работает
  12. {0x01, 0xBE, 0x40, 0x11, 0x00, 0x00, 0x00, 0x77}, //- проверен работает
  13. {0x01, 0xBE, 0x40, 0x11, 0x0A, 0x00, 0x00, 0x1D}, //- проверен работает Визит иногда КЕЙМАНЫ
  14. {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F}, //- проверен(метаком, цифрал, ВИЗИТ).
  15. {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x9B}, //- проверен Визит, Метакомы, КОНДОР
  16. {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x14}, //???-Открываает 98% Метаком и некоторые Цифрал
  17. {0x01, 0x00, 0x00, 0x00, 0x00, 0x90, 0x19, 0xFF}, //???-Отлично работает на старых домофонах
  18. {0x01, 0x6F, 0x2E, 0x88, 0x8A, 0x00, 0x00, 0x4D}, //???-Открывать что-то должен
  19. {0x01, 0x53, 0xD4, 0xFE, 0x00, 0x00, 0x7E, 0x88}, //???-Cyfral, Metakom
  20. {0x01, 0x53, 0xD4, 0xFE, 0x00, 0x00, 0x00, 0x6F}, //???-домофоны Визит (Vizit) - до 99%
  21. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D}, //???-домофоны Cyfral CCD-20 - до 70%
  22. {0x01, 0x00, 0xBE, 0x11, 0xAA, 0x00, 0x00, 0xFB}, //???-домофоны Кейман (KEYMAN)
  23. {0x01, 0x76, 0xB8, 0x2E, 0x0F, 0x00, 0x00, 0x5C}, //???-домофоны Форвард
  24. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // Null bytes
  25. {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x14}, // Only FF
  26. {0x01, 0x78, 0x00, 0x48, 0xFD, 0xFF, 0xFF, 0xD1}, // StarNew Uni5
  27. {0x01, 0xA9, 0xE4, 0x3C, 0x09, 0x00, 0x00, 0xE6}, // Eltis Uni
  28. {0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66},
  29. {0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B},
  30. {0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0},
  31. {0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48},
  32. {0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13},
  33. {0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE},
  34. {0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5},
  35. {0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7},
  36. {0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C},
  37. {0x01, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61},
  38. {0x01, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A},
  39. {0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2},
  40. {0x01, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9},
  41. {0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14},
  42. {0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F},
  43. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x63},
  44. {0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xD1},
  45. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x81},
  46. {0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFC},
  47. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xDF},
  48. {0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10},
  49. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x5C},
  50. {0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xA6},
  51. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02},
  52. {0x01, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x4A},
  53. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xE0},
  54. {0x01, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x67},
  55. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xBE},
  56. {0x01, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x8B},
  57. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xFF},
  58. {0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x12},
  59. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xA1},
  60. {0x01, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0xFE},
  61. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x43},
  62. {0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57},
  63. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x1D},
  64. {0x01, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0xFC},
  65. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x9E},
  66. {0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x86},
  67. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC0},
  68. {0x01, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x2D},
  69. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x22},
  70. {0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0xC9},
  71. {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x7C},
  72. {0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x62},
  73. {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x79},
  74. {0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0xE3},
  75. {0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, 0x8A},
  76. {0x01, 0x10, 0x01, 0x10, 0x01, 0x00, 0x00, 0x38},
  77. {0x01, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x19},
  78. {0x01, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x68},
  79. {0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x5D},
  80. {0x01, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0xB6},
  81. {0x01, 0x11, 0x11, 0x22, 0x22, 0x33, 0x33, 0x68},
  82. {0x01, 0x11, 0x11, 0x22, 0x22, 0x00, 0x00, 0x4C},
  83. {0x01, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x91},
  84. {0x01, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00, 0xCD},
  85. {0x01, 0x12, 0x31, 0x23, 0x12, 0x31, 0x23, 0x94},
  86. {0x01, 0x12, 0x31, 0x23, 0x12, 0x00, 0x00, 0xBC},
  87. {0x01, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x4E},
  88. {0x01, 0x12, 0x34, 0x12, 0x34, 0x00, 0x00, 0xEC},
  89. {0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0xFD},
  90. {0x01, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x32},
  91. {0x01, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x9D},
  92. {0x01, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0xB9},
  93. {0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xA4},
  94. {0x01, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x23},
  95. {0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xC4},
  96. {0x01, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0xA8},
  97. {0x01, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x64},
  98. {0x01, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x2C},
  99. {0x01, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x04},
  100. {0x01, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, 0xA7},
  101. {0x01, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x16},
  102. {0x01, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x01},
  103. {0x01, 0x87, 0x65, 0x43, 0x21, 0x00, 0x00, 0xC6},
  104. {0x01, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x76},
  105. {0x01, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0x8A},
  106. {0x01, 0x98, 0x76, 0x54, 0x32, 0x10, 0x00, 0x77},
  107. {0x01, 0x98, 0x76, 0x54, 0x32, 0x00, 0x00, 0x9B},
  108. {0x01, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xD6},
  109. {0x01, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x0E},
  110. {0x01, 0xAB, 0xCD, 0xEF, 0x00, 0x00, 0x00, 0x84},
  111. {0x01, 0xAB, 0xCD, 0xAB, 0xCD, 0xAB, 0xCD, 0xD3},
  112. {0x01, 0xAB, 0xCD, 0xAB, 0xCD, 0x00, 0x00, 0x29},
  113. {0x01, 0xAB, 0xCA, 0xBC, 0xAB, 0xCA, 0xBC, 0x70},
  114. {0x01, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xB6},
  115. {0x01, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x85},
  116. {0x01, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xF2},
  117. {0x01, 0xBA, 0xBA, 0xBA, 0xBA, 0x00, 0x00, 0x5B},
  118. {0x01, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x8F},
  119. {0x01, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x1F},
  120. {0x01, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xEF},
  121. {0x01, 0xDD, 0xDD, 0xDD, 0xDD, 0x00, 0x00, 0x94},
  122. {0x01, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x4F},
  123. {0x01, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x10},
  124. {0x01, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0x3D},
  125. {0x01, 0x12, 0x34, 0x56, 0x78, 0x9A, 0x00, 0xAC},
  126. {0x01, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0x88},
  127. {0x01, 0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x6A},
  128. {0x01, 0x12, 0x34, 0x56, 0x78, 0x9A, 0x12, 0x8D},
  129. {0x01, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0x88},
  130. {0x01, 0xCB, 0xA9, 0x87, 0x65, 0x43, 0x21, 0xE6},
  131. {0x01, 0xCB, 0xA9, 0x87, 0x65, 0x00, 0x00, 0x55},
  132. {0x01, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x02},
  133. {0x01, 0xFE, 0xDC, 0xBA, 0x98, 0x00, 0x00, 0xA4},
  134. {0x01, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x0E},
  135. {0x01, 0xCA, 0xCA, 0xCA, 0xCA, 0x00, 0x00, 0xE9},
  136. {0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x6B},
  137. {0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x45},
  138. {0x01, 0xCA, 0xFE, 0xCA, 0xFE, 0xCA, 0xFE, 0x0A},
  139. {0x01, 0xCA, 0xFE, 0xCA, 0xFE, 0x00, 0x00, 0x32},
  140. {0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D},
  141. {0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0},
  142. {0xFF, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB},
  143. {0xFF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73},
  144. {0xFF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28},
  145. {0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC5},
  146. {0xFF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E},
  147. {0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC},
  148. {0xFF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7},
  149. {0xFF, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A},
  150. {0xFF, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
  151. {0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99},
  152. {0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2},
  153. {0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F},
  154. {0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74},
  155. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x58},
  156. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xEA},
  157. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xBA},
  158. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xC7},
  159. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE4},
  160. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x2B},
  161. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x67},
  162. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x9D},
  163. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x39},
  164. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x71},
  165. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xDB},
  166. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x5C},
  167. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x85},
  168. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xB0},
  169. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC4},
  170. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29},
  171. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x9A},
  172. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0xC5},
  173. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x78},
  174. {0xFF, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x6C},
  175. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x26},
  176. {0xFF, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0xC7},
  177. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xA5},
  178. {0xFF, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xBD},
  179. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xFB},
  180. {0xFF, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x16},
  181. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x19},
  182. {0xFF, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0xF2},
  183. {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x47},
  184. {0xFF, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x59},
  185. {0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x42},
  186. {0xFF, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0xD8},
  187. {0xFF, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, 0xB1},
  188. {0xFF, 0x10, 0x01, 0x10, 0x01, 0x00, 0x00, 0x03},
  189. {0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x22},
  190. {0xFF, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x53},
  191. {0xFF, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x66},
  192. {0xFF, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x8D},
  193. {0xFF, 0x11, 0x11, 0x22, 0x22, 0x33, 0x33, 0x53},
  194. {0xFF, 0x11, 0x11, 0x22, 0x22, 0x00, 0x00, 0x77},
  195. {0xFF, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0xAA},
  196. {0xFF, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00, 0xF6},
  197. {0xFF, 0x12, 0x31, 0x23, 0x12, 0x31, 0x23, 0xAF},
  198. {0xFF, 0x12, 0x31, 0x23, 0x12, 0x00, 0x00, 0x87},
  199. {0xFF, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x75},
  200. {0xFF, 0x12, 0x34, 0x12, 0x34, 0x00, 0x00, 0xD7},
  201. {0xFF, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0xC6},
  202. {0xFF, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x09},
  203. {0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xA6},
  204. {0xFF, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x82},
  205. {0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x9F},
  206. {0xFF, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x18},
  207. {0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFF},
  208. {0xFF, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x93},
  209. {0xFF, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x5F},
  210. {0xFF, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x17},
  211. {0xFF, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x3F},
  212. {0xFF, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, 0x9C},
  213. {0xFF, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x2D},
  214. {0xFF, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x3A},
  215. {0xFF, 0x87, 0x65, 0x43, 0x21, 0x00, 0x00, 0xFD},
  216. {0xFF, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x4D},
  217. {0xFF, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0xB1},
  218. {0xFF, 0x98, 0x76, 0x54, 0x32, 0x10, 0x00, 0x4C},
  219. {0xFF, 0x98, 0x76, 0x54, 0x32, 0x00, 0x00, 0xA0},
  220. {0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xED},
  221. {0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x35},
  222. {0xFF, 0xAB, 0xCD, 0xEF, 0x00, 0x00, 0x00, 0xBF},
  223. {0xFF, 0xAB, 0xCD, 0xAB, 0xCD, 0xAB, 0xCD, 0xE8},
  224. {0xFF, 0xAB, 0xCD, 0xAB, 0xCD, 0x00, 0x00, 0x12},
  225. {0xFF, 0xAB, 0xCA, 0xBC, 0xAB, 0xCA, 0xBC, 0x4B},
  226. {0xFF, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x8D},
  227. {0xFF, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0xBE},
  228. {0xFF, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xC9},
  229. {0xFF, 0xBA, 0xBA, 0xBA, 0xBA, 0x00, 0x00, 0x60},
  230. {0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xB4},
  231. {0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x24},
  232. {0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xD4},
  233. {0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0x00, 0x00, 0xAF},
  234. {0xFF, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x74},
  235. {0xFF, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x2B},
  236. {0xFF, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0x06},
  237. {0xFF, 0x12, 0x34, 0x56, 0x78, 0x9A, 0x00, 0x97},
  238. {0xFF, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0xB3},
  239. {0xFF, 0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x51},
  240. {0xFF, 0x12, 0x34, 0x56, 0x78, 0x9A, 0x12, 0xB6},
  241. {0xFF, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0xB3},
  242. {0xFF, 0xCB, 0xA9, 0x87, 0x65, 0x43, 0x21, 0xDD},
  243. {0xFF, 0xCB, 0xA9, 0x87, 0x65, 0x00, 0x00, 0x6E},
  244. {0xFF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x39},
  245. {0xFF, 0xFE, 0xDC, 0xBA, 0x98, 0x00, 0x00, 0x9F},
  246. {0xFF, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x35},
  247. {0xFF, 0xCA, 0xCA, 0xCA, 0xCA, 0x00, 0x00, 0xD2},
  248. {0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x50},
  249. {0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x7E},
  250. {0xFF, 0xCA, 0xFE, 0xCA, 0xFE, 0xCA, 0xFE, 0x31},
  251. {0xFF, 0xCA, 0xFE, 0xCA, 0xFE, 0x00, 0x00, 0x09},
  252. };
  253. const uint8_t uid_list_metakom[][Metakom_DATA_SIZE] = {
  254. {0x00, 0x00, 0x00, 0x00}, // Null bytes
  255. {0xFF, 0xFF, 0xFF, 0xFF}, // Only FF
  256. {0x11, 0x11, 0x11, 0x11}, // Only 11
  257. {0x22, 0x22, 0x22, 0x22}, // Only 22
  258. {0x33, 0x33, 0x33, 0x33}, // Only 33
  259. {0x44, 0x44, 0x44, 0x44}, // Only 44
  260. {0x55, 0x55, 0x55, 0x55}, // Only 55
  261. {0x66, 0x66, 0x66, 0x66}, // Only 66
  262. {0x77, 0x77, 0x77, 0x77}, // Only 77
  263. {0x88, 0x88, 0x88, 0x88}, // Only 88
  264. {0x99, 0x99, 0x99, 0x99}, // Only 99
  265. {0x12, 0x34, 0x56, 0x78}, // Incremental UID
  266. {0x9A, 0x78, 0x56, 0x34}, // Decremental UID
  267. {0x04, 0xd0, 0x9b, 0x0d}, // ??
  268. {0x34, 0x00, 0x29, 0x3d}, // ??
  269. {0x04, 0xdf, 0x00, 0x00}, // ??
  270. {0xCA, 0xCA, 0xCA, 0xCA}, // ??
  271. };
  272. const uint8_t uid_list_cyfral[][Cyfral_DATA_SIZE] = {
  273. {0x00, 0x00}, // Null bytes
  274. {0xFF, 0xFF}, // Only FF
  275. {0x11, 0x11}, // Only 11
  276. {0x22, 0x22}, // Only 22
  277. {0x33, 0x33}, // Only 33
  278. {0x44, 0x44}, // Only 44
  279. {0x55, 0x55}, // Only 55
  280. {0x66, 0x66}, // Only 66
  281. {0x77, 0x77}, // Only 77
  282. {0x88, 0x88}, // Only 88
  283. {0x99, 0x99}, // Only 99
  284. {0x12, 0x34}, // Incremental UID
  285. {0x56, 0x34}, // Decremental UID
  286. {0xCA, 0xCA}, // ??
  287. {0x8E, 0xC9}, // Elevator code
  288. {0x6A, 0x50}, // VERY fresh code from smartkey
  289. };
  290. // ###########################
  291. // ## Rfid_125khz Protocols ##
  292. // ###########################
  293. #define THREEBYTE_DATA_SIZE (3) // H10301
  294. #define FOURBYTE_DATA_SIZE (4) // PAC/Stanley, IoProxXSF, Indala26, Viking, Pyramid, Keri
  295. #define FIVEBYTE_DATA_SIZE (5) // EM4100, Joblotron
  296. #define SIXBYTE_DATA_SIZE (6) // HIDProx, Paradox
  297. #define EIGHTBYTE_DATA_SIZE (8) // Electra, Idteck, Gallagher, Nexwatch
  298. const uint8_t uid_list_5byte[][FIVEBYTE_DATA_SIZE] = {
  299. {0x00, 0x00, 0x00, 0x00, 0x00}, // Null bytes
  300. {0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, // Only FF
  301. {0x11, 0x11, 0x11, 0x11, 0x11}, // Only 11
  302. {0x22, 0x22, 0x22, 0x22, 0x22}, // Only 22
  303. {0x33, 0x33, 0x33, 0x33, 0x33}, // Only 33
  304. {0x44, 0x44, 0x44, 0x44, 0x44}, // Only 44
  305. {0x55, 0x55, 0x55, 0x55, 0x55}, // Only 55
  306. {0x66, 0x66, 0x66, 0x66, 0x66}, // Only 66
  307. {0x77, 0x77, 0x77, 0x77, 0x77}, // Only 77
  308. {0x88, 0x88, 0x88, 0x88, 0x88}, // Only 88
  309. {0x99, 0x99, 0x99, 0x99, 0x99}, // Only 99
  310. {0x12, 0x34, 0x56, 0x78, 0x9A}, // Incremental UID
  311. {0x9A, 0x78, 0x56, 0x34, 0x12}, // Decremental UID
  312. {0x04, 0xd0, 0x9b, 0x0d, 0x6a}, // From arha
  313. {0x34, 0x00, 0x29, 0x3d, 0x9e}, // From arha
  314. {0x04, 0xdf, 0x00, 0x00, 0x01}, // From arha
  315. {0xCA, 0xCA, 0xCA, 0xCA, 0xCA}, // From arha
  316. };
  317. const uint8_t uid_list_6byte[][SIXBYTE_DATA_SIZE] = {
  318. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // Null bytes
  319. {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, // Only FF
  320. {0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, // Only 11
  321. {0x22, 0x22, 0x22, 0x22, 0x22, 0x22}, // Only 22
  322. {0x33, 0x33, 0x33, 0x33, 0x33, 0x33}, // Only 33
  323. {0x44, 0x44, 0x44, 0x44, 0x44, 0x44}, // Only 44
  324. {0x55, 0x55, 0x55, 0x55, 0x55, 0x55}, // Only 55
  325. {0x66, 0x66, 0x66, 0x66, 0x66, 0x66}, // Only 66
  326. {0x77, 0x77, 0x77, 0x77, 0x77, 0x77}, // Only 77
  327. {0x88, 0x88, 0x88, 0x88, 0x88, 0x88}, // Only 88
  328. {0x99, 0x99, 0x99, 0x99, 0x99, 0x99}, // Only 99
  329. {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC}, // Incremental UID
  330. {0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12}, // Decremental UID
  331. {0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA}, // From arha
  332. };
  333. const uint8_t uid_list_4byte[][FOURBYTE_DATA_SIZE] = {
  334. {0x00, 0x00, 0x00, 0x00}, // Null bytes
  335. {0xFF, 0xFF, 0xFF, 0xFF}, // Only FF
  336. {0x11, 0x11, 0x11, 0x11}, // Only 11
  337. {0x22, 0x22, 0x22, 0x22}, // Only 22
  338. {0x33, 0x33, 0x33, 0x33}, // Only 33
  339. {0x44, 0x44, 0x44, 0x44}, // Only 44
  340. {0x55, 0x55, 0x55, 0x55}, // Only 55
  341. {0x66, 0x66, 0x66, 0x66}, // Only 66
  342. {0x77, 0x77, 0x77, 0x77}, // Only 77
  343. {0x88, 0x88, 0x88, 0x88}, // Only 88
  344. {0x99, 0x99, 0x99, 0x99}, // Only 99
  345. {0x12, 0x34, 0x56, 0x78}, // Incremental UID
  346. {0x9A, 0x78, 0x56, 0x34}, // Decremental UID
  347. {0x04, 0xd0, 0x9b, 0x0d}, // From arha
  348. {0x34, 0x00, 0x29, 0x3d}, // From arha
  349. {0x04, 0xdf, 0x00, 0x00}, // From arha
  350. {0xCA, 0xCA, 0xCA, 0xCA}, // From arha
  351. };
  352. const uint8_t uid_list_3byte[][THREEBYTE_DATA_SIZE] = {
  353. {0x00, 0x00, 0x00}, // Null bytes
  354. {0xFF, 0xFF, 0xFF}, // Only FF
  355. {0x11, 0x11, 0x11}, // Only 11
  356. {0x22, 0x22, 0x22}, // Only 22
  357. {0x33, 0x33, 0x33}, // Only 33
  358. {0x44, 0x44, 0x44}, // Only 44
  359. {0x55, 0x55, 0x55}, // Only 55
  360. {0x66, 0x66, 0x66}, // Only 66
  361. {0x77, 0x77, 0x77}, // Only 77
  362. {0x88, 0x88, 0x88}, // Only 88
  363. {0x99, 0x99, 0x99}, // Only 99
  364. {0x12, 0x34, 0x56}, // Incremental UID
  365. {0x56, 0x34, 0x12}, // Decremental UID
  366. {0xCA, 0xCA, 0xCA}, // From arha
  367. };
  368. const uint8_t uid_list_8byte[][EIGHTBYTE_DATA_SIZE] = {
  369. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // Null bytes
  370. {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, // Only FF
  371. {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, // Only 11
  372. {0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22}, // Only 22
  373. {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33}, // Only 33
  374. {0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44}, // Only 44
  375. {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}, // Only 55
  376. {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}, // Only 66
  377. {0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77}, // Only 77
  378. {0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88}, // Only 88
  379. {0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99}, // Only 99
  380. {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF}, // Incremental UID
  381. {0xFF, 0xDE, 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12}, // Decremental UID
  382. {0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA}, // From arha
  383. };
  384. #if defined(RFID_125_PROTOCOL)
  385. const FuzzerProtocol fuzzer_proto_items[] = {
  386. // EM4100
  387. {
  388. .name = "EM4100",
  389. .data_size = FIVEBYTE_DATA_SIZE,
  390. .dict =
  391. {
  392. .val = (const uint8_t*)&uid_list_5byte,
  393. .len = COUNT_OF(uid_list_5byte),
  394. },
  395. },
  396. // HIDProx
  397. {
  398. .name = "HIDProx",
  399. .data_size = SIXBYTE_DATA_SIZE,
  400. .dict =
  401. {
  402. .val = (const uint8_t*)&uid_list_6byte,
  403. .len = COUNT_OF(uid_list_6byte),
  404. },
  405. },
  406. // PAC
  407. {
  408. .name = "PAC/Stanley",
  409. .data_size = FOURBYTE_DATA_SIZE,
  410. .dict =
  411. {
  412. .val = (const uint8_t*)&uid_list_4byte,
  413. .len = COUNT_OF(uid_list_4byte),
  414. },
  415. },
  416. // H10301
  417. {
  418. .name = "H10301",
  419. .data_size = THREEBYTE_DATA_SIZE,
  420. .dict =
  421. {
  422. .val = (const uint8_t*)&uid_list_3byte,
  423. .len = COUNT_OF(uid_list_3byte),
  424. },
  425. },
  426. // IoProxXSF
  427. {
  428. .name = "IoProxXSF",
  429. .data_size = FOURBYTE_DATA_SIZE,
  430. .dict =
  431. {
  432. .val = (const uint8_t*)&uid_list_4byte,
  433. .len = COUNT_OF(uid_list_4byte),
  434. },
  435. },
  436. // Paradox
  437. {
  438. .name = "Paradox",
  439. .data_size = SIXBYTE_DATA_SIZE,
  440. .dict =
  441. {
  442. .val = (const uint8_t*)&uid_list_6byte,
  443. .len = COUNT_OF(uid_list_6byte),
  444. },
  445. },
  446. // Indala26
  447. {
  448. .name = "Indala26",
  449. .data_size = FOURBYTE_DATA_SIZE,
  450. .dict =
  451. {
  452. .val = (const uint8_t*)&uid_list_4byte,
  453. .len = COUNT_OF(uid_list_4byte),
  454. },
  455. },
  456. // Viking
  457. {
  458. .name = "Viking",
  459. .data_size = FOURBYTE_DATA_SIZE,
  460. .dict =
  461. {
  462. .val = (const uint8_t*)&uid_list_4byte,
  463. .len = COUNT_OF(uid_list_4byte),
  464. },
  465. },
  466. // Pyramid
  467. {
  468. .name = "Pyramid",
  469. .data_size = FOURBYTE_DATA_SIZE,
  470. .dict =
  471. {
  472. .val = (const uint8_t*)&uid_list_4byte,
  473. .len = COUNT_OF(uid_list_4byte),
  474. },
  475. },
  476. // Keri
  477. {
  478. .name = "Keri",
  479. .data_size = FOURBYTE_DATA_SIZE,
  480. .dict =
  481. {
  482. .val = (const uint8_t*)&uid_list_4byte,
  483. .len = COUNT_OF(uid_list_4byte),
  484. },
  485. },
  486. // Jablotron
  487. {
  488. .name = "Jablotron",
  489. .data_size = FIVEBYTE_DATA_SIZE,
  490. .dict =
  491. {
  492. .val = (const uint8_t*)&uid_list_5byte,
  493. .len = COUNT_OF(uid_list_5byte),
  494. },
  495. },
  496. // Electra
  497. {
  498. .name = "Electra",
  499. .data_size = EIGHTBYTE_DATA_SIZE,
  500. .dict =
  501. {
  502. .val = (const uint8_t*)&uid_list_8byte,
  503. .len = COUNT_OF(uid_list_8byte),
  504. },
  505. },
  506. // Idteck
  507. {
  508. .name = "Idteck",
  509. .data_size = EIGHTBYTE_DATA_SIZE,
  510. .dict =
  511. {
  512. .val = (const uint8_t*)&uid_list_8byte,
  513. .len = COUNT_OF(uid_list_8byte),
  514. },
  515. },
  516. // Gallagher
  517. {
  518. .name = "Gallagher",
  519. .data_size = EIGHTBYTE_DATA_SIZE,
  520. .dict =
  521. {
  522. .val = (const uint8_t*)&uid_list_8byte,
  523. .len = COUNT_OF(uid_list_8byte),
  524. },
  525. },
  526. // Nexwatch
  527. {
  528. .name = "Nexwatch",
  529. .data_size = EIGHTBYTE_DATA_SIZE,
  530. .dict =
  531. {
  532. .val = (const uint8_t*)&uid_list_8byte,
  533. .len = COUNT_OF(uid_list_8byte),
  534. },
  535. },
  536. };
  537. #else
  538. const FuzzerProtocol fuzzer_proto_items[] = {
  539. // DS1990
  540. {
  541. .name = "DS1990",
  542. .data_size = DS1990_DATA_SIZE,
  543. .dict =
  544. {
  545. .val = (const uint8_t*)&uid_list_ds1990,
  546. .len = COUNT_OF(uid_list_ds1990),
  547. },
  548. },
  549. // Metakom
  550. {
  551. .name = "Metakom",
  552. .data_size = Metakom_DATA_SIZE,
  553. .dict =
  554. {
  555. .val = (const uint8_t*)&uid_list_metakom,
  556. .len = COUNT_OF(uid_list_metakom),
  557. },
  558. },
  559. // Cyfral
  560. {
  561. .name = "Cyfral",
  562. .data_size = Cyfral_DATA_SIZE,
  563. .dict =
  564. {
  565. .val = (const uint8_t*)&uid_list_cyfral,
  566. .len = COUNT_OF(uid_list_cyfral),
  567. },
  568. },
  569. };
  570. #endif
  571. typedef struct {
  572. const char* menu_label;
  573. FuzzerAttackId attack_id;
  574. } FuzzerMenuItems;
  575. const FuzzerMenuItems fuzzer_menu_items[] = {
  576. {"Default Values", FuzzerAttackIdDefaultValues},
  577. #ifdef RFID_125_PROTOCOL
  578. {"BF Customer ID", FuzzerAttackIdBFCustomerID},
  579. #endif
  580. {"Load File", FuzzerAttackIdLoadFile},
  581. {"Load UIDs from file", FuzzerAttackIdLoadFileCustomUids},
  582. };
  583. FuzzerPayload* fuzzer_payload_alloc() {
  584. FuzzerPayload* payload = malloc(sizeof(FuzzerPayload));
  585. payload->data = malloc(sizeof(payload->data[0]) * MAX_PAYLOAD_SIZE);
  586. return payload;
  587. }
  588. void fuzzer_payload_free(FuzzerPayload* payload) {
  589. furi_assert(payload);
  590. if(payload->data) {
  591. free(payload->data);
  592. }
  593. free(payload);
  594. }
  595. const char* fuzzer_proto_get_name(FuzzerProtocolsID index) {
  596. return fuzzer_proto_items[index].name;
  597. }
  598. uint8_t fuzzer_proto_get_count_of_protocols() {
  599. return COUNT_OF(fuzzer_proto_items);
  600. }
  601. uint8_t fuzzer_proto_get_max_data_size() {
  602. return MAX_PAYLOAD_SIZE;
  603. }
  604. uint8_t fuzzer_proto_get_def_emu_time() {
  605. return PROTOCOL_DEF_EMU_TIME;
  606. }
  607. uint8_t fuzzer_proto_get_def_idle_time() {
  608. return PROTOCOL_DEF_IDLE_TIME;
  609. }
  610. const char* fuzzer_proto_get_menu_label(uint8_t index) {
  611. return fuzzer_menu_items[index].menu_label;
  612. }
  613. FuzzerAttackId fuzzer_proto_get_attack_id_by_index(uint8_t index) {
  614. return fuzzer_menu_items[index].attack_id;
  615. }
  616. uint8_t fuzzer_proto_get_count_of_menu_items() {
  617. return COUNT_OF(fuzzer_menu_items);
  618. }