Author SHA1 Message Date
ambroserrg fc8cfb4e63 Update documentation for hardware upgrade
Added notices to README.md and CHANGELOG.md about the hardware upgrade
that allows restarting the Ultra by running each RGB color once,
resolving previous firmware modification issues.
2026-03-10 10:29:12 +08:00
GameTec-liveandGitHub 7846bca44b Merge pull request #364 from luu176/main
Add `hf mf autopwn` command with key saving and card dump
2026-02-24 18:35:19 +01:00
GameTec-liveandGitHub 7f71201e16 Merge pull request #363 from WillyJL/feat/rgb-marquee-improvements-upstream
New Symmetrical LED Animation Mode and Improved Minimal Mode
2026-02-19 11:57:05 +01:00
Luu dbc8ce0526 autopwn command added 2026-02-18 22:40:38 +01:00
WillyJL 24259f78b9 Update CHANGELOG.md 2026-02-18 20:58:33 +01:00
WillyJL 4bafe186b3 Symmetric animation mode for boot, shutdown, usb 2026-02-18 20:47:56 +01:00
WillyJL 402665cd75 Minimal shutdown and post-flash boot animations 2026-02-18 20:47:55 +01:00
WillyJL 9f25debe4d Fix rgb_marquee_sweep_from_to() to the left 2026-02-18 20:47:55 +01:00
WillyJL f2225767a2 Give useful names to ledblink*() functions 2026-02-18 20:47:54 +01:00
GameTec-liveandGitHub b108c84af9 Merge pull request #355 from LupusE/main
Fix broken CLI after multiple merges
2026-02-07 23:19:22 +01:00
Benjamin Moeller c7aebdf168 Fix Part2, because of multiple PR used the same ID. 2026-02-07 23:16:08 +01:00
Benjamin MøllerandGitHub 643dd03ff6 Update chameleon_enum.py
ReFix, because of link to firmware/application/src/data_cmd.h
2026-02-07 23:12:22 +01:00
Benjamin Moeller fa35c8ae3f fix double value in unique enumeration 2026-02-07 22:59:43 +01:00
Benjamin Moeller 5ee9254012 Delete invalid escape charater in message 2026-02-07 22:58:44 +01:00
GameTec-liveandGitHub dfa2680d51 Merge pull request #201 from rickNmorty2/enh-clone
Add CLI commands to dump and clone tag
2026-02-07 20:47:38 +01:00
GameTec-liveandGitHub d7ae363099 Merge pull request #343 from LupusE/main
Fix compiler error  `a label can only be part of a statement and a de…
2026-02-07 20:44:36 +01:00
GameTec-liveandGitHub 4d3479943f Merge branch 'main' into enh-clone 2026-02-07 20:43:59 +01:00
GameTec-liveandGitHub 38e3567add Merge pull request #306 from merlokk/lf_read_adc
Adds generic ADC read functionality
2026-02-07 20:42:25 +01:00
GameTec-liveandGitHub 2c7c3eeb4d Merge pull request #352 from suut/fix_bad_missing_tools_warning
Fix bad missing tools warning
2026-02-06 23:58:07 +01:00
Benjamin MøllerandGitHub 7a69e68b3f Update nfc_mf0_ntag.c (braces instead of simicolon)
Changed formatting of the fix for a more union layout, as suggested in the comments.
2026-02-06 22:36:02 +01:00
suut 688bb452aa Fix bad missing tools warning 2026-02-06 21:39:19 +01:00
GameTec-liveandGitHub 9ae0755d80 Merge pull request #332 from RickConsole/fix-hidprox-cli-args
fix hidprox UnboundLocalError cli arg error + hidprox slot set warning
2026-02-06 11:19:48 +01:00
GameTec-liveandGitHub 3755bc24ce Merge pull request #307 from azuwis/hf-14a-config
Add `hf 14a config` to deal with badly configured cards
2026-02-06 11:19:23 +01:00
Benjamin MøllerandGitHub 5d2946ffaa Merge branch 'RfidResearchGroup:main' into main 2026-02-04 13:10:05 +01:00
GameTec-liveandGitHub 41937c52a3 Merge pull request #338 from naaraxi/main
Add Electra intercom tag support with slot auto switch
2026-02-03 22:45:19 +01:00
DXLandGitHub db3e53dd08 Merge pull request #346 from YuyangisCoding/main
fix cli arg parser for FIELD_OFF_DO_RESET
2026-02-03 19:16:59 +08:00
Alexandru MazâluandGitHub 35192d9fc1 Merge branch 'RfidResearchGroup:main' into main 2026-02-03 12:49:45 +02:00
GameTec-liveandGitHub c3a35ffd9b Merge pull request #345 from suut/fix_windows_build
Fix Windows build
2026-02-03 05:54:03 +01:00
yuyangzhang eaa366b453 fix cli arg parser for FIELD_OFF_DO_RESET 2026-02-03 12:16:51 +10:00
suut 23181d84f1 Run GitHub actions 2026-02-03 00:34:05 +01:00
Rick ConsoleandGitHub 997f6bcaab Merge branch 'main' into fix-hidprox-cli-args 2026-02-02 15:58:42 -05:00
suut 6e4a564417 Fix typo in CMakeLists.txt 2026-02-02 21:25:14 +01:00
suut f6ac86cc19 Fix missing bswap64 on Windows 2026-02-02 21:22:01 +01:00
suut f1ae0e0bb0 Disable the "deprecated declaration" warning for MSVC build 2026-02-02 20:35:59 +01:00
Benjamin Moeller 54b302356a Fix compiler error a label can only be part of a statement and a declaration is not a statement 2026-02-02 17:00:21 +01:00
DXLandGitHub eeaca1604f Merge pull request #342 from tommiv/cli-field-off-reset
Added FIELD_OFF_DO_RESET support to cli hf mf econfig
2026-02-02 21:29:05 +08:00
Zhong Jianxin b967bdcd98 Add hf 14a config to deal with badly configured cards 2026-02-02 20:48:03 +08:00
Konstantin Ilchenko 613987b4f4 Shortened set_field_off_do_reset to field_off_do_reset CLI flags 2026-02-02 12:21:39 +02:00
Konstantin Ilchenko c1b9df0e5d Added FIELD_OFF_DO_RESET support to cli hf mf econfig 2026-02-02 12:18:26 +02:00
GameTec-liveandGitHub 6686acf714 Merge pull request #314 from dogty/main
Fixed FAST_READ command and handling of dynamic and static locks for …
2026-02-01 15:06:40 +01:00
GameTec-liveandGitHub d303ddb9c7 Merge pull request #316 from brewt/hidprox-hw-slot-list-formatting
Fix HIDProx formatting with `hw slot list`
2026-02-01 15:05:53 +01:00
GameTec-liveandGitHub ef76f794d0 Merge pull request #341 from MusicLeecher/main
Fix typo in hid prox econfig and add ACTProx HID card type
2026-02-01 15:04:37 +01:00
Alexandru MazâluandGitHub d1ad03a567 Merge branch 'RfidResearchGroup:main' into main 2026-01-30 23:57:30 +02:00
GameTec-liveandGitHub 13d0060ed7 Merge pull request #337 from suut/cli_android_support
TCP transport in the CLI to support Android (Termux)
2026-01-30 21:52:20 +01:00
GameTec-liveandGitHub 055ae2322e Merge branch 'main' into cli_android_support 2026-01-30 21:51:46 +01:00
Gabriel Cardoso 2f86756948 fix tipo in previous commint 2026-01-26 19:10:39 +00:00
Gabriel Cardoso 8ed2677ba2 - added ACT Prox HID format 2026-01-26 19:06:34 +00:00
Gabriel Cardoso 71e45a3194 - fix typo in hidprox econfig set/get function 2026-01-26 18:34:06 +00:00
Alexandru Mazalu c1c2b66882 Add Electra intercom tag support with slot auto switch 2026-01-24 14:45:15 +02:00
DXLandGitHub f2bea7d4ea Merge pull request #299 from xianglin1998/main
Fix some bugs & Performance improvement
2026-01-24 19:44:04 +08:00
dxl ca743273af Added cmd for set mf1 config 'field_off_do_reset' 2026-01-24 19:39:49 +08:00
dxl c0e7cb18f7 Export some functions related to mf1 emulation configuration. 2026-01-24 19:38:36 +08:00
dxl a25b4a8b64 Added MF1 configuration to enable/disable resetting NFC peripherals after leaving RF field. 2026-01-24 19:19:35 +08:00
DXLandGitHub 1543bac108 Merge branch 'RfidResearchGroup:main' into main 2026-01-24 17:54:15 +08:00
suut 8f0a9240ba Fix linter errors 2026-01-24 02:09:48 +01:00
suut b10f4ccb25 Fix build on Darwin 2026-01-24 01:59:03 +01:00
suut 0bc8287f14 Better Android detection 2026-01-24 01:48:03 +01:00
suut ec1bd33b5f Add TCP and Android (Termux) support 2026-01-24 01:30:19 +01:00
GameTec-liveandGitHub 53fe83d81a Merge pull request #331 from suut/issue-322__led_bug_after_battery_check
Fix LEDs being stuck on after battery check
2026-01-23 20:36:10 +01:00
GameTec-liveandGitHub 00de9663f3 Merge pull request #315 from brewt/color-string-em-read-fix
Fix error in `lf em 410x read` from color_string()
2026-01-21 22:56:47 +01:00
noprotoandPhilippe Teuwen 1ee7da63b1 Add initial ULCG/USCUID-UL support 2026-01-19 23:29:05 +01:00
Rick Console b272682546 fix hidprox UnboundLocalError cli arg error 2026-01-19 00:09:33 -05:00
suut 6a43ce6e05 Add information to changelog about the battery check 2026-01-18 17:53:29 +01:00
suut 9e7aa3635f Fix LEDs being stuck on after battery check
Signed-off-by: suut <suut@users.noreply.github.com>
2026-01-18 17:51:23 +01:00
dogty 11bafac176 fix(ntag): Check if the dynamic lock page can be written or not (for NTAG215, NTAG213 and NTAG216) 2025-11-03 14:46:37 +01:00
dogty 64f22dfc53 docs: updated changelog 2025-11-01 18:17:10 +01:00
dogty f6cde1629a fix(ntag): CFGLCK bit is checked before to see if CFG0 and CFG1 are writable even if a password is set (only for NTAG215, NTAG216 and NTAG213) 2025-11-01 18:17:09 +01:00
dogty 335ffee69d fix(ntag): The page lock check doesn't take into account the blocking lock bits (only for NTAG213, NTAG215 and NTA216) 2025-11-01 18:17:09 +01:00
dogty 494d397e7b fix(nfc 14a): The fast read command now handles the last block 2025-11-01 18:14:59 +01:00
dogty afacb2a565 fix: handle REQA and WUP commands for NFC tag 14a 2025-11-01 18:14:35 +01:00
Adrian YeeandGitHub efbf79e497 Fix HIDProx formatting with hw slot list
Fix HIDProx formatting to match the formatting of all other card types.
2025-10-30 16:53:33 -07:00
Adrian YeeandGitHub 7efde79235 Fix error in lf em 410x read from color_string()
Fix bug in color_string() usage introduced by 35d2f40 (bug #295).
2025-10-30 16:41:12 -07:00
GameTec-liveandGitHub 97dfe5b9a4 Merge pull request #295 from mischif/color-string
Use a function for colored strings
2025-10-13 21:44:00 +02:00
Oleg Moiseenko f5bed3c5b1 Adjusts LF ADC raw data processing
Adjusts the bit shift for ADC raw data conversion to refine the value range.
2025-10-09 09:42:43 +03:00
Oleg Moiseenko e2c6bfc9e1 Adds generic ADC read functionality
This introduces a new command to sample the ADC values from the LF antenna and returns them to the user.
2025-10-09 00:32:07 +03:00
Jeremy Brown e1b4218bb3 Fixed unnecessary formatting 2025-10-05 15:42:11 -04:00
dxl dabf1a415f Use a more thorough NFC peripheral reset strategy. 2025-09-23 11:08:27 +08:00
dxl 67357feba0 Parameter error should return STATUS_PAR_ERR 2025-09-23 00:56:55 +08:00
dxl 0858e325e5 Fix the bug where HEX printing of large data packets caused it to freeze. 2025-09-23 00:43:17 +08:00
dxl 1e8758bc1f Fixed bug that caused NFC peripheral devices to always respond with incorrect data due to special condition. 2025-09-23 00:38:01 +08:00
dxl 0448a369a3 Fixed a bug where the parameters were abnormal but the subsequent logic was still executed. 2025-09-23 00:33:05 +08:00
dxl d065a2f18e Improve the efficiency of USB packet reception. 2025-09-23 00:32:17 +08:00
Jeremy Brown d440d98d12 Cleaned up follow-up issues 2025-09-19 01:11:46 -04:00
dxl 50f72653db Fix the bug that cannot be compiled on the MSYS2 platform. 2025-09-19 12:45:32 +08:00
GameTec-liveandGitHub 8998621a47 Merge pull request #294 from RocketGod-git/feature/local-changes
Add option for NFC Field Generator
2025-09-12 19:12:27 +02:00
Jeremy Brown 35d2f40ff5 Switched to function for color stings 2025-09-11 11:52:05 -04:00
RocketGod b3b1fa9c71 Update app_main.c 2025-09-06 21:49:46 -07:00
RocketGod 0aacfcde24 Add option for NFC Field Generator
I've integrated the option for the NFC Field Generator into Python CLI and application files. TODO: GUI integration.
2025-09-06 21:46:22 -07:00
GameTec-liveandGitHub 964904fbfa Merge pull request #285 from jekkos/fix-senested-key-recovery
Fix for mf static nested key recovery
2025-09-02 19:44:25 +02:00
GameTec-liveandGitHub ea2a9410b3 Merge branch 'main' into fix-senested-key-recovery 2025-09-02 19:40:39 +02:00
GameTec_live 212a9ceccd docs: new release 2025-09-02 16:28:53 +02:00
GameTec-liveandGitHub 8e91d02ec2 Merge pull request #287 from jamisonderek/jamisonderek/lf-viking
Add LF Viking support
2025-09-02 16:13:52 +02:00
Derek Jamison 8c670f8554 Add LF Viking support 2025-08-29 11:00:02 -04:00
jekkos 62e904f114 Fix for static nested key recovery
When runnin static nested recovery, we run into a sector auth faild
error that stops the recovery process. Add a try/execpt handler so we
can continue to try all possibitlities
2025-08-28 21:55:06 +02:00
GameTec-liveandGitHub 09870c3fc5 Merge pull request #276 from Foxushka/ultralight-key-log
Mifare Ultralight key logger from reader
2025-08-19 19:59:39 +02:00
GameTec-liveandGitHub 13432c9080 Merge pull request #266 from azuwis/hardnested-execute-tool
Use execute_tool to simplify running hardnested tool
2025-08-19 11:42:35 +02:00
GameTec-liveandGitHub 7907efc852 Merge pull request #281 from taichunmin/cmd2015
fix error response of cmd MF1_CHECK_KEYS_ON_BLOCK
2025-08-14 11:16:44 +02:00
GameTec-liveandGitHub 4c1096d1b6 Merge pull request #239 from taichunmin/mfkey32
`hf mf elog --decrypt` skip records with found keys
2025-08-14 11:07:50 +02:00
GameTec-liveandGitHub 039c54a62f Merge pull request #279 from TeCHiScy/hidcopy
feat: offline HIDProx tag copy
2025-08-14 07:25:30 +02:00
GameTec-liveandGitHub 27e7d504c6 Merge pull request #275 from unkernet/python_39
Restore Python 3.9 compatibility for Chameleon CLI
2025-08-13 21:59:32 +02:00
taichunmin 06a873fca4 fix linter 2025-08-13 00:51:16 +08:00
taichunmin c396d06baa hf mf elog --decrypt skip records with found keys 2025-08-12 04:17:42 +08:00
taichunmin 234eeaafad fix error response of cmd MF1_CHECK_KEYS_ON_BLOCK 2025-08-12 04:15:19 +08:00
GameTec-liveandGitHub e12a116dea Merge pull request #280 from RfidResearchGroup/uv-pyrefly-contribution-guidelines
Add formatter and linter
2025-08-11 22:00:56 +02:00
GameTec_live b153212350 fix: links 2025-08-11 21:49:43 +02:00
GameTec_live 251804077d feat: pyrefly, uv, guidelines 2025-08-11 21:43:23 +02:00
GameTec-liveandGitHub 76f451fd8e Merge pull request #273 from Foxushka/bump-max-data-length
Bump NETDATA_MAX_DATA_LENGTH from 512 to 4096
2025-08-11 21:01:48 +02:00
TeCHiScy b4c1c63698 feat: offline HIDProx tag copy
- refines comments
- use unified code for `lf tag not found` error
- merge lf_em410x_data.h & lf_hidprox_data.h, remove unused macros
- split btn_fn_copy_ic_uid as btn_fn_copy_lf & btn_fn_copy_hf
- fixes offline em410x tag copy not working
- fixes conflict SAADC usage between battery level service & lf fsk demodulator
2025-08-11 21:01:04 +08:00
TeCHiScy 584284c5d5 chore: remove unused wait_end param in request_timeslot 2025-08-11 20:51:28 +08:00
TeCHiScy a1f6a615b9 chore: update wiegand format reference 2025-08-11 20:41:27 +08:00
TeCHiScy f2a398d43c chore: rename functions to keep naming style consistency 2025-08-11 20:37:08 +08:00
Foxushka dc28a82b19 Mifare Ultralight key logger from reader 2025-08-10 21:39:08 +03:00
unkernet 89e098c773 Make CLI compatible with Python 3.9
- Replace Python 3.10+ type hint syntax (`int | None`) with  `Union[int, None]`.
- Add explicit `byteorder='big'` argument to all `int.from_bytes()` calls.
2025-08-10 14:44:40 +07:00
Foxushka d95112f821 Bump NETDATA_MAX_DATA_LENGTH from 512 to 4096
USB + BLE are tested
Closes #272
2025-08-09 17:51:57 +03:00
TeCHiScyandGitHub 098e0a914b feat: add lf HIDProx read, t55xx write, emulate function (#267)
* feat: add lf HIDProx read, t55xx write, emulate function

code quaility:
- consistance: simulation -> emulation, label -> tag
- machine translated unreadable comments are made native

logic:
- newly added cli command includes: `lf hid prox read`, `lf hid prox write`, `lf hid prox econfig`
- machester demodulator is simplified
- various wiegand formats of HIDProx are supported
- goertzel algorithm is used in  HIDProx FSK demod
- lf read is refactored using stream/feed pattern to boost scan speed
- t55xx write is refactored to share same logic between em410x & HIDProx
- lf emulating is refactored to use PWM peripheral, allowing more card type to be added

closes: #212, #210

* chore: remove not implemented wiegand format comments

* fix: build ci

* fix: build ci

* fix: build ci

* fix: build ci
2025-08-04 07:01:53 +02:00
Zhong Jianxin 39270fd09e Use execute_tool to simplify running hardnested tool
Also fix when the dir conatains hardnested is read only, see #261
2025-08-02 10:15:14 +08:00
FoxushkaandGitHub cf00761902 Key recovery via backdoor for static encrypted nonce cards (#263)
* Implement MF1_ENC_NESTED_ACQUIRE in firmware

* Implement MF1_ENC_NESTED_ACQUIRE in software + fix code formatter

* Remove xz and pthreads from sources, use CMake FetchContent

* Update changelog

* lzma.h

* Update CMakeLists.txt

* Update CMakeLists.txt

* Probably fix workflow taking wrong commit for building

* Fix CMake building tools into bin/Debug on Windows

* Added cmd for fetching all slots nicks (without 16 commands)

* Fix type and use temp directory instead cwd (https://github.com/RfidResearchGroup/ChameleonUltra/pull/261)

* Fix endian for mfu_read_emu_counter_data and mfu_write_emu_counter_data

* Fix  --key interpreted as list
2025-08-01 22:12:07 +02:00
unkernetandGitHub 7065011f22 Fix incorrect slot LED indication when switching via CLI (#262) 2025-06-28 14:38:26 +02:00
303d2d31e1 Mifare Ultralight - Shadowmode (#251)
* Adding shadow mode to UltraLight

* Syncing with main repos

---------

Co-authored-by: AbyssAndromalius <abyss@barbed.fr>
2025-04-21 18:04:24 +02:00
zeusricoteandGitHub 2b0d02f12e complete hardnested attack implementation (#254)
* hardnested test fixed, increased timeout on mf1_hard_nested_acquire to fix cmd exec timeout on clone

* hardnested recovery(cli command not yet ready), based in noproto/HardnestedRecovery

* removed compiled binary

* Hardnested cli ready

* removed some unnecesary files

* removed unnecesary cached files

* cmake now builds hardnested too

* removed license.md

* added liblzma source(should fix checks not passing)

* i missed a line

* trimmed xz sources

* cmake now links local liblzma.a

* third try(warning solved)

* cmake now builds and links correcctly liblzma.a

* xz-5.8.1 vfolder renamed to xz

* fixed paths

* runner test

* removed wrong placed check

* disable landlock under windows

* missing files

* missing files

* windows strtok fix

* corrected lzma path under windows

* fix

* set release config for liblzma

* corrected path

* trailing_zeros

* msclock

* msclock integer issue

* msclock missing header

* fallback if not using msvc

* deleted include by accident

* revert clock change

* change custom target for custom command

* windows fmemopen implementation

* wrong path

* wrong name

* use fmemopen only when not using msvc

* use fmemopen.h when building on windows, non msvc

* re-add static link

* wrong filename

* pthread handling for mingw(proxspace)

* cleanup
2025-04-18 23:53:25 +02:00
GameTec-liveandGitHub d4e27b6eee Merge pull request #250 from ChameleonUltra/pr-merge
Fireman fork pr merge
2025-04-06 13:56:35 +02:00
GameTec_live be7a8539f6 chore: lets not break niels code 2025-04-06 13:48:30 +02:00
GameTec_live 5b670e133f doc: docs repo 2025-04-06 13:40:47 +02:00
GameTec_live a8f7c9d0ff fix: missed them lol 2025-04-06 13:36:30 +02:00
GameTec_live 961e386df6 feat: make ready for pr to upstream 2025-04-06 13:36:22 +02:00
GameTec_live e99f8dbd0e Merge remote-tracking branch 'upstream/main' into pr-merge 2025-04-06 13:28:06 +02:00
Philippe TeuwenandGitHub ed53e17d08 Merge pull request #248 from nieldk/main
Update chameleon_cli_unit.py
2025-04-03 17:26:50 +02:00
Niel NielsenandGitHub 63bd0cb22e Update chameleon_cli_unit.py
Defined a working function load_key_file(import_key, keys) for command hf mf fchk  --key

function  load_dic_file(import_dic, keys) is empty for now, to prevent an error when executing hf mf fchk  --dic
2025-04-03 13:55:38 +02:00
dxl e4648b593d fix workflow <on_push> download-artifact using 'name' instead of 'pattern' resulted in non working. 2025-04-02 13:43:21 +08:00
dxl 5784966c3a cmake_minimum_required from 3.1 updated to 3.5 2025-04-02 13:23:53 +08:00
dxl dd688e7b3f Fix workflow artifact conflict 409-Error
By: https://github.com/ChameleonUltra/ChameleonUltra/commit/18d725b9c3156f623d1abaeef5e4b34d5becbdbd
2025-04-02 13:19:35 +08:00
dxl 8bb60d15f5 Fix workflow no working. <upload-artifact> updated to v4
See: https://github.com/actions/upload-artifact/issues/635
2025-04-02 12:38:42 +08:00
dxl 3f6f5ac9c1 Hardnested nonces acquire implemented. 2025-04-02 12:32:27 +08:00
Benjamin MøllerandGitHub 153029a0f1 Fix --dict and hw slot list (#5)
* Fix for --dict and hw slot list

* Fix for --dict and hw slot list (for hf and lf)
2025-02-13 15:42:31 +01:00
GameTec-liveandGitHub 84f7d8201b Merge pull request #7 from taichunmin/docker-compose
Added docker-compose.yml to build firmware in local docker
2025-02-13 14:28:41 +01:00
taichunmin 7f8242cf98 Added docker-compose.yml to build firmware in local docker 2025-02-13 15:48:11 +08:00
GameTec-liveandGitHub 5de83ab1db Deploy wiki to pages
Wiki to GitHub pages
2025-02-12 19:59:28 +01:00
GameTec_live 877e7dae25 fix: hopefully fix reminder workflow 2025-02-09 15:02:19 +01:00
GameTec_live 9cd3dcabfd feat: add workflow 2025-02-09 13:31:32 +01:00
GameTec-liveandGitHub 959de63747 feat: move docs to wiki and add proper gitignore
Move docs to wiki
2025-02-09 09:29:06 +01:00
GameTec_live 0b1f5a6919 fix: update readme 2025-02-09 09:11:05 +01:00
GameTec_live e91be07510 feat: moved docs to wiki and added useful gitignore 2025-02-09 08:54:40 +01:00
GameTec-liveandGitHub 93c51eb9da fix: use pattern instead of name (as stated in docs *facepalm*) 2025-02-08 18:38:10 +01:00
GameTec_live 6831b77570 fix: should probably pass the token 2025-02-08 18:32:51 +01:00
GameTec_live 03710c715d fix: use pattern instead of name (as stated in docs *facepalm*) 2025-02-08 18:26:07 +01:00
GameTec-liveandGitHub e23633ca86 fix: Cicd fixes and migrate everything to v4 2025-02-08 18:18:07 +01:00
GameTec_live 3926f13bba fix: use github script for a reminder and only do it for first time contributors 2025-02-08 18:06:51 +01:00
GameTec_live 18d725b9c3 fix: migrate over to v4 using wildcard download 2025-02-08 17:54:55 +01:00
GameTec_live f1ff9a331f fix: try naming it differently? 2025-02-08 17:46:47 +01:00
GameTec_live 4ee23b9e3b fix: log into docker before pulling 2025-02-08 17:41:41 +01:00
GameTec-liveandGitHub 91ec63c8b7 fix: bump upload artifact version 2025-02-08 17:23:29 +01:00
GameTec_live cb0320666d fix: bump upload artifact version 2025-02-08 17:14:36 +01:00
GameTec-liveandGitHub f87cab7730 Update README.md 2025-02-08 17:06:18 +01:00
dxl c68ea99f87 Merge branch 'main' of https://github.com/RfidResearchGroup/ChameleonUltra 2025-01-17 12:46:13 +08:00
dxl 6439b25500 Fix the issue where compiling on Linux does not link to the pthread library. 2025-01-17 12:44:04 +08:00
Philippe TeuwenandGitHub d6c106f455 Merge pull request #221 from Dmytro02/fix-LF-emulation
fix-LF-emulation
2025-01-14 19:54:01 +01:00
Dmytro Klishchevskyi c7d6224b78 cleanup 2025-01-14 19:39:21 +01:00
Sibachir Ahmed-YanisandGitHub 8a797b8a16 Adding Authorized Distributors TechSecurityTools (#207)
* Adding Authorized Distributors TechSecurityTools

- Merged By DXL
- The authenticity of the authorization has been confirmed with RRG.
2024-08-28 09:37:49 +08:00
DXLandGitHub 4760d91b5d Merge pull request #230 from whywilson/main
Update MTools BLE documentation
2024-08-27 09:40:25 +08:00
mtoolstec 787e86a01a Update MTools BLE documentation 2024-08-25 16:34:02 +08:00
Dmytro Klishchevskyi 6145f5c99b fix typo 2024-08-06 14:02:25 +02:00
Dmytro Klishchevskyi b655c7351a fix LF emulation; make continuous sending ID; increase field sensing period 2024-08-05 21:30:55 +02:00
dxl c771ae937b docs updated. 2024-07-16 12:48:20 +08:00
dxl a4b3adad48 Reuse the 'STATUS_PAR_ERR' & Add an interface
1. Added 'cmd_processor_mf0_ntag_get_emu_page_count' interface to get available page count of mf0.
2. We can reuse the 'STATUS_PAR_ERR', and we can delete repeated cmd 'STATUS_INVALID_PARAMS'.
2024-07-16 12:47:47 +08:00
dxl e98bb76926 Add 'MF0_NTAG_GET_PAGE_COUNT' for get available page count of mf0. 2024-07-16 12:43:16 +08:00
dxl e6526bc258 The default initialization card slot 2 is an MF0 instead of MF1. 2024-07-16 10:19:51 +08:00
DXLandGitHub ac1c0119fc Merge pull request #215 from turbocool3r/main
Add support for Ultralight emulation.
2024-07-16 09:52:05 +08:00
turbocool3r 25a1230865 Fix hf mfu econfig not working for NTAG 210/212. 2024-07-15 03:18:14 +03:00
turbocool3r 384490e231 Fix an old bug in hf mfu econfig that prevented anticollision resolution data from being updated sometimes. 2024-07-15 03:17:25 +03:00
turbocool3r d1c9b4b21b Fix hf mfu e(r|w)cnt commands switching device into reader mode. 2024-07-15 02:35:37 +03:00
turbocool3r f1e2250178 Add support for NTAG 210/212. 2024-07-15 02:34:45 +03:00
turbocool3r 82c46b3c47 Fix a bug breaking NTAG counter access by NFC commands. 2024-07-15 02:14:02 +03:00
turbocool3r a428377878 Make hf mfu dump command properly detect card size. 2024-07-15 01:19:59 +03:00
turbocool3r 1e3533a65a Fix unsuccessful auth attempts counting. 2024-07-09 22:35:03 +03:00
turbocool3r a8c2fc1441 Make answers to commands on errors similar to real cards.
NAKs returned by both Ultralight and NTAG cards were 0 in my tests and Ultralights didn't respond to invalid commands at all.
2024-07-09 21:56:09 +03:00
turbocool3r 3fe0a5f79d Fix hf mfu rcnt command. 2024-07-09 21:30:52 +03:00
turbocool3r 607df41bca Add a command to reset MF0 / NTAG unsuccessful auth counter. 2024-07-09 21:30:27 +03:00
turbocool3r 202f5d3884 Fix internal MF0 / NTAG counter indexing. 2024-07-09 21:28:56 +03:00
turbocool3r cf109f94b2 Detect NAKs in hf mfu wrpg command. 2024-07-09 21:09:16 +03:00
turbocool3r dd42e7e7dd NTAG tags refer to their only counter by index 2. 2024-07-09 21:05:11 +03:00
turbocool3r a52bb989e9 Fix hf mfu dump command not running without file. 2024-07-09 21:03:57 +03:00
turbocool3r 09310dcacb Account for the second locking bit when checking OTP lock status. 2024-07-09 18:35:45 +03:00
turbocool3r 0ce920cfcc Add hf mfu ercnt/ewcnt commands for reading and writing emulator's counters. 2024-07-09 17:11:42 +03:00
turbocool3r ff58d97dd9 Add hf mfu esave command. 2024-07-09 00:58:07 +03:00
turbocool3r b5259c313a Add --type argument to eload and dump commands. 2024-07-09 00:57:43 +03:00
turbocool3r b7a6a3fc07 Remove amiibo-specific code. 2024-07-08 01:58:50 +03:00
turbocool3r 103d51ce64 Properly detect auth failures in hf mfu subcommands. 2024-07-08 01:04:23 +03:00
turbocool3r 4aa6b3c0fc Fix file output in hf mfu dump command. 2024-07-08 00:52:39 +03:00
turbocool3r bdcf5d5851 Fix hf mfu rdpg not exiting when data is not properly aligned. 2024-07-08 00:34:08 +03:00
turbocool3r 37f2b0783c Add hf mfu eload command. 2024-07-08 00:33:33 +03:00
turbocool3r 163b41b95b Fix commands for r/w into UL / NTAG emulator memory. 2024-07-08 00:31:20 +03:00
turbocool3r 1bf23cdf08 Make MFUAuthArgsUnit parse key and swap arguments automatically. 2024-07-07 20:09:25 +03:00
turbocool3r 3ff1c785a5 Fix integer conversion bugs related to nfc_tag_mf0_ntag_get_nr_pages_by_tag_type. 2024-07-07 02:09:48 +03:00
turbocool3r cb41662ea4 Add support for CHECK_TEARING_EVENT command. 2024-07-07 02:03:58 +03:00
turbocool3r b5d6ad8858 Prevent sending NACKs when retrieving counter data for unsupported tags. 2024-07-07 01:39:53 +03:00
turbocool3r ddcffba26f Fix a bug in hf mfu signature command. 2024-07-07 01:14:43 +03:00
turbocool3r 94474ee8ae Remove the MF0ICU1 test entry in factory data initialization. 2024-07-05 16:32:40 +03:00
turbocool3r 780e594fe2 Handle VCSL command in a separate function. 2024-07-05 16:31:18 +03:00
turbocool3r 297cb061cb Add support for custom version and signature data for MF0 / NTAG emulator. 2024-07-05 16:30:38 +03:00
turbocool3r 18d5da09dd Add hf mfu signature command. 2024-07-05 16:04:16 +03:00
turbocool3r efeaf1d95c Add support for VCSL command. 2024-07-05 03:43:08 +03:00
turbocool3r eafa14e4e5 Add hf mfu eview command. 2024-07-05 03:32:23 +03:00
turbocool3r 9488127531 Add commands for reading and writing to/from MF0/NTAG emulator memory. 2024-07-05 02:58:15 +03:00
turbocool3r 76b36dd1be Document MF0/NTAG UID magic mode commands. 2024-07-05 01:52:40 +03:00
turbocool3r 2da6d35784 Improvements to MFU / NTAG cli commands.
Added `wrbl` and `rcnt` commands for writing blocks and reading counters. Added `-P` parameter to all commands that may need it to allow prior auth with a 4-byte password. `dump` command now dumps all pages until it fails rather than just the first 16 pages when no `-q` parameter is provided. Added `version` command to allow requesting version bytes.
2024-07-03 03:04:25 +03:00
turbocool3r a283795f07 Fix NTAG INCR_CNT command byte order. 2024-07-03 02:45:45 +03:00
turbocool3r 1c14fc00b2 NTAG counter and access fixes. 2024-07-03 02:22:56 +03:00
turbocool3r 9e25b0913f Fix mirroring bug. 2024-07-03 01:07:09 +03:00
turbocool3r 3af3488b60 Add mirroring support for NTAG. 2024-06-30 20:58:19 +03:00
turbocool3r 1f1b4fd880 Fix logging for GET_VERSION command. 2024-06-29 21:33:15 +03:00
turbocool3r 41e6a70d7c Changelog entry. 2024-06-19 23:08:55 +03:00
turbocool3r 2447c79963 Fix handling of R/O pages and CFGLCK. 2024-06-19 22:55:44 +03:00
turbocool3r 2acd42acd2 Fix maximum block size. 2024-06-19 22:55:44 +03:00
turbocool3r 8ddf2eaaee Respect access rules when reading/writing MF0/NTAG. 2024-06-19 22:55:44 +03:00
turbocool3r 59f2611fea Insert some assertions and locking. 2024-06-19 22:55:44 +03:00
turbocool3r 80a14a1392 Fix factory initialization for MF0/NTAG. 2024-06-19 22:55:44 +03:00
turbocool3r 8bfad8b9ab Small improvements to the tx buffer handling. 2024-06-19 22:55:44 +03:00
turbocool3r 95d69b142b Proper password authentication. 2024-06-19 22:55:44 +03:00
turbocool3r 1e18bd6c60 Properly implement fast reads. 2024-06-19 22:55:44 +03:00
turbocool3r 56c4647afb Make MF0/NTAG tx buffer size appropriate for large NTAG fast reads. 2024-06-19 22:55:44 +03:00
turbocool3r af5670fa44 Respect PROT bit in the ACCESS byte. 2024-06-19 22:55:44 +03:00
turbocool3r eee3666790 Fix a bug that made Ultralight EV1 and NTAG unreadable. 2024-06-19 22:55:44 +03:00
turbocool3r 89dc073a8b Support reading and incrementing counters. 2024-06-19 22:55:44 +03:00
turbocool3r 4728573595 Fix CMD_INCR_CNT value. 2024-06-19 22:55:43 +03:00
turbocool3r f7460cef42 Add the remaining tags to the tag map. 2024-06-19 22:55:43 +03:00
turbocool3r 34eabd7db3 Fix stack overflow on slot init. 2024-06-19 22:55:43 +03:00
turbocool3r 248f3b2839 Add support for Ultralight emulation.
This version only emulates MF0ICU1 properly.
2024-06-19 22:55:43 +03:00
DXLandGitHub 3cadd47eeb Specify the Python version used by workflow as 3.12 (#217) 2024-06-13 16:24:19 +08:00
0bc01f565a Add CLI view commands to display memory content (#208)
* Add utility to print memory dump (xxd like)

* Add CLI eview. Dump emulation memory data

* Add CLI view. Display content from tag memory or dump file

---------

Co-authored-by: marfo <marfo@localhost.localdomain>
2024-04-24 10:51:11 +08:00
you fcbf474e19 Update CHANGELOG.md 2024-04-24 00:50:17 +02:00
you 0686d0816d Fix default ACL (suggested by @taichunmin) 2024-04-24 00:42:33 +02:00
you 4568e8fd57 Fix dump and clone commands accordingly to PR#199 2024-04-24 00:41:13 +02:00
you 6ddda661d8 tosqash 2024-04-23 23:45:13 +02:00
you 7912bde311 Merge branch 'main' of https://github.com/RfidResearchGroup/ChameleonUltra into enh-clone 2024-04-23 23:34:17 +02:00
Oleg MoiseenkoandGitHub 767f6e2f7e Update logging in the vs code in development.md 2024-04-01 18:46:20 +03:00
Peter-Simon DieterichandGitHub 22b7898f20 cli: Fix cmd_parameter generation for nested for python 3.9 (#205)
Signed-off-by: Peter-Simon Dieterich <peter-simon.dieterich@vaillant-group.com>
2024-03-13 18:22:17 +08:00
戴均民andGitHub c1eb213d4a Added command to check keys of multiple sectors at once (#199)
thx @taichunmin
2024-03-07 15:07:12 +08:00
Peter-Simon DieterichandGitHub 1608892140 cli: fix unused target key type parameter for nested (#204)
* cli: fix unused target key type parameter for nested
* Added entry to CHANGELOG.md
2024-03-07 14:57:11 +08:00
you 8a02d6f4f8 Add CLI command to clone a MF tag from file (bin/hex) 2024-01-28 17:55:01 +01:00
you a1a49ed953 Add CLI command to dump a MF tag to file (bin/hex) 2024-01-28 17:54:20 +01:00
you 3e6a2b505b Add fchk argument to export found keys to file 2024-01-28 17:48:18 +01:00
taichunmin e470958373 Added command to check keys of multiple sectors at once 2024-01-20 17:25:05 +08:00
3d8451a133 Docs for cli on MacOS (#190)
Co-authored-by: “bring42” <“Benno657@student.liu.se”>
2024-01-17 18:40:29 +08:00
Philippe TeuwenandGitHub fefcde542b Merge pull request #189 from p-l-/enh-hf-mf-elog-skip-used-items
CLI: skip already used items in `hf mf elog --decrypt`
2023-12-20 23:20:37 +01:00
Pierre Lalet e3cbd598ec CLI: skip already used items in hf mf elog --decrypt
This (often largely) improves the speed of the decrypt process. On my
laptop, with the same logs (37 records for one block and 37 records
for another block), here are the performances, as measuerd using a
simple command:

```bash
time echo -e "hw connect\nhf mf elog --decrypt\nhw disconnect" | ./chameleon_cli_main.py
```

- Before parallelisation (#187): 14m59,277s
- With parallelisation (current main): 6m13,513s
- With item skipping (this PR): 2m42,491s
2023-12-20 22:37:47 +01:00
Philippe TeuwenandGitHub 0124709067 Merge pull request #187 from p-l-/enh-hf-mf-elog-parallel
CLI: parallelize mfkey32v2 processes
2023-12-20 16:29:08 +01:00
Pierre Lalet cc674f1669 CLI: fix mfkey32v2 call for Windows 2023-12-20 16:20:12 +01:00
Pierre Lalet 42317a7bc4 CLI: parallelize mfkey32v2 processes 2023-12-20 16:20:12 +01:00
GameTec-liveandGitHub 05ea03d31c doc: Add box net and vectortraced boxart and troubleshooting entry (#186)
* doc: Add box net and vectortraced boxart
* doc: add troubleshooting entry and python notice
* fix: compress images
2023-12-05 16:06:56 +08:00
dxl 7fdb358e8b Merge branch 'main' of https://github.com/RfidResearchGroup/ChameleonUltra 2023-11-15 18:53:42 +08:00
dxl 3b14270976 Staticnested results quite poor compared to pm3 implem #183 2023-11-15 18:53:02 +08:00
Philippe Teuwen af91ddcda9 CLI: Do not execute a command if help is printed
Previously, for example `hf 14a raw -b 7 -d 26 -h` was printing help but it was also executing the command.
2023-11-15 09:44:37 +01:00
Philippe TeuwenandGitHub 5b67a895eb Merge pull request #180 from taichunmin/taichunmin
Added support for mifare classic value block operations
2023-11-15 09:38:45 +01:00
Philippe TeuwenandGitHub 494735a07d Merge pull request #184 from GameTec-live/main
doc: Add CUGUI troubleshooting entry
2023-11-15 08:35:55 +01:00
GameTec_live 12fd5f23f7 doc: Add CUGUI troubleshooting entry 2023-11-14 19:43:55 +01:00
taichunmin e79568298f Added support for mifare classic value block operations 2023-11-13 23:38:56 +08:00
Philippe Teuwen 4d670f051a Be robust to some argparse string variants 2023-11-06 22:45:48 +01:00
Philippe Teuwen ecf3c06886 add regression tests 2023-10-25 00:32:31 +02:00
Philippe Teuwen 7d851d2a22 reorganize a bit cli to allow autotests 2023-10-24 23:46:34 +02:00
Philippe Teuwen d973ee6671 add hw disconnect (for autotests) 2023-10-24 23:45:42 +02:00
Philippe Teuwen ece5e79060 typechecking fixes 2023-10-24 23:44:56 +02:00
Philippe Teuwen d77e166249 pep287 2023-10-24 00:57:44 +02:00
Philippe Teuwen ff3df15278 misc lint 2023-10-23 23:57:23 +02:00
Philippe Teuwen 55cd19f0db Move bins to simplify pyinstaller paths 2023-10-23 22:54:37 +02:00
Philippe Teuwen bb47bd5159 make style 2023-10-23 19:16:42 +02:00
Philippe Teuwen 7ea8cc1f98 check_file_encoding 2023-10-23 19:12:42 +02:00
Philippe Teuwen 55228d1489 fix encoding 2023-10-23 17:40:25 +02:00
Philippe Teuwen 299562bbdd changelog 2023-10-21 10:55:39 +02:00
Philippe TeuwenandGitHub c2f0f0d408 Merge pull request #178 from taichunmin/taichunmin
Change git version to version tag instead of dev tag.
2023-10-21 10:55:05 +02:00
taichunmin c91514efa1 Change git version to version tag instead of dev tag. 2023-10-21 16:40:15 +08:00
dxl 74f4eb8822 Changelog updated. 2023-10-19 22:54:47 +08:00
dxl f04943f59b Merge remote-tracking branch 'origin/main' 2023-10-19 22:51:55 +08:00
dxl 771e6ded54 Fixed a bug that will not reset the state machine after DEC. 2023-10-19 22:51:02 +08:00
dxl ab07dff904 Function has been renamed 2023-10-19 22:50:08 +08:00
dxl 980960c43d Fixed a bug that affected 14A simulation. 2023-10-19 22:48:53 +08:00
Philippe Teuwen 6e19d078f4 oops, missed sth when solving the merge conflicts 2023-10-17 23:56:28 +02:00
Philippe TeuwenandGitHub eac246fc0c Merge pull request #174 from augustozanellato/ats_error_fixes
Fix ATS handling in tags that NAK RATS
2023-10-17 23:52:50 +02:00
Philippe TeuwenandGitHub 83583075c4 Merge branch 'main' into ats_error_fixes 2023-10-17 23:52:35 +02:00
Philippe Teuwen fa0754aed2 cli: make status an enum. rename some status for consistency 2023-10-17 23:43:25 +02:00
Augusto Zanellato aa3fe711af Fix hf 14a raw always raising AttributeError 2023-10-17 23:33:19 +02:00
Augusto Zanellato cb1878440d Fix ATS handling in tags that NAK RATS
pcd_14a_reader_ats_request didn't check for NAK so in case the tag NAKd
the RATS it would return a zero length ATS which would cause an
underflow in pcd_14a_reader_scan_once, that in turn resulted in
HF_ERR_ATS being returned due to an invalid ATS length.
2023-10-17 23:32:51 +02:00
Philippe Teuwen 2beb8f74a3 cli: check if helper tools are available 2023-10-17 22:08:34 +02:00
Philippe Teuwen 82fcc76286 Changed battery level curves based on experimental measures, thanks @spp2000 ! 2023-10-17 21:25:16 +02:00
Philippe Teuwen 652ee4768d doc 2023-10-17 21:19:23 +02:00
dxl 1e134f1bcd ChangeLog update 2023-10-17 16:34:47 +08:00
dxl 15698fb338 Nested(And StaticNested) multithreaded decryption. 2023-10-17 16:34:22 +08:00
dxl 1ec025a24b Merge remote-tracking branch 'origin/main' 2023-10-17 16:30:47 +08:00
dxl 0e3144c994 Fixed bug where the 'i' variable was incorrectly used on printf 2023-10-17 16:25:48 +08:00
Philippe TeuwenandGitHub 363ff4f345 Merge pull request #172 from GameTec-live/main
doc: finally add linux
2023-10-16 21:16:17 +02:00
GameTec_live 070db3d773 fix: escape sequence 2023-10-16 21:09:26 +02:00
GameTec_live 3456d4c15d doc: remove unnescesary cp 2023-10-16 21:09:14 +02:00
GameTec_live d5187d3017 doc: finally add linux 2023-10-16 20:01:42 +02:00
Philippe TeuwenandGitHub 372bcf2460 technical_whitepaper : prevent github hallucinating email addresses 2023-10-15 23:34:51 +02:00
Philippe Teuwen 324dc578e5 cli: prepare comm debug 2023-10-15 01:39:00 +02:00
Philippe Teuwen 830ba98721 cli: move enums to new file 2023-10-15 01:17:34 +02:00
Philippe Teuwen 8ef42c705c cli: hw slot list: avoid unnecessary slot changes 2023-10-15 01:17:34 +02:00
Philippe Teuwen 43a6e822e6 cli: move color shortcuts to chameleon_util 2023-10-15 01:17:29 +02:00
Philippe TeuwenandGitHub f9be867029 Merge pull request #170 from augustozanellato/fix_factory_reset
Fix factory reset hang/wdt reset
2023-10-13 09:13:15 +02:00
Augusto Zanellato b35c1fadd9 Add changelog entry 2023-10-13 00:28:44 +02:00
Augusto Zanellato c1c10e9ba3 Fix factory reset hang/wdt reset
fds_util event handler was ignoring all the events related to
peer_manager files and that was causing a deadlock while waiting for
record deletion that in turn caused a wdt reset, usually this resulted in
a partially done factory reset.
The fix adds a `ignore_pm` flag to op_info struct that gets cleared by
fds_wipe allowing for a true reset to happen.
2023-10-13 00:26:32 +02:00
Philippe Teuwen 15bcae78be cli: atqa disambiguation 2023-10-12 20:39:18 +02:00
Philippe Teuwen 446b57e89f Changed fds_write_sync to take length in bytes instead of next multiple of 4 2023-10-11 23:08:25 +02:00
Philippe Teuwen 6236fdd4cf just in case, turn tag field off on exiting reader mode 2023-10-11 19:32:37 +02:00
Philippe Teuwen bac3552d85 fix field LED in LF reading and in HF cloning 2023-10-11 19:22:29 +02:00
Philippe Teuwen ea6576c567 renaming of slot into cloned when having cloned an ID/UID with a button, cf issue #166. Removed the goto 2023-10-11 18:49:59 +02:00
Philippe Teuwen 4fe9e1ea5b docs 2023-10-11 10:28:45 +02:00
Philippe Teuwen ffb6e00f1e fix spurious LED in battery level, assign battery level to long press B 2023-10-10 20:25:17 +02:00
Philippe Teuwen c4aef7e373 Changed hw slot list to display LF ID & HF anticol data, and names in the --short version too 2023-10-10 20:10:18 +02:00
Philippe Teuwen f512cbdbee cli: fix hw slot init 2023-10-10 10:57:53 +02:00
Philippe Teuwen f93418b7d8 cli: skip empty lines when several cmd lines are copy/pasted 2023-10-10 10:57:26 +02:00
Philippe Teuwen 89aa8c48f1 remove NRF_LOG_UART_ON_SWO_ENABLED committed by mistake 2023-10-10 10:56:49 +02:00
Philippe TeuwenandGitHub ab7592e7be Merge pull request #168 from RfidResearchGroup/rework_cli
Rework cli
2023-10-10 02:03:37 +02:00
dxl c9e4507d8f Use fastselect to improve the success rate of decryption. 2023-10-09 15:18:59 +08:00
dxl a9f775ff19 14443-a fast select implemented. 2023-10-09 15:17:54 +08:00
214 changed files with 99905 additions and 6146 deletions
+11 -6
View File
@@ -35,13 +35,18 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Check out the repo
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
ref: ${{ inputs.checkout-sha == null && github.sha || inputs.checkout-sha }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install PyInstaller and client dependencies
run: |
pip3 install pyinstaller
pip3 install -r software/script/requirements.txt
python -m pip install --upgrade pip
pip install pyinstaller
pip install -r software/script/requirements.txt
- name: Run OS specific setup
run: ${{ matrix.pre_command }}
- name: Compile native code
@@ -56,14 +61,14 @@ jobs:
cd software
pyinstaller pyinstaller.spec
- name: Upload built client
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: client-${{ matrix.name }}
path: software/dist/*
- name: Zip up client for release
run: ${{ matrix.bundle_command }}
- name: Upload release artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: release-artifacts
name: release-artifacts-${{ matrix.name }}
path: client-${{ matrix.name }}.zip
+7 -7
View File
@@ -20,7 +20,7 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Check out the repo
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
ref: ${{ inputs.checkout-sha == null && github.sha || inputs.checkout-sha }}
fetch-depth: 0
@@ -54,7 +54,7 @@ jobs:
device_type: [ultra, lite]
steps:
- name: Check out the repo
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
ref: ${{ inputs.checkout-sha == null && github.sha || inputs.checkout-sha }}
fetch-depth: 0
@@ -64,7 +64,7 @@ jobs:
run: |
docker run --rm -v ${PWD}:/workdir -e CURRENT_DEVICE_TYPE=${{ matrix.device_type }} ghcr.io/${repo,,}-fw-builder@${{ needs.build_fw_builder.outputs.image_hash }} firmware/build.sh
- name: Upload built binaries
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.device_type }}-firmware
path: firmware/objects/*.hex
@@ -76,17 +76,17 @@ jobs:
unzip firmware/objects/${{ matrix.device_type }}-dfu-app.zip -d firmware/objects/${{ matrix.device_type }}-dfu-app
unzip firmware/objects/${{ matrix.device_type }}-dfu-full.zip -d firmware/objects/${{ matrix.device_type }}-dfu-full
- name: Upload dfu app image
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.device_type }}-dfu-app
path: firmware/objects/${{ matrix.device_type }}-dfu-app/*
- name: Upload dfu full image
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.device_type }}-dfu-full
path: firmware/objects/${{ matrix.device_type }}-dfu-full/*
- name: Upload release artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: release-artifacts
name: release-artifacts-${{ matrix.device_type }}
path: firmware/objects/*.zip
@@ -0,0 +1,49 @@
name: Deploy wiki to GitHub Pages with Jekyll
on:
push:
branches: ["main"]
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
repository: ${{ github.repository }}.wiki
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Build with Jekyll
uses: actions/jekyll-build-pages@v1
with:
source: ./
destination: ./_site
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
+2 -2
View File
@@ -10,12 +10,12 @@ jobs:
contents: read
uses: ./.github/workflows/build_firmware.yml
with:
checkout-sha: "${{ github.event.pull_request.merge_commit_sha }}"
checkout-sha: "${{ github.event.pull_request.head.sha }}"
client_pipeline:
name: Build Firmware
uses: ./.github/workflows/build_client.yml
with:
checkout-sha: "${{ github.event.pull_request.merge_commit_sha }}"
checkout-sha: "${{ github.event.pull_request.head.sha }}"
comment:
runs-on: ubuntu-latest
name: Comment on PR
+8 -6
View File
@@ -24,11 +24,12 @@ jobs:
- client_pipeline
steps:
- name: Check out the repo
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Download release artifacts
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
name: release-artifacts
pattern: release-artifacts-*
merge-multiple: true
path: release-artifacts
- name: Upload to dev release
uses: softprops/action-gh-release@v1
@@ -60,11 +61,12 @@ jobs:
- client_pipeline
steps:
- name: Check out the repo
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Download release artifacts
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
name: release-artifacts
pattern: release-artifacts-*
merge-multiple: true
path: release-artifacts
- name: Upload to tagged release
uses: softprops/action-gh-release@v1
+56
View File
@@ -0,0 +1,56 @@
name: Lint (pyrefly + ruff)
on:
pull_request:
paths:
- "software/**"
- ".github/workflows/**"
workflow_dispatch:
jobs:
lint:
runs-on: ubuntu-latest
defaults:
run:
shell: bash
working-directory: software
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: "pip"
cache-dependency-path: |
software/pyproject.toml
software/uv.lock
software/script/requirements.txt
- name: Set up uv
uses: astral-sh/setup-uv@v6
- name: Install dependencies with uv (if lockfile present)
if: ${{ hashFiles('software/uv.lock') != '' }}
run: uv sync --dev
- name: Install tools with pip (fallback)
if: ${{ hashFiles('software/uv.lock') == '' }}
run: |
python -m pip install --upgrade pip
# Try project requirements if present
if [ -f script/requirements.txt ]; then pip install -r script/requirements.txt || true; fi
# Ensure ruff and pyrefly are available
pip install ruff pyrefly
- name: Ruff check
run: |
set -e
(uv run ruff --version && uv run ruff check .) || ruff check .
- name: Pyrefly check
run: |
set -e
(uv run pyrefly --help >/dev/null 2>&1 && uv run pyrefly check) || pyrefly check
+709 -4
View File
File diff suppressed because it is too large Load Diff
+47
View File
@@ -3,6 +3,52 @@ All notable changes to this project will be documented in this file.
This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
## [unreleased][unreleased]
- Hardware upgrade: Restarting the Ultra now only requires running each of the three RGB colors once, resolving previous firmware modification issues
- Added commands to dump and clone Mifare tags
- Fix bad missing tools warning (@suut)
- Fix for FAST_READ command for nfc - mf0 tags
- Rewrite of the dynamic and static locks logic for NTAG213, NTAG215 and NTAG216; we shouldn't take into account the block lock bits
- Fixed an issue where we wouldn't be able to change CFG0 and CFG1 for NTAG213, NTAG215 and NTG216 once a password was added even if the cfg bit was reset.
- Fix for static nested key recovery (@jekkos)
- Fix LEDs being stuck on after battery check (@suut)
- Add TCP support for the CLI (@suut)
- Fix build on Android in Termux (@suut)
- Fix the issue where some reader cause CU to enter a strange state (@xianglin1998)
- The transmission performance of USB has been improved (@xianglin1998)
- Added cmd for set mf1 config 'field_off_do_reset' (@xianglin1998)
- Fix Windows build (@suut)
- Added `hf 14a config` to deal with badly configured cards (@azuwis)
- New Symmetrical LED Animation Mode and Improved Minimal Mode (@WillyJL)
## [v2.1.0][2025-09-02]
- Added UV, formatter and linter. Contribution guidelines. (@GameTec-live)
- Extend max packet data size from 512 to 4096 bytes (@Foxushka)
- HID Prox support (@TeCHiScy)
- `hf mf elog --decrypt` skip records with found keys (@taichunmin)
- Added cmd for fetching all slots nicks (@Foxushka)
- Added `hf mf senested` for recovering keys from static encrypted cards via backdoor (https://eprint.iacr.org/2024/1275) (@Foxushka)
- Added cmd for faster bulk key checking on one block (~33 keys per second) (@Foxushka, @taichunmin)
- Added cmd to acquire nonces for static encrypted cards via backdoor (@Foxushka)
- Added `firmware/docker-compose.yml` to build firmware in local docker (@taichunmin)
- Added cmd to acquire nonces for hardnested(Protocol doc need update) (@xianglin1998)
- Added command to check keys of multiple sectors at once (@taichunmin)
- Fixed unused target key type parameter for nested (@petepriority)
- Skip already used items `hf mf elog --decrypt` (@p-l-)
- Parallelize mfkey32v2 processes called from CLI (@p-l-)
- Added support for mifare classic value block operations (@taichunmin)
- Added regression tests (@doegox)
- Changed git version to version tag instead of dev tag (@taichunmin)
- Fixed 14A emulate bug and MF1 emulate bug (@spp2000 and @xianglin1998)
- Fixed `hf 14a raw` command raising `AttributeError` (@augustozanellato)
- Fixed ATS handling in tags that NAK RATS (@augustozanellato)
- Changed battery level curves based on experimental measures (@spp2000)
- Added multithreading on Nested and StaticNested (@xianglin1998)
- Fixed factory reset hanging (@augustozanellato)
- Changed fds_write_sync to take length in bytes instead of next multiple of 4 (@doegox)
- Fixed field LED when LF reading and HF cloning (@doegox)
- Added renaming of slot into "cloned" when having cloned an ID/UID with a button (@doegox)
- Fixed spurious LED in battery level, assigned battery level to long press B (@doegox)
- Changed `hw slot list` to display LF ID & HF anticol data, and names in the --short version too (@doegox)
- Added colors to CLI help (@doegox)
- Changed massively CLI, cf https://github.com/RfidResearchGroup/ChameleonUltra/issues/164#issue-1930580576 (@doegox)
- Changed CLI help: lists display and now all commands support `-h` (@doegox)
@@ -12,6 +58,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
- Added support for timestamped comments in CLI via `rem`, `;`, `%` or `#` (@doegox)
- Fixed watchdog trigger during `hw factory_reset` (@doegox)
- Added PyInstaller support for CLI client (@augustozanellato)
- Added proper Mifare Ultralight (original, C, EV1) / NTAG (213, 215, 216) emulation (@turbocooler).
## [v2.0.0][2023-09-26]
- Added `hw slot nick delete` and DELETE_SLOT_TAG_NICK (@doegox)
+21
View File
@@ -0,0 +1,21 @@
# Chameleon Ultra Contribution guidelines
Any and all contributions are welcome!
Heres a bit of info and a few guidelines to get you started:
- General
- Avoid force pushes. Force pushes and "one commit" PRs not only make reviewing more annoying but also erase a significant part of the git history. This, among other things, makes future debugging and bisection a lot harder.
- Conventional commits. It is recommended to follow the [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) pattern when it comes to commit messages. While this is not strictly enforced, its highly recommended and a good habbit.
- Atomic PRs. To help keep an overview and avoid conflicts, it is highly encouraged to file Atomic PRs. Atomic PRs are:
- Focused Scope: It targets a single, well-defined change, making it easier to understand and review.
- Minimal Size: It contains only the necessary code modifications to achieve its goal, avoiding unrelated changes.
- Independent: It should be able to stand on its own without depending on other unmerged PRs, reviewed, and merged independently.
- Self-Tested: each PR should include an appropriate set of unit tests that tests the changes. (optional but highly appreciated)
- Atomic Commits. Similar thing as atomic PRs. When you are done with a feature, commit. Made a working change? commit. Git commits are basically free. Doing frequent commits at sensible points throughout development not only helps you keep track of progress but also saves progress and changes so you can revert when something goes wrong. It also helps when debugging and bisecting as more granular commits allow for easier issue location.
- CLI
- The recommended packagemanager is [UV](https://docs.astral.sh/uv/) (from astralsh). You may use the manager of your choice, but when adding new dependencies they must be added to the UV lock file and pyproject toml as well.
- Type safety is important. The CLI should be typesafe. Python 3.9+ offer a wide variety of type declarations. Metas [pyrefly](https://pyrefly.org/) is used to do type validation. It is recommended to install the appropriate vscode extension and check your types before opening a PR.
- Formatting matters. Mostly. While pixelpeeping and exact rules are annoying and unnescesary, format your code in a readable and logical way. [Ruff](https://docs.astral.sh/ruff/) is used to enforce various formatting rules. You may install the Ruff vscode extension or use the CLI to format before opening a PR.
- Avoid extra packages. Almost everyone knows the "meme" of the javascript ["is-even"](https://www.npmjs.com/package/is-even) package. While it is encouraged and makes sense to use packages where appropriate, just installing packages for the hell of it even if its a 2 liner is not sensible.
+23 -28
View File
@@ -4,41 +4,32 @@
# ChameleonUltra Authorized Distributors
Europe: [Lab401](https://lab401.com/)
Lyon, France: [Lab401](https://lab401.com/)
United States: [Hackerwarehouse](https://hackerwarehouse.com/)
Santa Ana, United States: [Hackerwarehouse](https://hackerwarehouse.com/)
Anywhere else: [Sneaktechnology](https://sneaktechnology.com) / [Aliexpress by RRG](https://proxgrind.aliexpress.com/store/1101312023)
Hastings, UK: [KSEC](https://labs.ksec.co.uk/product/proxgrind-chameleon-ultra/)
Montreal, Canada: [TechSecurityTools](https://techsecuritytools.com/product/chameleon-ultra/)
Shenzhen, China: [Sneaktechnology](https://sneaktechnology.com)
Guangdong, China: [MTools Tec](https://shop.mtoolstec.com/)
Lazada One, Singapore: [Aliexpress by RRG](https://proxgrind.aliexpress.com/store/1101312023)
# Hardware Upgrade Notice
**Important:** The Chameleon Ultra hardware has been upgraded! Restarting the device now only requires running each of the three RGB colors once (equivalent to a restart). This resolves previous issues where firmware modifications could cause the device to malfunction.
# What is it and how to use ?
Read the [available documentation](docs/README.md).
# Public Roadmap with reference to [Here](https://github.com/RfidResearchGroup/ChameleonUltra/wiki/Public-Roadmap)
Table for future functionality progress
---------------------------------
|No.|Functionality to achieve| Date | In Progress / Achieved ? | Contributors | RRG will reward |
|:--------------:|:--------------:|:--------:|:------------:|:------------:|:------------:|
|1| Adding DESfire Support|28/09/2023|:--------------:|:--------------:|:------------:|
|2| Adding Indala Emulation|28/09/2023|:--------------:|:--------------:|:------------:|
|3| Adding HID Prox 26 bit Emulation|28/09/2023|:--------------:|:--------------:|:------------:|
|4| Adding custom keys for t5577 read|28/09/2023|:------------:|:------------:|:------------:|
|5|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|6|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|7|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|8|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|9|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|10|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|11|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|12|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|13|:--------------:|:--------------:|:------------:|:------------:|:------------:|
|14|:--------------:|:--------------:|:------------:|:------------:|:------------:|
Read the [available documentation](https://github.com/RfidResearchGroup/ChameleonUltra/wiki).
# Compatible applications
* [ChameleonUltraGUI](https://github.com/GameTec-live/ChameleonUltraGUI)
* [MTools BLE](https://github.com/RfidResearchGroup/ChameleonUltra/wiki/mtoolsble)
# Videos
@@ -46,12 +37,16 @@ Table for future functionality progress
* [Downloading and compiling the official CLI](https://www.youtube.com/watch?v=VGpAeitNXH0)
* [Downloading ChameleonUltraGUI](https://www.youtube.com/watch?v=rHH7iqbX3nY)
* [ChameleonGUI features overview](https://www.youtube.com/watch?v=YqE8wyVSse4)
* [ChameleonUltraGUI features overview](https://www.youtube.com/watch?v=YqE8wyVSse4)
* [Using ChameleonUltraGUI and the Chameleon Ultra](https://www.youtube.com/watch?v=9jtKNJ5-kVY)
* [MTools BLE - How to clone a card with ChameleonUltra](https://youtu.be/IvH-xtdW1Wk?si=4exqgAAeJ-kxU3aN)
# Official channels
Where do you find the community?
* [RFID Hacking community discord server](https://t.ly/d4_C)
* Software/chameleon-dev for firmware and clients development discussions
* Devices/chameleon-ultra for usage discussions
* [GameTec_live discord server](https://discord.gg/DJ2A4wxncK)
###### Searching for the docs repo? Find it [here](https://github.com/RfidResearchGroup/ChameleonUltraDocs)
+1 -35
View File
@@ -1,37 +1,3 @@
# Chameleon Ultra Guide
This guide goal is to guide you through setting up and using your Chameleon Ultra and Lite.
This Guide is split up into multiple "subguides":
### About the device
- [Whitepaper](./technical_whitepaper.md): Discover what the Chameleon Ultra is capable of.
- [Hardware](./hardware.md): Learn to know the hardware of your Chameleon.
- [Firmware](./firmware.md): Your Chameleon runs a firmware, learn what it can do and how to use it.
### Interacting with the device
- [Quickstart](./quickstart.md): For the impatient people to just get you up and running with anything.
- [CLI](./cli.md): The official way to control your Chameleon is via the **C**ommand **L**ine **I**nterface (CLI). Learn how to install and master the CLI.
- [GUIs](./gui.md): Some people also develop **G**raphical **U**ser **I**nterfaces (GUIs), these may be a good start for people that do not want to deal with a CLI.
- [Troubleshooting](./troubleshooting.md): For when things go wrong, here are some common tips to maybe fix whatever issue you might have.
### For developers
- [Development](./development.md): For all developers. This covers how to build firmware from source and set up a development environment.
- [SDKs](./sdk.md): SDKs for Chameleon, useful if you want to develop your own application to control Chameleon.
- [Protocol](./protocol.md): The gory details of the communication protocol, useful if you want to develop your own client.
### Miscellaneous
- [Modding](./modding.md): Third party moddings worth mentioning.
- [FAQ](./faq.md): **F**requently **A**sked **Q**uestions, if you have a question, it might already be answered here.
The docs have moved! [Wiki](https://github.com/RfidResearchGroup/ChameleonUltra/wiki)
-144
View File
@@ -1,144 +0,0 @@
## Get ChameleonUltraGUI
- [on Google Play](https://play.google.com/store/apps/details?id=io.chameleon.ultra) / [APK](https://nightly.link/GameTec-live/ChameleonUltraGUI/workflows/build-app/main/apk.zip)
- [on iOS](https://apps.apple.com/dk/app/chameleon-ultra-gui/id6462919364)
- [on Windows](https://nightly.link/GameTec-live/ChameleonUltraGUI/workflows/build-app/main/windows-installer.zip) ([or without installer](https://nightly.link/GameTec-live/ChameleonUltraGUI/workflows/build-app/main/windows.zip))
- [on Linux](https://nightly.link/GameTec-live/ChameleonUltraGUI/workflows/build-app/main/linux.zip)
- [on macOS](https://apps.apple.com/app/chameleon-ultra-gui/id6462919364)
## Page Breakdown
### Homepage
![CUGUI Homepage](./images/cugui-homepage.png)
Starting from the top left, you find
- the *Device Name*: `Chameleon Ultra` or `Chameleon Lite` depending on the device connected ;
- the *Disconnect* button: pressing this icon cleanly disconnects the Chameleon. It is recommended to use this button whenever possible ;
- the *Connected Port*: it tells you where and how the chameleon is connected, followed by how it is connected (*Connection Method*), which displays a USB or Bluetooth icon. Last in that row is the *Battery Charge* display ;
- the *Used Slots*: it displays how many out of the 8 slots are used ;
- the *Slot Changer*: the currently selected slot is highlighted with a red circle, while enabled slots are filled in. Everything else is a hollow circle. The arrows left and right allow you to change the currently selected slot ;
- the *Firmware version*: the version is pulled from the device displayed, as well as git commit information ;
- the *Check for updates* button: it compares the firmware with the one available on GitHub and then updates if a newer version is available ;
- the *Switch mode* button: use it to switch between reader and emulator modes. The icon will update accordingly ;
- the *Device Setting* button: it allows you to change settings concerning the device, like changing the animation mode.
### Device settings
![Device Settings](./images/cugui-devicesettings1.png)
![Device Settings2](./images/cugui-devicesettings2.png)
Top to bottom:
- *Enter DFU mode*: to enter the device DFU mode. Allows the user to take over ;
- *Flash latest FW via DFU*: download the newest firmware from GitHub, disregarding if the device is already up to date, and flash it ;
- *Flash .zip FW via DFU*: it allows the user to select a zip they would like to flash to the device ;
- *Animations*: choose if the device should play the boot-up animation when woken up by an external RFID field ;
- *Button config*: it allows you to define both short-press and long-press actions
- *BLE pairing* toggle: you can decide whether pairing with a BLE PIN is required or not. Enabling PIN increases security at the loss of convenience. You can define a *BLE PIN* once pairing is enabled and you can force forgetting about existing pairings with the *Clear bounded devices* option.
- *Reset settings*: it resets all device settings but does not wipe user data.
- *Factory reset*: **IT WIPES ALL USER DATA** and resets the device to factory settings.
### Slot Manager
![Slot Manager](./images/cugui-slotmanager.png)
The *Slot Manager* consists of 8 cards representing the 8 slots on the device.
The *RFID icon* in the top left corner can either be green or red, meaning the slot is enabled and disabled respectively.
The *Credit Card icon* displays the name and card type of the HF card in the slot.
The *Wi-Fi icon*, on the other hand, displays the name and card type of the LF card in the slot.
The *Gear icon* opens the slot settings. These settings can be changed per slot.
The entire card is also one big button, pressing anywhere on the card opens the select dialog for loading a card.
### Slot Settings
![Slotsettings](./images/cugui-slotsettings1.png)
![Slotsettings2](./images/cugui-slotsettings2.png)
The two rows at the top, labeled HF and LF respectively, display the names of the currently loaded cards. Next to them, the *X* clears them out of the slot. If both are empty, the slot will automatically be disabled.
Under *Slot Status* you can set if the slot is enabled or disabled.
The *Mifare Classic emulator settings* section allows you to toggle various behaviors:
- *Gen1A Magic Mode*: behaves like a gen1a magic card and allows writing to it using magic commands like the Proxmark3 `cload` ;
- *Gen2 Magic Mode*: behaves like a gen2 magic card, makes Block 0 writable ;
- *Use UID/SAK/ATQA from 0 block*: the Chameleon Ultra stores the UID and other anti-collision data independently of the card content. Enabling this setting tells the Chameleon to derive them from card content block 0. Only for MFC with 4-byte UID ;
- *Collect nonces (Mfkey32)*: it toggles nonce collection for mfkey32. When enabled you will be prompted to present the Chameleon to a reader. After you have collected nonces the *Present Chameleon to reader* message will change into a *Recover Keys from x nonces* button. Pressing this will start the recovery process ;
- *Write mode*: Please refer to the [firmware docs](./firmware.md).
### Search dialog
![Search Dialog](./images/cugui-searchdialog.png)
When using the GUI you may encounter a *Search* dialog. The dialog is structured as follows:
Top left you find the *Back* button, this will abort the selection and bring you back.
Near the end of the row, if it is a card search dialog, a filter option will show. This allows you to filter between *HF*, *LF* and *All* cards.
At the end you find a *X*, this X will clear the query.
You enter the query into the *textbox* on the top with the placeholder text "Search"
The search results get listed below. The Card or Wi-Fi symbol indicates if it is LF/HF. The color of the Icon is the user-defined color.
Listed also are the name and type.
Selecting the entry automatically closes the search.
### Saved Cards
![Saved Cards](./images/cugui-savedcards.png)
The *Saved Cards* page allows you to manage your cards and dictionaries.
You import a card or dictionary by clicking the *+* button in their respective half. This opens a select dialog. You may then either select a CUGUI Json file or a Bin file. A Json file gets imported immediately while a Bin file asks if the supplied data is correct before saving.
Once again, we got a card per card or dictionary. At the left you find the Icon for HF/LF with the user-defined color. To the left of that the card name, type and quick actions for edit, export and delete.
The Card is again one Big button, pressing it brings up the Slot info. It displays info about the selected item and also has the quick actions present at the bottom.
![Card Info](./images/cugui-savedcardinfo.png)
### Card Edit Menu
![HF Card edit](./images/cugui-editcard-HF.png)
![LF Card edit](./images/cugui-editcard-LF.png)
Depending on the selected card type the menu only displays options applicable to it.
At the top of the menu is the name and icon. Pressing on the icon allows you to change the color.
Right below is the drop-down for the type. You may switch between any type at will.
A bit lower again you find the UID, SAK, ATQA, ATS and all other options for the selected type. This form auto-validates, so you should not be able to save a invalid config.
And finally at the bottom are the save and cancel options, to save the changes and exits, or to cancel the operation with no changes.
### Settings
![Settings](./images/cugui-settings.png)
The App settings have their own page and consist of a few simple settings:
- *Sidebar Expansion*: Whether or not the sidebar shall be expanded or if the windows size should decide that
- *Theme*: Light/Dark or get it from the System
- *Color Scheme*: Allows you to choose a color you like for the app
- *Language*: Choose any of the languages available. Translating is done via our Crowding project.
- *About*: Displays simple info about the app, such as build number, contributors and people who have donated on Opencollective
- *Activate debug mode*: Don't, just Don't
## How to use MFKEY32
- set slot to MIFARE Classic (by uploading an empty dump)
- enable mfkey32 for that slot (toggle in slot settings)
- select slot and present ultra repeatedly to the reader in order to collect nonces
- after collecting some nonces, go back into slot settings and click recover keys
## Troubleshooting
### Font scaling issues on HiDPI screens
If you have font scaling issues (tiny fonts) with the Linux desktop app and a HiDPI screen, you can solve it by running the app as
```
GDK_SCALE=2 GDK_DPI_SCALE=0.5 /usr/local/lib/chameleonultragui/chameleonultragui
```
### Key recovery from this card is not yet supported
This error may occur when the card you are trying to recovery keys from is requiring a not yet supported recovery technology. You cannot tell the required recovery method from the outside.
You may be able to solve this issue by dumping the card with a Proxmark3 or Mifare Classic Tool (Mobile App) and then importing a bin file.
-160
View File
@@ -1,160 +0,0 @@
# CLI
The CLI (**C**ommand **L**ine **I**nterface) is the official way to control your Chameleon.
It requires at least **Python 3.9** version.
## Installing
There are multiple ways to install the CLI, depending on your OS.
### Windows
Windows users have the choice of 4 options:
#### ProxSpace
Using ProxSpace to build the CLI is the easiest and most comfortable way to get started.
1. Download ProxSpace from the [official GitHub](https://github.com/Gator96100/ProxSpace/releases/latest)
2. [Download 7zip](https://www.7-zip.org/) to extract the archive
3. Install 7zip by double clicking the Installer and clicking `Install`
4. Right-click on the downloaded archive and select `7zip -> Unpack to "ProxSpace"`
5. Open a terminal in the proxspace folder. If you are on a new Windows install, you should be able to just right-click and select `Open in Terminal`. If that option is not visible and the ProxSpace folder is still in your downloads folder, press `win+r` and type `powershell` followed by enter. In Powershell now type `cd ~/Downloads/ProxSpace`
6. Run the command `.\runme64.bat`. After successful completion, you should be dropped to the `pm3 ~ $` shell.
7. Clone the Repository by typing `git clone https://github.com/RfidResearchGroup/ChameleonUltra.git`
8. Now go into the newly created folder with `cd ChameleonUltra/software/src`
9. Prepare for package installation with `pacman-key --init; pacman-key --populate; pacman -S msys2-keyring --noconfirm; pacman-key --refresh`
10. Proceed by installing Ninja with `pacman -S ninja --noconfirm`
11. Build the required config by running `cmake .`
12. And the binaries with `cmake --build .`
13. Copy the binaries by running `cp -r ~/ChameleonUltra/software/bin/* ~/ChameleonUltra/software/script/`
14. Go into the script folder with `cd ~/ChameleonUltra/software/script/`
15. Install python requirements with `pip install -r requirements.txt`
16. Finally run the CLI with `python chameleon_cli_main.py`
To use after installing, just do the following:
1. Run `runme64.bat`
2. Go into the script folder with `cd ~/ChameleonUltra/software/script/`
3. Run the CLI with `python chameleon_cli_main.py`
#### WSL2
Coming Soon
#### WSL1
Coming Soon
#### Build Natively
Building natively is a bit more advanced and not recommended for beginners
1. Download and install [Visual Studio Community](https://visualstudio.microsoft.com/de/downloads/)
2. On the workload selection screen, choose the `Desktop development with C++` workload. Click `Download and Install`
3. Download and install [git](https://git-scm.com/download). When asked, add to your path
4. Download and install [cmake](https://cmake.org/download/). Again, when asked, add to your path
5. Download and install [python](https://www.python.org/downloads/). When asked, add to your path (small checkbox in the bottom left)
6. Choose a suitable location and open a terminal. Clone the repository with `git clone https://github.com/RfidResearchGroup/ChameleonUltra.git`
7. Change into the binaries folder with `cd ChameleonUltra/software/src`
8. Build the required config by running `cmake .`
9. And the binaries with `cmake --build .`
10. Copy the binaries by running `cp -r ../bin/Debug/* ../script/`
11. Go into the script folder with `cd ../script/`
12. Create a python virtual environment with `python -m venv venv`
13. Activate it by running `.\venv\Scripts\Activate.ps1`
14. Install python requirements with `pip install -r requirements.txt`
15. Finally run the CLI with `python chameleon_cli_main.py`
To run again after installing, just do the following:
1. Activate venv by running `.\venv\Scripts\Activate.ps1`
2. Run the CLI with `python chameleon_cli_main.py`
### Linux
*Coming Soon*
### MacOS
*Coming Soon*
## Usage
When in the CLI, plug in your Chameleon and connect with `hw connect`. If autodetection fails, get the Serial Port used by your Chameleon and run `hw connect -p COM11` (Replace `COM11` with your serial port, on Linux it may be `/dev/ttyACM0`)
### Common activities
- Connect to the CLI: `hw connect`
- Change slot: `hw slot change -s [1-8]`
*More examples coming soon*
### MFKEY32v2 walk-through
Make sure to be in the `software/` directory and run the Python CLI from there.
- Connect to the CLI: `hw connect`
- Check which slot can be used: `hw slot list`
- Change the slot type, here using slot 8 for a MFC 1k emulation: `hw slot type -s8 -t3`
- Init the slot content: `hw slot init -s8 -t3`
- or load an existing dump and set UID and anticollision data, cf `hf mf eload -h` and `hf mf sim -h`
- Enable the slot: `hw slot enable -s8 -e1`
- Change to the new slot: `hw slot change -s8`
- Activate the detection: `hf detection enable -e1`
Now disconnect, go to a reader and swipe it a few times
- Come back and connect to the CLI: `hw connect`
- See if nonces were collected: `hf detection count`
- We need 2 nonces per key to recover
- Recover the key(s) based on the collected nonces: `hf detection decrypt`. Output example:
```
- MF1 detection log count = 6, start download.
- Download done (144bytes), start parse and decrypt
- Detection log for uid [DEADBEEF]
> Block 0 detect log decrypting...
> Block 1 detect log decrypting...
> Result ---------------------------
> Block 0, A key result: ['a0a1a2a3a4a5', 'aabbccddeeff']
> Block 1, A key result: ['010203040506']
```
- To clean the logged detection nonces: `hf detection enable -e0` then `hf detection enable -e1`
*More examples coming soon*
-351
View File
@@ -1,351 +0,0 @@
# Development
In this file you can look up how to [install requirements](#Prerequisites-for-compiling), [edit](#Editing-the-code), [compile](#Compiling-the-code) and [debug](#Debugging-the-code) the firmware!
## Prerequisites for compiling
### install a cross-compiler
So far, the following compilers have been reported to work fine.
Download one of them and decompress it.
Remember the path where you installed it.
- [gcc-arm-none-eabi-10.3-2021.10](https://developer.arm.com/downloads/-/gnu-rm)
- [arm-gnu-toolchain-12.2.rel1-XXX-arm-none-eabi](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads), e.g. [arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz](https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz) for a x86_64 Linux host
Always use the official versions from ARM, *DO NOT* install `gcc-arm-none-eabi` from Debian/Ubuntu.
For some unknown reasons, same gcc version from Debian creates a bootloader too large to fit in the allocated flash space.
Moreover it does not contain the `gdb` debugger.
### install make
* **Debian/Ubuntu alike**
* Open a terminal.
* Run the following command to install Make: `sudo apt-get install build-essential`
* **Windows using Chocolatey:**
* Open a PowerShell terminal with administrator privileges.
* If not yet installed, run the following command to install Chocolatey:
``` Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) ```
* In the same PowerShell terminal, run the following command to install Make using Chocolatey: `choco install make`
* **macOS:**
* Open a terminal.
* If not yet installed, install Homebrew package manager by running the following command: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
* Once Homebrew is installed, run the following command to install Make: `brew install make`
### install nRF tools
- Install nRF Util tool [nrfutil](https://www.nordicsemi.com/Products/Development-tools/nrf-util)
- Move it to a known path like `C:\nrfutil\` or `/usr/local/bin/`
- Add this path to the `PATH` Environment Variable if not yet there.
- Install nRF Util packages:
- `nrfutil install completion device nrf5sdk-tools trace`
- Install [nRF Command Line Tools](https://www.nordicsemi.com/Products/Development-tools/nrf-command-line-tools/download) to get `nrfjprog`, `mergehex` etc.
### install programmer tools
Depending on the hardware programmer you want to use, additional tools are needed.
- If you are using a J-Link:
- Install [Segger J-Link Software](https://www.segger.com/downloads/jlink)
- alternatively, you can use openocd as described below
- Note: a JLink OB (or a STLink reflashed as a JLink OB) will not work on a nRF.
- If you are using a ST-Link V2:
- Install [openocd](https://openocd.org/pages/getting-openocd.html)
- If under Windows, install [ST-Link drivers](https://www.st.com/en/development-tools/stsw-link009.html), extract the zip and run `dpinst_amd64.exe`
### configure the project
- Edit `Makefile.defs`:
- Change `GNU_INSTALL_ROOT` (path of previously installed Compiler `bin` folder)
- Change `GNU_VERSION` (Version of the installed Compiler) (FIXME: is it really used?)
- Change the other paths to match your system if needed
- Don't forget to remove the `#` in front of the changed lines
- Alternatively, if you are committing often code, it may be easier to leave `Makefile.defs` intact and to invoke `make` with the desired variables from a script, e.g. `make GNU_INSTALL_ROOT=../../../arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/`
## Editing the code
You can use [Visual Studio Code](https://code.visualstudio.com/download) to edit this project! Simply download and
install it!
- Install the [C++ Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) in VS-Code.
- Install
the [C++ Extension Pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools-extension-pack) in
VS-Code.
- Create a new IntelliSense Configuration:
- press F1 in VS-Code and enter `C/C++: Edit Configurations (UI)`
- Add a new Configuration and name it
- Specify your Compiler path (path of previously installed Compiler `bin` folder)
- Change IntelliSense mode to `gcc-arm (legacy)`
- Add include path `${workspaceFolder}/**`
## Compiling the code
- Install prerequisites (for instructions have a look at [Prerequisites for compiling](#Prerequisites-for-compiling))
- Run `build.sh` or try to execute its steps manually if your platform is not yet properly supported. Feedback is always welcome.
The script produces several images in `objects`.
* `fullimage.hex` to be used with a programmer over the SWD pins
* `dfu-app.zip` and `dfu-full.zip` to be used with DFU mode
## Uploading the code in DFU mode
If the bootloader and the SoftDevice are already properly installed on the Chameleon, you can reflash it directly over DFU.
To set the device in DFU mode:
* you can use the Python client and issue the command `hw dfu`
* you can use the script `resource/tools/enter_dfu.py` that does exactly the same but may be easier to call from your scripts
* you can unplug the device, wait for it to sleep, then press the button B and plug it. If the application is bogus, this is the only way.
The LEDs 4 & 5 should blink green when in DFU mode.
To flash only the application (safer):
`nrfutil device program --firmware objects/dfu-app.zip --traits nordicDfu`
To flash everything (be sure to also have a JLink or ST-Link V2 programmer if something goes wrong):
`nrfutil device program --firmware objects/dfu-full.zip --traits nordicDfu`
Under Linux you can use the scripts `flash-dfu-app.sh` and `flash-dfu-full.sh`, they will put the device in DFU mode and flash it.
## Uploading the code with a programmer
Connect pins GND, SWC (swclk) and SWD (swdio) to your programmer.
With a JLink and `nrfjprog`
```
# application only:
nrfjprog -f nrf52 --program objects/application.hex --sectorerase --verify --reset
# full:
nrfjprog -f nrf52 --program objects/fullimage.hex --sectorerase --verify --reset
```
With a JLink and `openocd`
```
# application only:
openocd -f interface/jlink.cfg -f target/nrf52.cfg -c "program objects/application.hex verify reset ; shutdown"
# full:
openocd -f interface/jlink.cfg -f target/nrf52.cfg -c "program objects/fullimage.hex verify reset ; shutdown"
```
With a ST-Link V2 and `openocd`
```
# application only:
openocd -f interface/stlink.cfg -f target/nrf52.cfg -c "program objects/application.hex verify reset ; shutdown"
# full:
openocd -f interface/stlink.cfg -f target/nrf52.cfg -c "program objects/fullimage.hex verify reset ; shutdown"
```
## Uploading the code over BLE
If you are adventurous it is possible to flash the device over BLE (DFU mode).
To put the device in DFU mode
* you can use the Python client and issue the command `hw dfu` **TODO:** this will be possible only when the client will be able to work over BLE...
* you can use the script `resource/tools/enter_dfu_over_ble.py`
Once in DFU mode, the device will announce itself over BLE as `CU-xxxx` where xxxx are the last 2 bytes of the Device Serial Number.
Then use the official [nRF Device Firmware Update](https://www.nordicsemi.com/Products/Development-tools/nRF-Device-Firmware-Update) mobile application to flash one of the DFU images.
## Debugging the code from VSCode
- Install [Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) VS-Code Extension
- Open `app_main.c`
- Open the extension with `CTRL-SHIFT-D`
- Klick on `create a launch.json file`
- Select `Cortex-Debug`
- Add this in the configuration bracket:
```
{
"cwd": "${workspaceFolder}",
"executable": "${workspaceRoot}/firmware/objects/bootloader.out",
"name": "Debug with JLink",
"request": "launch",
"type": "cortex-debug",
"runToEntryPoint": "main",
"showDevDebugOutput": "none",
"servertype": "jlink",
"device": "nrf52",
"interface": "swd",
"svdFile": "${workspaceRoot}/firmware/nrf52_sdk/modules/nrfx/mdk/nrf52.svd",
},
{
"cwd": "${workspaceFolder}",
"executable": "${workspaceRoot}/firmware/objects/bootloader.out",
"name": "Debug with STLink",
"request": "launch",
"type": "cortex-debug",
"runToEntryPoint": "main",
"showDevDebugOutput": "none",
"servertype": "openocd",
"device": "nrf52",
"svdFile": "${workspaceRoot}/firmware/nrf52_sdk/modules/nrfx/mdk/nrf52.svd",
"gdbPath": "C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin/arm-none-eabi-gdb.exe",
"configFiles": [
"interface/stlink.cfg",
"target/nrf52.cfg"
]
}
```
- If you are jlink probe, create `settings.json` in {projectRoot}/.vscode directory.
```
{
"cortex-debug.armToolchainPath": "C:\\UserProgram\\arm_gcc\\none\\bin",
"cortex-debug.JLinkGDBServerPath": "C:\\Program Files\\SEGGER\\JLink\\JLinkGDBServerCL.exe",
}
```
- To change `executable` target in `launch.json` to `application` or `bootloader`
- In the debug menu you can select `Debug with JLink` or `Debug with STLink`
## Debugging the code with gdb and openocd
See first if you can execute `arm-none-eabi-gdb` from the installed tools.
* gcc-arm-none-eabi-10.3-2021.10 gdb requires `libncurses5`
* arm-gnu-toolchain-12.2.rel1 gdb requires Python 3.8
In case Python 3.8 is not available anymore on your distro, to install a local copy you can do
```
wget https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tgz
tar zxvf Python-3.8.17.tgz
cd Python-3.8.17
./configure --prefix=$HOME/opt/python-3.8.17 --enable-shared
make
rm -rf ~/opt/python-3.8.17
make install
```
Connect openocd to the device with a JLink or a ST-Link V2
```
openocd -f interface/jlink.cfg -f target/nrf52.cfg
```
```
openocd -f interface/stlink.cfg -f target/nrf52.cfg
```
Then run gdb as follows
```
PYTHONHOME=~/opt/python-3.8.17/ arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-gdb
```
and tell gdb to connect to openocd
```
target extended-remote localhost:3333
```
## BlackMagicProbe with RTT support, out of a ST-Link V2
You can reflash a ST-Link V2 to use it as a BlackMagicProbe, to get support for RTT and see NRF_LOG messages.
Some clones have only 64kb, this is too short.
Even 128kb is too small when enabling RTT, but we can comment parts of the BMP source code.
```
git clone --recursive git@github.com:blackmagic-debug/stlink-tool.git
( cd stlink-tool && make )
```
Then put the `stlink-tool` binary in your path.
Get [BMP full sources](https://github.com/blackmagic-debug/blackmagic/releases)
Comment out all probes except Nordic nrf51 in `src/target/cortexm.c` big switch for probes. It should remain
```c
switch (t->designer_code) {
case JEP106_MANUFACTURER_NORDIC:
PROBE(nrf51_probe);
break;
}
```
```
make -j PROBE_HOST=stlink ST_BOOTLOADER=1 ENABLE_RTT=1
```
Then flash the ST_Link V2
```
stlink-tool src/blackmagic.bin
```
See [src/platforms/stlink/README.md](https://github.com/blackmagic-debug/blackmagic/blob/main/src/platforms/stlink/README.md) for more details.
Unplug/plug.
Every time you plug the ST-Link, you have to run `stlink-tool` to enable BMP.
Under linux, it is convenient to install [udev rules](https://github.com/blackmagic-debug/blackmagic/blob/main/driver/README.md#99-blackmagic-plugdevrules) to get aliases `/dev/ttyBmpGdb` and `/dev/ttyBmpTarg`.
Note that using a native ST-Link V2 with BlackMagicProbe "hosted" will not allow to see NRF_LOG messages.
## Debugging the code with gdb and BMP with RTT to monitor NRF_LOG
Assuming you have a BlackMagicProbe with RTT support made out of a ST-Link V2.
RTT usage: https://black-magic.org/usage/rtt.html
```
stlink-tool
sleep 1
screen /dev/ttyBmpTarg
```
In another terminal
```
$ arm-none-eabi-gdb
(gdb) target extended-remote /dev/ttyBmpGdb
(gdb) monitor swdp_scan
1 Nordic nRF52 M4
2 Nordic nRF52 Access Port.
(gdb) attach 1
(gdb) monitor rtt
```
We are now able to use gdb and see the NRF_LOG messages on the other terminal.
## Using JLink with RTT to monitor NRF_LOG
cf https://embeddedexplorer.com/nrf52-nrf-log-tutorial/
```
JLinkExe -if SWD -device nrf52 -speed 4000 -autoconnect 1
```
in a second terminal:
```
JLinkRTTClient
```
## Using SWO pin as UART to monitor NRF_LOG
One can set `NRF_LOG_UART_ON_SWO_ENABLED := 1` in `Makefile.defs` to activate this functionality.
When activated, NRF_LOG will be available if one connects a UART bridge to the SWO pin which will work as a UART TX pin.
UART works at 115200 bauds. E.g. one can use a FTDI dongle and `screen /dev/ttyUSB0 115200`.
Contrary to RTT that needs to be activated by a JTAG probe, UART logs are immediately available.
Limitations:
* SWO pin is shared with... SWO so when e.g. reflashing the device, garbage may appear on the monitoring terminal.
* SWO pin is also shared with the blue channel of the RGB slot LEDs, so faint blue may appear briefly when logs are sent and LED might not work properly when supposed to be blue.
# Resources
* [nRF52840 Objective Product Specification v0.5.1](https://infocenter.nordicsemi.com/pdf/nRF52840_OPS_v0.5.1.pdf)
View File
-120
View File
@@ -1,120 +0,0 @@
# Firmware
The Chameleon flash contains several parts: the bootloader and its settings, the application, the user data and the SoftDevice.
NOTE: If you are a developer searching for the building instructions, look into [development](./development.md)
## The Bootloader
The bootloader is the lowest-level program running on your Chameleon. It is read-only and provides the DFU (**D**evice **F**irmware **U**pgrade) mode. The bootloader being read-only, it makes it really hard to brick your Chameleon. The flash also contains a special section to store bootloader settings required by the nRF to deal with upgrades. This is only a concern for developers.
You enter DFU mode by of the following methods:
1. Physical button
- Disconnect the Chameleon and wait for it to enter sleep mode
- Hold down the 🅑 button. If you are using Windows you have to wait about ~5s before next step.
- Plug USB into a PC while still holding the button. If you are using Windows you have to wait about ~10s before next step.
- Then release the 🅑 button
2. From CLI
- Execute the command `hw dfu`
3. From GUI
- Click on `Enter DFU mode`
4. From Shell
- Execute the script `resource/tools/enter_dfu.py`
The device stays in DFU mode for ~30s.
While in DFU mode waiting for the update, the LEDs 4 and 5 blink alternatively green 🟢🟢.
You can then perform firmware upgrades either via a GUI or the command line:
1. Download nRF Util from the [nRF website](https://www.nordicsemi.com/Products/Development-tools/nrf-util)
2. Open a Command Line / Terminal on your PC
3. Install the "device" toolkit by running `nrfutil install device`
4. Download the Chameleon firmware from [GitHub](https://github.com/RfidResearchGroup/ChameleonUltra/releases). At the moment it is better to take the *Development release* but beware bugs can occur. Choose `ultra-dfu-app.zip` for the Ultra or the Devkit, and `lite-dfu-app.zip` for the Lite.
5. Put your Chameleon into DFU mode and install the firmware with the following command: `nrfutil device program --firmware ultra-dfu-app.zip --traits nordicDfu` (keep in mind to change the filename if you are using a Lite).
Step 5: Alternatively you can connect the Chameleon over USB and use the script `firmware/flash-dfu-app.sh` which will take care of flipping it into DFU mode and flashing it with the adequate firmware.
While flashing firmware is in progress, the LEDs 4 and 5 should blink fast blue 🔵🔵 and the firmware update should be finished in a matter of seconds. Using DFU and performing a firmware update also helps recovering from most device-related issues.
If LEDs 4 and 5 are flashing slow red 🔴🔴, it indicates an issue with DFU. Try to unplug and plug again or unplug and wait for it to timeout and try again the whole procedure.
## The Application
The application is the piece of software being loaded by the bootloader. It communicates with the client, emulates, reads and writes cards, drives the LEDs, handles buttons and much more. The application is also writable, it is the piece of software being updated via DFU.
The communication with the application is either done via the CLI or a GUI. Communication can be done over USB or BLE (**B**luetooth **L**ow **E**nergy), although, at time of writing, only GUIs support BLE.
On boot, the application starts in emulation mode, so it can emulate up to 8 HF tags and up to 8 LF tags (one slot can handle both a HF and a LF).
The Chameleon can be awaken:
- by pressing a button
- when it comes close to a HF or LF field, *only if* a card corresponding to that field (HF/LF) is loaded into the active slot.
The white LED labeled RF lights up when it detects a field, again only if the active slot supports it.
In some situations, it can be cumbersome to wait for the boot-up animation. This is configurable, cf e.g. the CLI command `hw settings animation set -h`.
On a new Chameleon (or after a factory reset), 3 slots are defined, slot 1 holding both a HF and a LF:
- slot 1 LF: a EM4100 with UID `DEADBEEF88`
- slot 1 HF: a MIFARE Classic 1k with UID `DEADBEEF`
- slot 2 HF: a MIFARE Classic 1k with UID `DEADBEEF`
- slot 3 LF: a EM4100 with UID `DEADBEEF88`
When a slot is selected, the LED shows what type of card is loaded with the following color code:
- 🟢 HF card loaded
- 🔵 LF card loaded
- 🔴 Both HF and LF loaded
When a dual HF/LF slot is activated by an external field, it will turn green or blue according to the frequency.
The application controls the buttons. The behavior of the buttons is customizable via the CLI or a GUI. The default behavior is the following:
- 🅐 short press: Select previous slot
- 🅑 short press: Select next slot
- 🅐 long press: Copy LF or HF tag UID (only Ultra, not Lite)
- 🅑 long press: Copy LF or HF tag UID (only Ultra, not Lite)
*About UID copy*: the action depends on the current slot support. So to be able to copy an EM4100 LF tag, the slot must be configured firstly to emulate an EM4100 tag. And to be able to copy a HF 14a tag, the slot must be configured for the right type of HF tag. Only the UID will be copied, not the data.
The Chameleon also shows the following LED effects:
- Charging: 4 pulsing green lights
- CLI / GUI connected over USB: Chasing LEDs in the color of the selected slot (left to right for slots 1-4 and right to left for slots 5-8).
The device enters sleep mode after about 5s unless it is plugged in USB or if a client is connected over BLE. You can use the buttons to wake it up again. You can also press quickly a button during the sleep animation to keep the device awake.
## Write Modes
- **Normal**: Behaves like any normal card
- **Denied**: Read-only card, send NACK to write attempts
- **Deceive**: Accepts write commands but don't change any data (reader thinks write was successful but when reading back, nothing changed)
- **Shadow**: Accepts writes but reverts changes when device goes to sleep (reader can read and write like a normal card but changes are kept in RAM and are lost when the chameleon goes to sleep)
## The SoftDevice
A [SoftDevice](https://infocenter.nordicsemi.com/index.jsp?topic=%2Fstruct_nrf52%2Fstruct%2Fnrf52_softdevices.html) is a precompiled and linked binary software implementing a wireless protocol developed by Nordic Semiconductor.
We are using the [SoftDevice S140](https://infocenter.nordicsemi.com/index.jsp?topic=%2Fstruct_nrf52%2Fstruct%2Fnrf52_softdevices.html) which implements a BLE Central and Peripheral protocol stack solution.
## The User Data
The Chameleon has a reserved space of memory and flash where it stores application settings, active slot and slots configurations and data. This will not be overwritten by DFU updates and the data will only be reset by either issuing `hw factory_reset --i-know-what-im-doing` in the CLI or clicking `Factory reset` in a GUI.
*Warning:* Settings and/or data might be reset to defaults if you downgrade the firmware version up to a version not supporting the newer format.
-8
View File
@@ -1,8 +0,0 @@
# GUIs
There are multiple GUIs to control your Chameleon, two are featured in this documentation.
Note that in spite of what their name may suggest, all GUIs support both the Ultra and the Lite.
- [Chameleon Ultra GUI](./chameleonultragui.md) ([github](https://github.com/GameTec-live/ChameleonUltraGUI))
- [MTools Lite for iOS](https://shop.mtoolstec.com/mifare-classic-tool-for-ios)
-51
View File
@@ -1,51 +0,0 @@
# Hardware
The Chameleon comes in 3 Hardware variants, the Ultra, the Lite and the Devkit.
## The Ultra
The Chameleon Ultra comes in a black box with gold printing. This box has the following dimensions: 9.5 cm x 5.5 cm x 3.5 cm
![box.png](./images/ultra-box.jpg)
The Box contains a foam pad, a USB cable that has a removable end to convert it to USB-C, a Proxgrind 3.5 hex screwdriver, 2 replacement screws and a keychain and the device itself.
![box-contents.jpg](./images/ultra-box-contents.jpg)
The device itself features 4 screws holding it together, 2 buttons labeled `A` and `B`. The device consists of 2 PCBs (**P**rinted **C**ircuit **B**oards) and a plastic spacer, one contains the Electronic and the HF (**H**igh **F**requency), 13.56 MHz, antenna as well as the 8 LEDs indicating which slot is currently active and the other board features the Chameleon Ultra text, the screws and the LF (**L**ow **F**requency), 125KHz, antenna. The plastic spacer houses the battery as well as the ferrite pad which enables HF and LF emulation at the same time. It also has has the USB-C charging and data port and a hole for inserting the keychain loop. The Chameleon Ultra dimensions are: 2.4cm x 4cm x 8mm
![ultra.png](./images/ultra.jpg)
## The Lite
The Chameleon Lite comes in a white box with blue printing. This box has the following dimensions: 9.5 cm x 6 cm x 3.5 cm
![lite-box.jpg](./images/lite-box.jpg)
The Box contains a foam pad, a USB cable that has a removable end to convert it to USB-C and the device itself.
![lite-box.-contents.jpg](./images/lite-box-contents.jpg)
The device itself features 2 buttons labeled with arrows. The device consists of one PCB in a blue plastic housing. This one PCB contains the electronics and the HF antenna as well as the 8 LEDs indicating which slot is currently active, and the USB-C port. The LF antenna is glued onto the back of the PCB and is visible through the housing. The battery is soldered in place and the housing is held together by thin fragile pins which are easy to snap. It is not designed to be disassembled. The keychain loop is also relatively fragile, so be careful. The Chameleon Lites dimensions are: 3.6 cm x 6.1 cm x 0.8 cm
![lite.jpg](./images/lite.jpg)
## The Devkit
Just like the Chameleon Ultra, the Devkit comes in a black box with gold printing. This box has the following dimensions: 12 cm x 8 cm x 3.5 cm
![devkit-box.jpg](./images/devkit-box.jpg)
Again, just like the lite, the box contains a foam pad, a USB cable that has a removable end to convert it to USB-C and the device itself.
![devkit-box-contents.jpg](./images/devkit-box-contents.jpg)
The device itself features 2 buttons labeled `A` and `B`. The device is made of only one PCB without a case. At the bottom of this PCB both the HF and LF coils are found. Because it is a Devkit, this Chameleon has its SWD (**S**ingle **W**ire **D**ebug) port and some testpoints exposed. (In the photos below, a pinheader is already soldered into the SWD port, this is not the case from factory) The Chameleon Devkit dimensions are: 5.3 cm x 8.5 cm x 1.1 cm (including rubber feet, battery and buttons. PCB thickness: 0,16 cm)
![devkit.jpg](./images/devkit.jpg)
## What is the difference between the Lite and the Ultra/DevKit?
The Chameleon Ultra as well as the Devkit contain a second chip called [MFRC522 ](https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf). This chip allows the Chameleon to read and write to HF 14a tags. The Chameleon Lite does not contain this chip and therefore cannot read and write HF tags, it can only simulate some. The Chameleon Lite also swaps the big LIPO (**LI**thium **PO**lymer) battery with a smaller buttoncell. The Devkit is a Chameleon Ultra on a bigger PCB and with a bigger battery and some component differences such as a mechanical relay but which should not make any practical difference.
#
-5
View File
@@ -1,5 +0,0 @@
all:
pdflatex --shell-escape protocol-packet.tex
clean:
rm *.aux *.log *.pdf
Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Some files were not shown because too many files have changed in this diff Show More