自己在淘宝上买了PN532模块和USB-TTL,用我祖传的手工技术粘了一个,结果粘歪了
将 TDM-GCC 安装到 C:\TDM-GCC、pcre、libnfc、libusb 等放到 D:\Tools 目录下、CMake 和 Doxygen 直接安装即可,自己编译的时候指定目录即可。
编译时的目录结构如下:
注:libnfcbuild目录为输出的二进制文件目录
为了能顺利编译,我们需要修改一下代码:
打开 libnfc-1.7.1 目录下面的 CMakeLists.txt,然后找到:
MACRO (GET_CURRENT_YEAR RESULT)
EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
STRING(REGEX REPLACE ".*(..)/(..)/(....).*" "\\3" ${RESULT} ${${RESULT}})
ENDMACRO (GET_CURRENT_YEAR)
改为:
MACRO (GET_CURRENT_YEAR RESULT)
EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
STRING(REGEX REPLACE "\n" "" ${RESULT} ${${RESULT}})
STRING(REGEX REPLACE ".*(..)/(..)/(....).*" "\\3" ${RESULT} ${${RESULT}})
ENDMACRO (GET_CURRENT_YEAR)
接下来打开 libnfc-1.7.1\libnfc 下面的 nfc-internal.c 文件,找到:res->allow_intrusive_scan = false;
改成true
后保存
启动 CMake,上面的第一行选择为刚刚的 libnfc-1.7.1 目录,binaries 目录选择为 Tools 文件夹下面的 libnfcbuild 目录,然后点击 Configure。
此时会弹出一个窗口提示你选择编译环境,选择MinGW
,然后点击 Finish
这个时候等待 GCC 处理完毕,你会看到一个错误对话框,点击 OK。
很明显是缺库了,进行调整:
CMAKE BUILD TYPE
改为 Release(当然 Debug 也可以);CMAKE_INSTALLPREFIX
修改为刚刚我创建的 libnfcbuild
目录,LIBNFC_SYSCONFDIR
请在刚刚的 libnfcbuild
目录下面手动建立一个 config
目录,并选择它。
将 PCREBINDIRS
修改为 pcre-7.0 目录下面的 bin 目录,INCLUDEDIRS
同理
PCRE_LIBRARIES
修改为 pcrelib
目录下面的 libpcre_dll.a
然后再次点击 Configure,出现新的参数:
由于我只使用 PN532
,所以只保留 PN532 UART 选项,如果你是用 ACR122u 等读写器,可以进行对应的修改
将 LIBUSB_INCLUDE_DIRS
改为你 libusb-win32 目录下面的 include 目录,LIBRARIES
修改为 lib\gcc\libusb.a 文件(如果你使用其它编译器,选择对应的即可)最后再点击一次 Configure,如果没有什么差错的话,就会提示 Configuring Done 了。
启动 CMD,进入刚刚的 libnfcbuild 目录,执行 C:\TDM-GCC-64\bin\mingw32-make.exe 即可,等待编译结束
编译完成了,开始整理文件:
进入 libnfcbuild 目录的 examples 文件夹,复制出所有的 EXE 文件到一个新文件夹
再进入 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,并安装好 CP2103 驱动程序(USB to UART Bridge VCP Drivers),执行 nfc-list.exe,并放一张卡片在上面
可以看到成功的打开了端口并识别出了PN532,并且读出了卡片的信息
MFCUK (MiFare Classic Universal toolKit) 是一款基于 dackside 攻击原理破解全加密 M1 卡的开源软件,mfcuk 通过算法的漏洞破解出第一个 key,如果某个扇区的 key 被破解出来,就可以再使用 mfoc 工具使用 nested authentication 攻击破解其他扇区的密码。
可以从这里获取源码:https://github.com/nfc-tools/mfcuk
在编译前你需要安装 MSYS2 MinGW,然后切为国内的镜像源,可参考:Tsinghua Open Source Mirror 或 MSYS2 镜像使用帮助 [LUG@USTC]
启动MSYS2,安装软件包:
pacman -S mingw-w64-x86_64-gcc make automake mingw-w64-x86_64-gcc cmake git
下载 mfcuk 源码并解压到目录里面进入目录,输入 autoreconf -is,然后 ./configure
提示缺少 libnfc,我们将之前 libnfctools\nfclib 目录下面的 libnfc.dll.a
改名为 libnfc.a
,复制到你的 MSYS2 安装目录下面 mingw32\lib 目录下面
接下来,在MSYS2手动创建一个 sys 目录:mkdir /sys
下载一个文件头b并将其复制到 sys 目录下面:https://github.com/lattera/glibc/blob/master/string/endian.h
回到 MSYS2 终端,使用下面的命令进行生成:
LIBS=/mingw32/lib/libnfc.a ac_cv_header_endian_h=/sys/endian.h ./configure PKG_CONFIG=:
在 mfcuk 目录下面的 src 文件夹里面建立一个 nfc 目录,找到 libnfc-1.7.1 源码的目录,进入 include\src 文件夹,找到这三个头文件,复制到你 mfcuk\src 文件夹下面的 nfc 目录中。
然后再将 libnfc\contrib\win32 下面的 err.h 放到你 mfcuk 的 src 文件夹下面:
最后开始编译:
LIBS=/mingw32/lib/libnfc.a ac_cv_header_endian_h=/sys/endian.h make
在 src 目录找到生成的 mfcuk.exe,放到和 libnfc.dll 一个目录中运行一下看看:
参考资料:
Libnfc-1.6.0在Windows下的编译过程
在Windows下编译支持ACR122U的libnfc
Installing libnfc on Windows and create executables and libnfc.dll