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地 ...
解决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文件在数据库里执行一下就行了,大概看了一下,里面都是些时区名字和时间偏移的对应关系。如下图所示:
七牛云批量下载图床图片
起因大一搭博客的时候,需要用到图床,当时用了免费的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": " ...
一次给龙芯旧世界升级内核的失败经历
起因最近在捣鼓旧世界的3A5000,编了个软件,编完之后有点空虚,在到处学习一些Linux知识。然后突然想到,早在Linux5xx版本,就宣布了对Loongarch的支持,那我岂不是可以自己编一个内核,然后给Loongnix升级,于是就有了这篇。
下载源码源码:The Linux Kernel Archives
选择6.7.6长期支持版,使用git拉取源码Kernel.org git repositories
编译:清理缓存1make clean
配置文件1make loongson3_defconfig #使用loongarch默认配置编译
然后报错:
报错原因:没有安装flex
解决方法:
12sudo apt-get install flexsudo apt-get install bison
将配置文件移到顶层1cp arch/loongarch/configs/loongson3_defconfig .config
选择配置1make menuconfig
开始编译1make -j4 #3A5000是4核8线程的
编译完成,大概花了四十分钟:
安装模块12sudo make modules_installsudo make install
启用内核作为引导输入下列命令将内核作为引导,将数字更改为你自己编译的版本号:
1sudo update-initramfs -c -k 6.7.6
下面更新一下grub:
1sudo update-grub
之后重启即可在启动界面选择需要启动的内核。
linux6.7.6——启动关机再开机之后,在Grub引导界面,选择”advanced”选项,选择刚刚安装的6.7.6内核。
激动的心,颤抖的手,按下了回车。The world!!!!
一秒钟过去了。。。
两秒钟过去了。。。 ...
在Loongarch下编译Remmina 1.4.5版本
起因之前一直使用loongnix作为跳板机,连接宿舍电脑,然后一直使用Remmina连接,后面看了下Remmina的版本,是1.3.3。
最新版都已经到了1.4.5了已经,我还在用这么老的版本,太不舒服了(遂编一个试试。全程按照官方文档走,没有什么难点,浅浅记录一下。
安装依赖12345678910sudo apt install build-essential git-core libssh-dev cmake libx11-dev libxext-dev libxinerama-dev \ libxcursor-dev libxdamage-dev libxv-dev libxkbfile-dev libasound2-dev libcups2-dev libxml2 libxml2-dev \ libxrandr-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \ libxi-dev libavutil-dev libjson-glib-dev\ libavcodec-dev libxtst-dev libgtk-3-dev libgcrypt20-dev libpulse-dev \ libvte-2.91-dev libxkbfile-dev libtelepathy-glib-dev libjpeg-dev \ libgnutls28-dev libsecret-1-dev libavahi-ui-gtk3-dev libvncserver-dev \ libappindicator3-dev intltool libsecret-1-dev libwebkit2gtk-4.0-dev libsystemd-dev \ libsodium-dev libkf5wallet-de ...
关于Django以前忽略的一些东西
Django直接使用sql查询官方文档:执行原生 SQL 查询 | Django 文档 | Django (djangoproject.com)
将查询字段映射为模型字段¶raw() 字段将查询语句中的字段映射至模型中的字段。
查询语句中的字段排序并不重要。换而言之,以下两种查询是一致的:
123>>> Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM myapp_person')...>>> Person.objects.raw('SELECT last_name, birth_date, first_name, id FROM myapp_person')
直接执行自定义 SQL¶有时候,甚至 Manager.raw() 都无法满足需求:你可能要执行不明确映射至模型的查询语句,或者就是直接执行 UPDATE, INSERT 或 DELETE 语句。
这些情况下,你总是能直接访问数据库,完全绕过模型层。
对象 django.db.connection 代表默认数据库连接。要使用这个数据库连接,调用 connection.cursor() 来获取一个指针对象。然后,调用 cursor.execute(sql, [params]) 来执行该 SQL 和 cursor.fetchone(),或 cursor.fetchall() 获取结果数据。
例如:
123456789from django.db import connectiondef my_custom_sql(self): with connection.cursor() as cursor: cursor.execute(&qu ...
记一次手相简单学习
之前上网冲浪,在油管上看到老高的新视频:最強手相,你的雙手決定你的人生 | 老高與小茉 Mr & Mrs Gao - YouTube 看了下自己的手相,感觉还是不错的,故在此记录一下,以后也能回来看一下。
摘要精彩之處
💡 手相能揭示人生命運的秘密
高亮
🌟 人的雙手能反映出個人性格和潛力
內容
🔮 手掌的線條和紋路能預測一個人的命運和未來
🌟 手相學是一門古老的術科,被視為一種神秘的藝術
🌟 人的手形和手指的長度能反映出個人的性格特徵
💼 某些手相特徵與事業和財富有關
🌟 通過觀察手相,我們可以了解一個人的健康狀況和壽命
🌟 手相學的研究能幫助人們更好地了解自己的潛力和命運
本人手
如何看手相看哪一只手才是对的?惯用手的另一只手(我的就是左手)。左手反映的是天命,也就是不需要努力就能得到的;右手是需要努力才能得到的。
最重要的三根线
对应到我的就是:
先来看第一条——生命线。
生命线生命线长短和寿命的长短没有直接的关系,它反映的是生命力的强弱。主要看生命线下降的弧度,如果下降太快,说明生命力消耗过快。下降快是如下图所示,没有过食指和中指之间的线。
我过了嘿嘿。
如果没过也不要灰心,看看右手,如果右手好说明通过后天努力是能让生命力获得补充。
此外,还有内生命线,可能有一条,两条,甚至四条。
此外,生命线末端有分叉的的是——旅行线
旅行线我虽然左手没有,但是我右手有嘿嘿,所以只要我努努力,就可以去很远的地方,努努力运气就会好!
智慧线智慧线的长度并不代表智商高低,而是一个人的思考方式和脑回路。
长短也就代表思考问题的长短,智慧线越短越倾向直觉;长代表深思熟虑,但容易过度思考
这根线的长短可以用来作为判断一个人的依据,别人长的话就慢慢来讲;如果短的话就快速说结论,快速解决。
还有就是这条线的形状也很重要,如果比较直,偏向理性思维,如果比较弯 ...
为Loongarch移植thunderbird78版本
引言:Mozilla Thunderbird,非正式中文名称为雷鸟,是由Mozilla基金会研发的一款自由及开放源码的跨平台电邮客户端、新闻阅读器、聚合器以及即时通讯软件。此软件预设安装于Ubuntu之上。Thunderbird可用作电邮、新闻组、聚合器或聊天(XMPP、IRC或Twitter)客户端。其预设安装的Lightning扩展则入了个人资讯管理功能。用户若有需要亦可自行安装其他附加元件。
移植环境软件环境:
操作系统:loongnix-19.0
硬件环境:
CPU:3C5000 CPU
核数:四核
内存:8GB以上
硬盘:256GB以上
移植准备本节操作需要以下依赖:
1.rust-1.65.0-loongarch6412345678# 下载rustup以及rust相关二进制包export RUSTUP_DIST_SERVER=https://rust-lang.loongnix.cnexport RUSTUP_UPDATE_ROOT=https://rust-lang.loongnix.cn/rustupcurl --proto '=https' --tlsv1.2 -sSf https://rust-lang.loongnix.cn/rustup-init.sh | sh# 使用rustup安装1.65.0版本rustrustup toolchain install 1.65.0rustup default 1.65.0-loongarch64-unknown-linux-gnu
2.cbindgen-0.14.312345# 卸载旧版本cbindgensudo apt remove --purge cbindgen#安装0.14.3版本cbindgencargo install --version 0.14.3 ...