Issue origin: Commit6b7665ed5"Added live fc/cn update to hf iclass tagsim" added a data_available() poll inside the per-byte DMA loop of GetIso15693CommandFromReader so the ARM could drop out of RF-listen and process live emulator updates. Before that commit, that tight loop had no USB poll at all — only gotFrame / BUTTON_PRESS / WDT_HIT. Verified via git show 6b7665ed5^:armsrc/iso15693.c. Why it shows up on sim -t 3/6/7: those are the FULL sim modes that share do_iclass_simulation. Between reader commands the decoder sits in STATE_READER_UNSYNCD, so the gated poll at iso15693.c:1570-1575 fires every byte (reading UDP peripheral registers). With DMA filling at ~1 byte / ~19 µs, the added USB register reads plus jitter occasionally push the CPU past the 90% lag threshold → behindBy 461 with DMA_BUFFER_SIZE=512. Commitfb8f94fa2narrowed the gate to UNSYNCD to stop mid-frame exits, but the per-byte poll itself is still what's new on that path. Fix: New mode constant in include/iclass_cmd.h: #define ICLASS_SIM_MODE_FULL_LIVE 8 // FULL + allow USB interrupt for live emul updates Treat it identically to ICLASS_SIM_MODE_FULL everywhere except for the poll gate. Add a flag param to GetIso15693CommandFromReader — e.g. bool allow_usb_interrupt in iso15693.c:1495 and iso15693.h:42. Wrap the poll: if (allow_usb_interrupt && (dr->state == STATE_READER_UNSYNCD || dr->state == STATE_READER_AWAIT_1ST_FALLING_EDGE_OF_SOF) && data_available()) { ... } Pass true only for live mode in do_iclass_simulation iclass.c:502: bool live = (simulationMode == ICLASS_SIM_MODE_FULL_LIVE); len = GetIso15693CommandFromReader(receivedCmd, MAX_FRAME_SIZE, &reader_eof_time, live); The len == -2 drain block stays but becomes dead code for non-live modes (never returns -2). Client side: cmdhficlass.c:1687 (CmdHFiClassTagSim) sends ICLASS_SIM_MODE_FULL_LIVE. CmdHFiClassSim -t 3/6/7 keeps sending ICLASS_SIM_MODE_FULL / _GLITCH / _GLITCH_KEY. Other callers (iso15693.c:2270, iclass.c:1121 = reader-attack sim) pass false. Result: hf iclass sim -t 3/6/7 → byte-inner loop is back to its pre-tagsim shape → no blow-buffer abort. hf iclass tagsim → keeps live update ability; still has the overhead, but that's the trade-off the feature needs.
Iceman Fork - Proxmark3
The Proxmark3 is the swiss-army tool of RFID, allowing for interactions with the vast majority of RFID tags on a global scale. Originally built by Jonathan Westhues, the device is now the goto tool for RFID Analysis for the enthusiast. Iceman repository is considered to be the pinnacle of features and functionality, enabling a huge range of extremely useful and convenient commands and LUA scripts to automate chip identification, penetration testing, and programming
| Latest Release | Coverity | Contributors |
|---|---|---|
| Actions OSX CI | Actions Ubuntu CI | Actions Windows CI |
|---|---|---|
Table of Contents
- Iceman Fork - Proxmark3
- Table of Contents
- PROXMARK3 INSTALLATION AND OVERVIEW
- How to build?
- What has changed?
- Development
PROXMARK3 INSTALLATION AND OVERVIEW
Notes / helpful documents
How to build?
Proxmark3 RDV4
See the instruction links in the tables above to build, flash and run for your Proxmark3 RDV4 device.
Generic Proxmark3 platforms
In order to build this repo for generic Proxmark3 platforms we urge you to read Advanced compilation parameters
We define generic Proxmark3 platforms as following devices.
Supported
- RDV1, RDV2, RDV3 easy
- Ryscorp green PCB version
- Radiowar black PCB version
- numerous Chinese adapted versions of the RDV3 easy (kkmoon, PiSwords etc)
- Proxmark3 SE (Special Edition) (BLE enabled)
- Proxmark3 X
- Note: Community tested
- Note: unknown device hw
Not supported
- ⚠ Proxmark Evolution (EVO)
- Note: unknown pin assignments.
- ⚠ Ryscorp Proxmark3 Pro
- Note: device has different fpga and unknown pin assignments.
- Note: Company have disappeared, leaving their customers in the dark.
Experimental support
- ⚠ iCopy-X
- Note: currently incompatible with iCopy-X GUI as Proxmark client commands using different syntax
- Note: see also icopyx-community repos for upstream sources, reversed hw etc.
- Note: Uses DRM to lock down tags, ignores the open source licences. Use on your own risk.
- ⚠ Proxmark3 Ultimate
- Note: unknown device hw
- Note: FPGA images is building for it. Use on your own risk.
Unknown support status
- ⚠ VX
- Note: unknown device hw
When it comes to these new unknown models we are depending on the community to report in if this repo works and what they did to make it work.
256KB flash memory size of generic Proxmark3 platforms
⚠ Note: You need to keep a eye on how large your ARM chip built-in flash memory is. With 512KB you are fine but if its 256KB you need to compile this repo with even less functionality. When running the
./pm3-flash-allyou can see which size your device have if you have the bootloader from this repo installed. Otherwise you will find the size reported in the start message when running the Proxmark3 client./pm3.
What has changed?
Proxmark3 RDV4 hardware modifications:
- added flash memory 256KB
- added smart card module
- added FPC connector for peripherals such as Bluetooth+battery addon
- improved antennas
- swappable
- LF Q factor switch
- LF 125/134 frequency switch
- tiny PCB form factor
- ABS case
This repo vs official Proxmark3 repo:
See the Changelog file which we try to keep updated.
In short this repo gives you a completely different user experience when it comes to Proxmark3.
- Supports command tab complete
- Richer CLI with use of colors / emojis
- Help text system implemented everywhere
- Hints system
- User preference settings
- Extensive testing with continuous integration build systems on Linux, OSX and Windows, and regular usage of static analysis tools like
- Coverity Scan
- Cppcheck (v2.6)
- GCC and Clang aggressive enforcement of diagnostic flags
- Auto detection of serial ports and seamless integration with Bluetooth addon
- Reconnect to device from inside client
- Supports tearoff attacks
- Supports NFC NDEF type1, type2, type4a, type4b, mifare, barcode
- Supports pm3 client scripts, lua scripts, python scripts
- Most comprehensive collection of scripts available
- Wiegand encoding, decoding.
- Supports EMV
- Supports CIPURSE
- Most standalone modes available with easy compilation
- Extensive test script for client and external tools
- Most comprehensive compiled known keys dictionaries
- Slimed down usb communications with NG-frames
- The most compiled public known key recovery software
- The fastest implementations of said software
- Support multiple fileformats for dump files (BIN/EML/JSON)
- Interoperability of said fileformats with libnfc, MFC tool app etc
- Supports more RFID based protocols than ever
- Easy install for package maintainers, distro maintainers
- Supports cmake, make
- Builds without errors or warnings on more OS/platforms than ever
- Available as package on known distros like Gentoo, Kali, Termux, Macports, Homebrew
- Much more documentation
Development
⚠ Note: This is a bleeding edge repository. The maintainers actively is working out of this repository and will be periodically re-structuring the code to make it easier to comprehend, navigate, build, test, and contribute to, so DO expect significant changes to code layout on a regular basis.
👉 Remember! If you intend to contribute to the code, please read the coding style notes first. We usually merge your contributions fast since we do like the idea of getting a functionality in the Proxmark3 and weed out the bugs afterwards.
The public roadmap is an excellent start to read if you are interesting in contributing.
Supported operating systems
This repo compiles nicely on
- WSL1 on Windows 10
- WSL2 on Windows 10/11
- Proxspace environment release v3.xx
- Windows/MinGW environment
- Ubuntu, ParrotOS, Gentoo, Pentoo, Kali, NetHunter, Arch Linux, Fedora, Debian, Raspbian
- Android / Termux
- macOS / Homebrew (or MacPorts, experimental) / Apple Silicon M1
- iOS (Jailbroken, rootful)
- Docker container
Precompiled binaries
See Proxmark3 precompiled builds
Proxmark3 GUI
The official PM3-GUI from Gaucho will not work. Not to mention is quite old and not maintained any longer.
- Proxmark3 Universal GUI will work more or less.
- Proxmark3 GUI cross-compiled which is recently updated and claims to support latest source of this repo.
- Proxmark3_GUI simple gui in vb.net
Official channels
Where do you find the community?
Maintainers
To all distro, package maintainers, we tried to make your life easier.
make install is now available and if you want to know more.
This document will be helpful for you
Citation
Use this bibtex to cite this repository globally:
@misc{proxmark3,
author = {C. {Herrmann} and P. {Teuwen} and O. {Moiseenko} and M. {Walker} and others},
title = {{Proxmark3 -- Iceman repo}},
howpublished = {\url{https://github.com/RfidResearchGroup/proxmark3}},
keywords = {rfid nfc iceman proxmark3 125khz 134khz 13.56mhz},
}
If you need to refer to a specific state of the repository, use a commit number or a date of access, e.g.:
note = {Accessed: commit 12327f71a27da23831901847886aaf20e8ad3ca0}
note = {Accessed: 2021-01-01}
Copyright and licensing terms
Each contribution is under the copyright of its author. See AUTHORS.
The Proxmark3 source code is covered by the following licensing terms, usually referred as GPLv3 or later.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
A copy of the GPLv3 is available in LICENSE.
Some dependencies may be under other free licensing terms compatible with the Proxmark3 licensing terms, see their respective description.