Skip to content

修复Felica读写以及CMD_SEND_HEX_DATA的回复 #19

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 18, 2024

Conversation

QHPaeek
Copy link
Contributor

@QHPaeek QHPaeek commented Sep 27, 2024

felica的读写在某些需要验证MAC_A的服务器上是很重要的操作。根据索尼官方的Felica-LiteS使用手册以及15396抓包数据,游戏只会向0x8080区块写入数值。0x8080为felica liteS的random challenge区块,验证MAC_A的流程即是先将16个随机字符写入8080区块,之后读取MAC_A区块即可。而MAC_A区块计算的值不仅是根据random challenge,还会将同一读取命令中前面读取的其他非MAC_A区块的数值也纳入计算中,又根据抓包数据以及实践分析,在发出读取命令时,必须在同一条命令中读取全部四个区块(即0x8082,0x8086,0x8090,0x8091)才能获取到服务器期望的正确MAC_A。关于使用PN532库读取felica四个区块会报错的问题,请见我提出的issus:Seeed-Studio/PN532#147 以及 Seeed-Studio/PN532#148
修改后的PN532库请见https://github.com/QHPaeek/PN532
经过测试,在需要MAC_A验证的服务器上可以正确刷入felica卡。

另外,经过对比15396抓包数据,发现:
15396的回复:
out:e0 30 00 05 61 2b 3a 31 30 30 30 30 30 30 30 30 43 39 34 34 43 30 30 30 43 39 34 36 39 30 30 30 43 39 34 36 39 30 30 30 43 39 34 36 39 30 30 45 39 be
in: e0 06 00 05 61 20 00 8c //CMD_SEND_HEX_DATA
arduino读卡器的回复:
out : e0 30 00 05 61 2b 3a 31 30 30 30 30 30 30 30 30 43 39 34 34 43 30 30 30 43 39 34 36 39 30 30 30 43 39 34 36 39 30 30 30 43 39 34 36 39 30 30 45 39 be
in : e0 06 00 05 61 00 00 6c //CMD_SEND_HEX_DATA
此错误似乎不影响读卡器的正常使用,但是会导致游戏反复向读卡器发送命令,可能会造成未知影响。修复后一切正常。

@Sucareto
Copy link
Owner

感谢提供情报~
之前对于 FeliCa 的通信并不了解,单纯靠猜,现在看来实现果然有问题。

@Sucareto
Copy link
Owner

读写 FeliCa 的部分看起来是需要修改 PN532 库?
稍后我测一下修改后的读写情况,没问题就可以合并啦~
感谢~

@Sucareto Sucareto merged commit c461478 into Sucareto:main Oct 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants