RFID安全入门:PN532 模块的 Windows libnfc 和 mfcuk 编译及使用
字数 1878 2025-08-22 12:22:36
RFID安全入门:PN532模块的Windows下libnfc和mfcuk编译及使用指南
工具准备
硬件设备
- PN532模块
- USB-TTL转换器(如CP2103)
软件工具
- TDM-GCC(安装到C:\TDM-GCC)
- pcre库
- libnfc库
- libusb库
- CMake
- Doxygen
- MSYS2 MinGW(用于mfcuk编译)
建议将所有工具(pcre、libnfc、libusb等)放在D:\Tools目录下
libnfc编译步骤
1. 代码修改
修改CMakeLists.txt:
在libnfc-1.7.1目录下的CMakeLists.txt中,找到以下宏定义并修改:
MACRO (GET_CURRENT_YEAR RESULT)
EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
STRING(REGEX REPLACE "\n" "" ${RESULT} ${${RESULT}})
STRING(REGEX REPLACE " .*" "" ${RESULT} ${${RESULT}})
ENDMACRO (GET_CURRENT_YEAR)
修改nfc-internal.c:
在libnfc-1.7.1\libnfc\nfc-internal.c文件中,找到:
res->allow_intrusive_scan = false;
改为:
res->allow_intrusive_scan = true;
2. CMake配置
-
启动CMake
-
设置源目录为libnfc-1.7.1目录
-
设置二进制目录为D:\Tools\libnfcbuild
-
点击Configure,选择MinGW作为编译环境
-
配置以下参数:
- CMAKE_BUILD_TYPE:改为Release或Debug
- CMAKE_INSTALL_PREFIX:设置为libnfcbuild目录
- LIBNFC_SYSCONFDIR:在libnfcbuild目录下创建config目录并选择
- PCRE_BINDIRS:设置为pcre-7.0目录下的bin目录
- PCRE_INCLUDEDIRS:设置为pcre-7.0的include目录
- PCRE_LIBRARIES:设置为pcrelib目录下的libpcre_dll.a
- 只保留PN532 UART选项(如使用其他读写器则相应调整)
- LIBUSB_INCLUDE_DIRS:设置为libusb-win32目录下的include目录
- LIBUSB_LIBRARIES:设置为lib\gcc\libusb.a文件
-
再次点击Configure,直到显示"Configuring Done"
3. 编译
- 打开CMD,进入libnfcbuild目录
- 执行:
C:\TDM-GCC-64\bin\mingw32-make.exe
4. 文件整理
- 从libnfcbuild\examples复制所有EXE文件到新文件夹
- 从libnfcbuild\utils复制所有EXE文件
- 解决DLL依赖:
- 将libusb-win32-bin-1.2.6.0\bin\x86下的libusb0_x86.dll改名为libusb0.dll
- 复制pcre-7_0\bin下的pcre3.dll
- 复制libnfcbuild\libnfc下的libnfc.dll
测试PN532模块
- 连接PN532模块并安装CP2103驱动程序
- 执行nfc-list.exe
- 放置卡片在模块上,查看识别信息
mfcuk编译步骤
1. 环境准备
- 安装MSYS2 MinGW
- 配置国内镜像源(如清华或中科大镜像)
- 在MSYS2中安装必要软件包:
pacman -S mingw-w64-x86_64-gcc make automake mingw-w64-x86_64-gcc cmake git
2. 源码准备
- 从https://github.com/nfc-tools/mfcuk获取源码
- 解压后进入目录
- 执行:
autoreconf -is
./configure
3. 解决依赖问题
- 将之前编译的libnfc.dll.a改名为libnfc.a,复制到MSYS2安装目录下的mingw32\lib目录
- 在MSYS2中创建sys目录:
mkdir /sys
- 下载endian.h文件(可从https://github.com/lattera/glibc/blob/master/string/endian.h获取)并放入/sys目录
4. 头文件准备
- 在mfcuk\src目录下创建nfc目录
- 从libnfc-1.7.1\include\src目录复制三个头文件到mfcuk\src\nfc目录
- 从libnfc\contrib\win32目录复制err.h到mfcuk\src目录
5. 编译
执行以下命令:
LIBS=/mingw32/lib/libnfc.a ac_cv_header_endian_h=/sys/endian.h ./configure PKG_CONFIG=:
LIBS=/mingw32/lib/libnfc.a ac_cv_header_endian_h=/sys/endian.h make
6. 测试
将生成的mfcuk.exe与libnfc.dll放在同一目录下运行测试
注意事项
- 确保所有路径设置正确
- 编译过程中出现的错误通常是由于缺少依赖或路径设置不正确
- 使用mfcuk破解M1卡时,它会利用算法漏洞破解第一个key,之后可使用mfoc工具进行nested authentication攻击破解其他扇区密码
参考资料
- Installing libnfc on Windows and create executables and libnfc.dll
- MSYS2镜像使用帮助(清华、中科大等)
- libnfc和mfcuk官方文档