| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #include "mifare_fuzzer_worker.h"
- #include "mifare_fuzzer_i.h"
- /// @brief mifare_fuzzer_worker_alloc()
- /// @return
- MifareFuzzerWorker* mifare_fuzzer_worker_alloc() {
- MifareFuzzerWorker* mifare_fuzzer_worker = malloc(sizeof(MifareFuzzerWorker));
- // Worker thread attributes
- mifare_fuzzer_worker->thread = furi_thread_alloc_ex(
- "MifareFuzzerWorker", 8192, mifare_fuzzer_worker_task, mifare_fuzzer_worker);
- mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
- mifare_fuzzer_worker->nfc = nfc_alloc();
- mifare_fuzzer_worker->nfc_device = nfc_device_alloc();
- return mifare_fuzzer_worker;
- }
- /// @brief mifare_fuzzer_worker_free()
- /// @param mifare_fuzzer_worker
- void mifare_fuzzer_worker_free(MifareFuzzerWorker* mifare_fuzzer_worker) {
- furi_assert(mifare_fuzzer_worker);
- furi_thread_free(mifare_fuzzer_worker->thread);
- nfc_free(mifare_fuzzer_worker->nfc);
- nfc_device_free(mifare_fuzzer_worker->nfc_device);
- free(mifare_fuzzer_worker);
- }
- /// @brief mifare_fuzzer_worker_stop()
- /// @param mifare_fuzzer_worker
- void mifare_fuzzer_worker_stop(MifareFuzzerWorker* mifare_fuzzer_worker) {
- furi_assert(mifare_fuzzer_worker);
- if(mifare_fuzzer_worker->state != MifareFuzzerWorkerStateStop) {
- mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
- furi_thread_join(mifare_fuzzer_worker->thread);
- }
- }
- /// @brief mifare_fuzzer_worker_start()
- /// @param mifare_fuzzer_worker
- void mifare_fuzzer_worker_start(MifareFuzzerWorker* mifare_fuzzer_worker) {
- furi_assert(mifare_fuzzer_worker);
- mifare_fuzzer_worker->state = MifareFuzzerWorkerStateEmulate;
- furi_thread_start(mifare_fuzzer_worker->thread);
- }
- /// @brief mifare_fuzzer_worker_task()
- /// @param context
- /// @return
- int32_t mifare_fuzzer_worker_task(void* context) {
- MifareFuzzerWorker* mifare_fuzzer_worker = context;
- FURI_LOG_D(TAG, "mifare_fuzzer_worker_task()");
- if(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
- NfcDevice* device = mifare_fuzzer_worker->nfc_device;
- NfcProtocol protocol = nfc_device_get_protocol(device);
- FURI_LOG_D(
- TAG,
- "mifare_fuzzer_worker_task() :: Allocating and starting with %s",
- nfc_device_get_protocol_name(protocol));
- mifare_fuzzer_worker->nfc_listener = nfc_listener_alloc(
- mifare_fuzzer_worker->nfc, protocol, nfc_device_get_data(device, protocol));
- nfc_listener_start(mifare_fuzzer_worker->nfc_listener, NULL, NULL);
- FURI_LOG_D(TAG, "mifare_fuzzer_worker_task() :: Emulating...");
- while(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
- furi_delay_ms(50);
- }
- FURI_LOG_D(TAG, "mifare_fuzzer_worker_task() :: Stopping NFC Listener");
- nfc_listener_stop(mifare_fuzzer_worker->nfc_listener);
- nfc_listener_free(mifare_fuzzer_worker->nfc_listener);
- }
- FURI_LOG_D(TAG, "mifare_fuzzer_worker_task() :: Stopping");
- mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
- return 0;
- }
- /// @brief mifare_fuzzer_worker_is_emulating()
- /// @param mifare_fuzzer_worker
- /// @return
- bool mifare_fuzzer_worker_is_emulating(MifareFuzzerWorker* mifare_fuzzer_worker) {
- if(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
- return true;
- }
- return false;
- }
- /// @brief mifare_fuzzer_worker_set_nfc_device()
- /// @param mifare_fuzzer_worker
- /// @param nfc_device
- void mifare_fuzzer_worker_set_nfc_device(
- MifareFuzzerWorker* mifare_fuzzer_worker,
- NfcDevice* nfc_device) {
- FURI_LOG_D(
- TAG,
- "mifare_fuzzer_worker_set_nfc_device() :: Protocol: %s",
- nfc_device_get_protocol_name(nfc_device_get_protocol(nfc_device)));
- mifare_fuzzer_worker->nfc_device = nfc_device;
- }
- /// @brief mifare_fuzzer_worker_get_nfc_device()
- /// @param mifare_fuzzer_worker
- /// @return
- NfcDevice* mifare_fuzzer_worker_get_nfc_device(MifareFuzzerWorker* mifare_fuzzer_worker) {
- return mifare_fuzzer_worker->nfc_device;
- }
- /// @brief mifare_fuzzer_worker_set_nfc_data()
- /// @param mifare_fuzzer_worker
- /// @param nfc_data
- void mifare_fuzzer_worker_set_nfc_data(
- MifareFuzzerWorker* mifare_fuzzer_worker,
- Iso14443_3aData nfc_data) {
- Iso14443_3aData* nfc_14a_data = iso14443_3a_alloc();
- nfc_14a_data->uid_len = nfc_data.uid_len;
- memcpy(nfc_14a_data->uid, nfc_data.uid, nfc_data.uid_len);
- memcpy(nfc_14a_data->atqa, nfc_data.atqa, ATQA_LEN);
- nfc_14a_data->sak = nfc_data.sak;
- FURI_LOG_D(
- TAG,
- "mifare_fuzzer_worker_set_nfc_data() :: Clearing nfc_device and setting Iso14443_3aData");
- nfc_device_clear(mifare_fuzzer_worker->nfc_device);
- nfc_device_set_data(mifare_fuzzer_worker->nfc_device, NfcProtocolIso14443_3a, nfc_14a_data);
- FURI_LOG_D(
- TAG,
- "mifare_fuzzer_worker_set_nfc_data() :: Protocol: %s",
- nfc_device_get_protocol_name(nfc_device_get_protocol(mifare_fuzzer_worker->nfc_device)));
- iso14443_3a_free(nfc_14a_data);
- }
- /// @brief mifare_fuzzer_worker_get_nfc_data()
- /// @param mifare_fuzzer_worker
- /// @return
- Iso14443_3aData mifare_fuzzer_worker_get_nfc_data(MifareFuzzerWorker* mifare_fuzzer_worker) {
- return mifare_fuzzer_worker->nfc_data;
- }
|