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配置

  1. 启动CMake

  2. 设置源目录为libnfc-1.7.1目录

  3. 设置二进制目录为D:\Tools\libnfcbuild

  4. 点击Configure,选择MinGW作为编译环境

  5. 配置以下参数:

    • 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文件
  6. 再次点击Configure,直到显示"Configuring Done"

3. 编译

  1. 打开CMD,进入libnfcbuild目录
  2. 执行:
C:\TDM-GCC-64\bin\mingw32-make.exe

4. 文件整理

  1. 从libnfcbuild\examples复制所有EXE文件到新文件夹
  2. 从libnfcbuild\utils复制所有EXE文件
  3. 解决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模块

  1. 连接PN532模块并安装CP2103驱动程序
  2. 执行nfc-list.exe
  3. 放置卡片在模块上,查看识别信息

mfcuk编译步骤

1. 环境准备

  1. 安装MSYS2 MinGW
  2. 配置国内镜像源(如清华或中科大镜像)
  3. 在MSYS2中安装必要软件包:
pacman -S mingw-w64-x86_64-gcc make automake mingw-w64-x86_64-gcc cmake git

2. 源码准备

  1. 从https://github.com/nfc-tools/mfcuk获取源码
  2. 解压后进入目录
  3. 执行:
autoreconf -is
./configure

3. 解决依赖问题

  1. 将之前编译的libnfc.dll.a改名为libnfc.a,复制到MSYS2安装目录下的mingw32\lib目录
  2. 在MSYS2中创建sys目录:
mkdir /sys
  1. 下载endian.h文件(可从https://github.com/lattera/glibc/blob/master/string/endian.h获取)并放入/sys目录

4. 头文件准备

  1. 在mfcuk\src目录下创建nfc目录
  2. 从libnfc-1.7.1\include\src目录复制三个头文件到mfcuk\src\nfc目录
  3. 从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放在同一目录下运行测试

注意事项

  1. 确保所有路径设置正确
  2. 编译过程中出现的错误通常是由于缺少依赖或路径设置不正确
  3. 使用mfcuk破解M1卡时,它会利用算法漏洞破解第一个key,之后可使用mfoc工具进行nested authentication攻击破解其他扇区密码

参考资料

  • Installing libnfc on Windows and create executables and libnfc.dll
  • MSYS2镜像使用帮助(清华、中科大等)
  • libnfc和mfcuk官方文档
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中,找到以下宏定义并修改: 修改nfc-internal.c : 在libnfc-1.7.1\libnfc\nfc-internal.c文件中,找到: 改为: 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目录 执行: 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中安装必要软件包: 2. 源码准备 从https://github.com/nfc-tools/mfcuk获取源码 解压后进入目录 执行: 3. 解决依赖问题 将之前编译的libnfc.dll.a改名为libnfc.a,复制到MSYS2安装目录下的mingw32\lib目录 在MSYS2中创建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. 编译 执行以下命令: 6. 测试 将生成的mfcuk.exe与libnfc.dll放在同一目录下运行测试 注意事项 确保所有路径设置正确 编译过程中出现的错误通常是由于缺少依赖或路径设置不正确 使用mfcuk破解M1卡时,它会利用算法漏洞破解第一个key,之后可使用mfoc工具进行nested authentication攻击破解其他扇区密码 参考资料 Installing libnfc on Windows and create executables and libnfc.dll MSYS2镜像使用帮助(清华、中科大等) libnfc和mfcuk官方文档