IC卡秘钥算法破解的一次尝试
Hello大家好,这里是LanternMark,今天给大家分享一下我的一次水卡破解经历。
(本文只技术交流分享,滥用者自行承担责任,与本文作者无关)
0x0.前言 IC卡,即Integrated Circuit Card,集成电路卡,像我们平常看到的银行卡,地铁卡,还有校园里的饭卡,智能校徽等等,这些都属于IC卡。想必大家一定不陌生,但是大家有没有关注过IC卡的原理以及安全性。希望通过这篇文章,给大家一些启发。
0x1.准备工作 工欲善其事,必先利其器。在开始读卡之前,先准备好以下的东西:
一块读卡芯片(比如PN532)
一台有NFC功能的手机,和配套的软件(比如MCT)
一张水卡
一颗耐心(很重要)
芯片这里我用的是PN532,一块很便宜的读卡芯片,某宝上30多就能买到了,都准备好之后,就可以开始破解了。
0x2.开始破解 首先,先打开手机的NFC功能,读取一下这张水卡,会得到以下的结果。
可以看到,除了13扇区之外,其他扇区都是用的默认密钥,这就给这张卡片带来了很大的安全风险,因为像这种没有全部加密(半加密)的卡片,是可以利用IC卡漏洞轻松破解的,这里我们来用PN532配套的上位机尝试破解一下。
结果如下图:
用了三分钟,秘钥就很轻松的被破解出来了,可见这种IC卡的安全性真的不高。不过用漏洞破解不是本文的重点,本文主要分享一个业余的人破解秘钥的过程。
0x3.数据分析 通过上面一张卡的数据,我还是看不出来有什么联系,所以我又找了另外一些卡来破解寻找UID和密钥的关系。在扫了10+张卡片后,我可以初步知道UID和密钥的映射关系。
由于这种卡的KeyB都是相同的,只有KeyA不一样,所以UID决定的是KeyA,而且KeyA有六位,而UID只有四位,通过上图,我们可以清晰地看到UID地 ...
解决批处理脚本报错:The system cannot find the batch label XXXX
起因这两天在装[guaguastandup/zotero-pdf2zh: PDF2zh for Zotero | Zotero PDF中文翻译插件](https://github.com/guaguastandup/zotero-pdf2zh时,用它的安装脚本时,出了个抽象的错:
1The system cannot find the batch label specified - create_conda_env
把报错拿去问chat哥和ge哥,他俩给出的答案都是说原本的脚本用了UTF-8 with BOM编码,导致开头有两字节数据,同时还说是结尾用了LF而不是CRLF导致的。
根据它们说的方法排查一遍之后,发现还是不行。于是只能用匠心传承的古法debug,上stackflow搜索,还真让我找到一个十几年前类似的回答windows - Why “The system cannot find the batch label specified” is thrown even if label exists? - Stack Overflow:
里面有一条回答非常细节:
GitHub’s “Raw” download is just HTTP-serving the blob as it sits in the repo storage (which Git always normalizes to LF internally). It does not invoke Git’s clean/smudge process, so you always get LF, even if you committed CRLF or have a .gitattributes rule.GitHub 的”原始”下载只是将存储在仓库中的 blob 作为 HTT ...
UE5.6使用Unrealcv和MatrixCityPlugin遇到的一些问题:
起因最近需要用干一些地编的活,需要用虚幻引擎来采集深度数据,遂找了俩可以采集深度图的插件Unrealcv和MatrixCityPlugin,在编译的过程中遇到了些抽象问题。
报错:ConcurrentLinearAllocator.h(31): error C4668: ‘__has_feature’ is not defined as a preprocessor macro, replacing with ‘0’ for ‘#if/#elif’编译插件建议开一个空项目,丢进去先编译好在放到项目里。编译Unrealcv遇到了:
ConcurrentLinearAllocator.h(31): error C4668: ‘__has_feature’ is not defined as a preprocessor macro, replacing with ‘0’ for ‘#if/#elif’
这个问题原因是新版vs使用了新版的msvc, 而它移除了该宏。解决方法很简单,先在vs installer下一个旧版本的msvc,然后在C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC目录下可以找到刚刚安装的旧版本号。
然后找到BuildConfiguration.xml,注意是UE5的对应文件,不是项目文件里的,默认路径在:C:\Users\{yourname}}\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
123456<Configuration xmlns="https://www.unrealengine.com/Bui ...
解决报错RuntimeError: GET was unable to find an engine to execute this computation
起因三个月前,写了个项目,将三个模型糅合进一个后端进行调用,同时做成即插即用式。三个月后现在,当我运行项目后端时,竟然报错了。仔细一看我还以为是显卡爆炸了。
集成的三个模型都出现这个问题,网上的解决方法大部分都是说,数据和模型不在一个设备上,即cuda和cpu,但是排查了一下,不是这个原因。师兄的conda环境还能正常跑,而我的就报这个错,十分的诡异。于是在网上高强度冲浪,终于找到了原因Debug系列:pytorch报错GET was unable to find an engine to execute this computation
打开python交互命令行,使用下面代码会发现:
12import torch print(torch.backends.cudnn.version())
原来是师兄之前装了个新的cudnn,装到全局环境了。导致我的conda环境读到了环境变量中的全局cudnn
解决方法最简单的解决方法就是
1unset LD_LIBRARY_PATH # 取消cudnn的环境变量
或者在.bashrc中就把这个环境变量unset掉,但是秉持修旧如旧的思想,还是不要改这个好,只针对我自己的环境,写个激活脚本就好:
123cd ~/anaconda3/envs/{env_name}/etcmkdir conda && cd conda && mkdir activate.d echo 'unset LD_LIBRARY_PATH' > ~/anaconda3/envs/{env_name}/etc/conda/activate.d/env_vars.sh
解决django报错"Database returned an invalid datetime value. Are time zone definitions for your database installed?"
问题今天写Django项目,创建订单时遇到个bug MySQL backend does notsupport timezone-aware datetimes when USE TZ is False
我把Django的USE_TZ关掉时,他说我mysql不支持,我去打开之后,能创建订单了,但是admin里商品显示有问题了,报错"Database returned an invalid datetime value. Are time zone definitions for your database installed?"然后网上查教程让我把这个选项USE_TZ时区支持打开(Django5.0默认打开)。一根筋变成两头堵了。
解决研究了好久,比如给我mysql加上 SET time_zone = '+08:00'再重启,没用。还是一样报错。后面查了好久才发现,原来是我的mysql数据库里没时区信息,虽然不知道为什么都2025年了,默认不自带时区信息。
Linux下使用命令:
1mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
即可写入时区信息,Windows比较麻烦,得去官网下一个时区的sql文件MySQL :: Time zone description tables,
选timezone_2025b_posix_sql.zip下载,然后解压出sql文件在数据库里执行一下就行了,大概看了一下,里面都是些时区名字和时间偏移的对应关系。如下图所示:
曙光平台安装llama-factory以及微调qwen2.5-VL-3B模型
起因毕设做完了,毕业典礼结束了,进组老师安排了一个复现大模型微调的任务,遂开始装环境,记录一下装环境遇到的各种坑。
SCNet曙光平台conda环境老师给我分了张A800,在云平台上。A800是A100的残血版,貌似砍了CUDA核心数,但是对于微调来说,倒也够用了。曙光平台进来之后直接开ssh,把连接信息和密钥填到配置文件里就能直接连了。
连上之后首先要做的是配环境,默认环境中各种软体,应用程式都是缺失的,如conda,这就需要我们从module里load进来,然后创建环境:
12345module ava #查看可用软体module load anaconda3/2023.09 #condamodule load compiler/gcc/12.2.0 #gcc12,可以先加载进来,待会编译库需要用到
然后开始经典conda装环境部分,这次实验环境需要的库如下:
1234567891011121314151617conda # 创建并激活虚拟环境(以 conda 为例)conda create -n llm_finetune python=3.10conda activate llm_finetuneecho """datasets==3.4.1llamafactory==0.9.3multiprocess==0.70.16numpy==1.26.3openai==1.70.0pandas==2.2.3tokenizers==0.21.0torch==2.6.0torchvision==0.21.0transformers==4.50.0vllm==0.8.2""" > requirements.txtpip install -r requirements.txt -i https://py ...
如何优雅的批量修改git项目的提交时间
起因之前暑假的时候,做了个项目,拿到了国三。然后最近发现另外一个比赛的区域赛的题目和之前的项目完全契合,遂决定拿之前我们做的这个项目去参赛,但是git项目的时间还是暑假,这显然不太合理。在github上搜寻了一番,发现了PotatoLabs/git-redate: Change the dates of several git commits with a single command
使用用法非常简单,windows下直接把文件丢到${INSTALLATION_PATH}\mingw64\libexec\git-core即可,然后使用git redate --commits [[number of commits to view]],用法如下:
最方便的地方在于可以根据右侧的commit信息来修改时间,同时可以比较自由的修改每一个commit。原仓库是7年前的,导致用起来有些bug,稍微改了下,就能在新版本上跑起来了,仓库链接:ladeng07/git-redate: 用一条命令修改多个 Git 提交的日期,支持git 2.45.2+。修改提交时间
写在最后非常好用,改了时间之后的项目成功进到线下比赛,去上海公费旅游了3天,最后还拿了区域二等奖,小赚1000,美滋滋。
七牛云批量下载图床图片
起因大一搭博客的时候,需要用到图床,当时用了免费的SM.MS速度差点意思,正好看到七牛云有免费的10G空间,用来搭图床足够了。正好typora也支持接入七牛云,就这样写了几年博客,上传了两千多张照片,一直用的好好的。
直到去年,腾讯云的免费https证书从时间从1年变成了三个月,博客的图床经常因为没更新证书直接挂掉。此时开始萌生想把七牛云上的图片迁移走的想法。然后找了一圈发现,七牛云网站本身不支持批量下载,但是官方提供了一个命令行工具可以批量下载:qiniu/qshell: Shell Tools for Qiniu Cloud
使用参考官方教程批量下载 - 七牛开发者中心
下载了qshell.exe(以windows为例)之后,使用如下两个命令可以进行下载:
12qshell account 您的ak 您的sk 空间名称qshell qdownload2 --dest-dir=本地文件夹相对路径或者绝对路径 --bucket=空间名称
这里的ak和sk都是密钥,之前使用七牛云作图床时,已经保存过一份,空间名称就是空间管理中的名字,如下:
然后就能下载了,在这里我推荐另外一个方法,把以上信息写入conf文件里,之后可以直接调用,格式如下:
1234567{ "accessKey": 您的ak, "secretKey": 您的sk, "bucket": 空间名称, "cdn_domain、": cdn使用的域名, "dest_dir": 保存路径}
批量下载是支持增量下载的,也就说之后可以写定时任务,自动备份图床图片。
Windows11挂载群晖webdav到本地
问题描述在群晖里启动了webdav server之后,windows11上添加会出现0x80070043 找不到网络名
解决方案
确认webdav服务正确打开,端口无冲突。
windows11注册表的BasicAuthLevel设置为2
具体操作
使用win+R,输入regedit打开注册表
找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters键
找到BasicAuthLevel的项
修改其值为2
如果不存在这个键,新建一个名为BasicAuthLevel,类型为DWORD的值,设置为2
重启
使用脚本自动更新实验室电脑IP到cloudflare域名
起因之前实验室路由器用的老师的账号,有段时间网络不好,校园网老掉,师兄他们得经常重新登录,每次重新登陆容易造成实验室路由器IP改变,因为我的loongson电脑放在实验室,打洞在校园网。每次换IP我还得跑到实验室去重新看,累死我。然后想到可以像DDNS一样,请求一下API来定时更新IP。因为我的域名是停靠在CF的,所以得用CF的API。
步骤理论上只要一条请求就可以更新了,但是在这之前,得先获取别的信息,所以整个过程要分三步。
先获取zone的id
在获取对应子域名的id
最后组装成更新请求
在开始之前,我们需要先去CF申请一个API的令牌:User API Tokens | Cloudflare
选择你的域名,然后点击进入,滑倒下面,找到Get your API token,进去后点击右上角的create,选择下图的Edit zone DNS
然后配置大概如下,然后再continue就可以了,最后保存好你的密钥。
获取zone的id命令如下,
1curl -X GET "https://api.cloudflare.com/client/v4/zones" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json"
返回格式
123456789101112131415{ "result": [ { "id": "这是你获取的id", "name": "lmark.cc", "status": " ...









