Chameleon Ultra 变色龙

介绍 两个按键一个往左,一个往右 亮灯读IC 背面读ID,中间有隔磁贴 读卡、复制卡、复制密钥卡 IC 卡 读 连接 app 放到亮灯面,点击读取, 从词典中获取密钥 转储卡片 保存/另存为bin 放入变色龙 点击卡槽管理 等卡片加载完,点击一个卡槽 选择上一步保存的卡 ID 卡(无密钥) 读 点击低频卡信息的读取 保存,输入卡片名称(起个名字) 加密卡 读(三种方式) 读卡 从词典中检索密钥 如果有没有解锁的扇区,点击获取密钥(攻击) 如果等的时间太久就用,嗅探的方式 重新读卡 仅保存 UID,取一个名字 卡槽管理,选择一个卡槽,把保存的卡放进去 点击卡槽中卡片的齿轮 点击小铅笔,滑到最下方,点开收集随机数 把变色龙切换到对应卡槽,对着刷卡的地方贴,每亮一次切一次 在去卡槽管理,卡槽设置,点击卡槽的小铅笔,收集随机数下方多了获取密钥,点一下 关闭未关闭的卡槽设置 从几个随机数中恢复密钥 等进度条走完保存获取的密钥 用获取的密钥创建新词典 这时候再去读卡 选择刚刚保存的字典 从词典中检索密钥,这样会把原有的 x 变成✅ 保存/存bin 关闭搜集随机数 写卡 官方 选择要写的数据 卡片类型:cuid 选 Gen2, 先解卡,如果不是空卡要也是要先获取密钥 点写入 第一次写卡是只把 UID 和密钥写入。也就是完整的数据写不进去,只有每个扇区的密钥和UID(说白了就是卡号) 如果写入失败,再次写入,因为这次有卡的密钥数据了 写入成功 NFCtool 往手机、手表、手环写卡 找一张空白卡 把数据,或者原来的那张卡的UID 写入卡里,也就是不写数据,光写 0 扇区 在手环上创建一张卡片,先把UID 复制进去 然后手环打开那个卡片,用变色龙配合写卡软件把完整的数据写进去 (原理:因为直接往里面写的话,手环里面创建的是授权卡,授权卡的 0 扇区不会变,把其他扇区的数据复制进去之后,0 扇区不变还是刷不了,所以就是先复制0扇区,然后复制数据) ...

July 2, 2026

Steam 2FA

Steam 2FA密钥的获取过程 本文实现的目标:创建Steam APP令牌的时候获取到密钥,给自己的服务使用。让两边都能正常工作。 前提:Steam TOTP 非标准算法,你的密码存储服务/认证器需要支持Steam令牌码。 移除旧令牌。移除时会要求验证,各种验证方式都可以完成移除步骤。 下载ASF,预览版就可以: Releases · JustArchiNET/ArchiSteamFarm · GitHub 配置ASF,只需配置bot就行: ASF web config bot名称不重要。输入steam用户名密码并选择Enable启用这个配置(不要把用户名输错成昵称)。点击Download下载这个配置文件,文件名:[bot名称].json。 ASF解压后,到它的config目录,把下载的json配置文件放进去。 在开始前,请确保启用加速或其他解决Steam访问问题的工具,否则可能无法建立连接。 启动ASF根目录下的 ArchiSteamFarm.exe,此时应该会需要你输入一个通过邮箱/短信发送的验证码,请输入来完成登录。 按“C”进入命令输入模式,输入 2fainit [bot名称] 此时如果有邮箱/短信发送的验证码,请忽略。 打开手机steam,添加一个新令牌并按照正常流程完成绑定。 继续在 ArchiSteamFarm.exe 界面输入命令:2fafinalized [bot名称] <刚刚配置的手机令牌码> (我只有一个bot,没写bot名也不要紧) 如果没有错误,查看config目录中应该会有 [Bot名称].maFile.NEW,使用文本编辑器打开它。 在文件中会看到这样的字段:"uri": "otpauth://totp/Steam:steamid?secret=********************************&issuer=Steam" 这里secret的值就是需要的密钥。 比如 Bitwarden / Vaultwarden 中就是 steam://******************************** 到这里配置就完成了,Steam令牌码和第三方验证器会显示相同的验证码。 参考:https://meta.appinn.net/t/topic/79043

April 19, 2026

BFC

BFC(Block Formatting Context)直译为 “块级格式化上下文”,它是页面上的一个隔离的独立容器 创建 BFC: float 不为 none position: absolute 或 position: fixed display: inline-block overflow 不为 visible,如 hidden、auto、scroll BFC 的作用 防止 margin-top / margin-bottom 外边距塌陷 <style> .box { width: 200px; height: 50px; margin: 50px; border: 1px #fff solid; } </style> <body> <div class="container"> <div class="box">box1</div> </div> <div class="container"> <div class="box">box2</div> </div> </body> .container { overflow: hidden; /* 触发BFC 解决以上边距重叠问题 */ } 清除内部浮动,解决父元素高度塌陷 <style> .container { border: 1px solid red; width: 400px; } .box { border: 1px green solid; float: left; /* 浮动导致父元素内容塌陷 */ width: 100px; height: 100px; background: skyblue; } </style> <body> <div class="container"> <div class="box"></div> <div class="box"></div> <div class="box"></div> </div> </body> .container { border: 1px solid green; width: 400px; overflow: hidden; /* 添加overflow:hidden; 创建BFC,清除浮动所带来的塌陷 */ } 避免元素被浮动元素覆盖 ...

April 15, 2026

AI SDK

安装AI工具包 https://ai-sdk.dev/ 安装依赖项 npm install ai @ai-sdk/react zod https://ai-sdk.dev/docs/getting-started/tanstack-start 配置.env app/api/chat/route.ts import { convertToModelMessages, streamText, UIMessage } from "ai"; import { createDeepSeek } from "@ai-sdk/deepseek"; // Allow streaming responses up to 30 seconds export const maxDuration = 30; const deepseek = createDeepSeek({ apiKey: process.env.DEEPSEEK_API_KEY ?? "", baseURL: process.env.DEEPSEEK_BASE_URL ?? "", }); export async function POST(req: Request) { const { messages }: { messages: UIMessage[] } = await req.json(); const result = streamText({ model: deepseek("deepseek-chat"), system: "You are a helpful assistant.", messages: await convertToModelMessages(messages), }); return result.toUIMessageStreamResponse(); } https://ai-sdk.dev/docs/ai-sdk-ui/chatbot 页面 page.tsx "use client"; import { useChat } from "@ai-sdk/react"; import { useEffect, useRef, useState } from "react"; import EastIcon from "@mui/icons-material/East"; export default function Page() { const [model, setModel] = useState("deepseek-v3"); const [input, setInput] = useState(""); const { messages, sendMessage } = useChat({}); const handleChangeModel = () => { setModel(model === "deepseek-v3" ? "deepseek-r1" : "deepseek-v3"); }; const handleSubmit = () => { if (input.trim()) { sendMessage({ text: input }); setInput(""); } }; const endRef = useRef<HTMLDivElement>(null); useEffect(() => { if (endRef.current) { endRef?.current?.scrollIntoView({ behavior: "smooth" }); } }, [messages]); return ( <div className="flex flex-col h-screen justify-between items-center"> <div className="flex flex-col w-2/3 gap-8 overflow-y-auto justify-between flex-1"> <div className="h-4"></div> <div className="flex flex-col gap-8 flex-1"> {messages?.map((message) => ( <div key={message.id} className={`rounded-lg flex flex-row ${message?.role === "assistant" ? "justify-start mr-18" : "justify-end ml-10"}`} > <p className={`inline-block p-2 rounded-lg ${message?.role === "assistant" ? "bg-blue-300" : "bg-slate-100"}`} > {message.parts.map((part, index) => part.type === "text" ? ( <span key={index}>{part.text}</span> ) : null, )} </p> </div> ))} </div> <div className="h-4" ref={endRef}></div> </div> {/* 输入框 */} <div className="flex flex-col items-center justify-center mt-4 shadow-lg border-[1px] border-gray-300 h-32 rounded-lg w-2/3"> <textarea className="w-full rounded-lg p-3 h-30 focus:outline-none" value={input} onChange={(e) => setInput(e.target.value)} ></textarea> <div className="flex flex-row items-center justify-between w-full h-12 mb-2"> <div> <div className={`flex flex-row items-center justify-center rounded-lg border-[1px] px-2 py-1 ml-2 cursor-pointer ${model === "deepseek-r1" ? "border-blue-300 bg-blue-200" : "border-gray-300"}`} onClick={handleChangeModel} > <p className="text-sm">深度思考(R1)</p> </div> </div> <div className="flex items-center justify-center border-2 mr-4 border-black p-1 rounded-full" onClick={handleSubmit} > <EastIcon></EastIcon> </div> </div> </div> </div> ); }

March 29, 2026

eventLoop

March 29, 2026

NeetCode Roadmap

第一阶段:核心基础 Arrays & Hashing (数组与哈希表) Two Pointers (双指针) Stack (栈) 第二阶段:线性结构进阶 Binary Search (二分查找) Sliding Window (滑动窗口) Linked List (链表) 第三阶段:树与堆 (核心枢纽) Trees (树) Tries (前缀树) Heap / Priority Queue (堆/优先队列) Backtracking (回溯) 第四阶段:高级算法与图论 从堆延伸: Intervals (区间) Greedy (贪心) Advanced Graphs (高级图论) 从回溯延伸: Graphs (图) 1-D DP (一维动态规划) 第五阶段:深度优化与综合 2-D DP (二维动态规划) Bit Manipulation (位运算) Math & Geometry (数学与几何) 合并两个有序链表 function mergeTwoLists(list1, list2) { // 递归终止:其中一个链表为空,直接返回另一个 if (!list1) return list2; // list1 空了,list2 剩下的全接上 if (!list2) return list1; // list2 空了,list1 剩下的全接上 // 比较头节点,小的作为当前节点 if (list1.val <= list2.val) { // list1 小,list1 当头 list1.next = mergeTwoLists(list1.next, list2); // list1.next 指向合并后的结果 return list1; // 返回当前头节点 } else { // list2 小,list2 当头 list2.next = mergeTwoLists(list1, list2.next); // list2.next 指向合并后的结果 return list2; // 返回当前头节点 } } 执行流程: ...

March 29, 2026

Taildwind CSS

1. 尺寸与定位 (Sizing & Layout) h-screen: 高度等于 100vh(视口高度)。 h-min-screen: 最小高度等于 100vh(保证至少撑满屏幕,内容多时可扩展)。 w-screen: 宽度等于 100vw(视口宽度)。 w-3/4: 宽度设置为 75%。 h-full: 高度设置为 100%(相对于父元素高度)。 w-full: 宽度设置为 100%。 gap-4: 网格或弹性布局的间隙大小(通常为 1rem / 16px)。 2. 背景与边框 (Background & Borders) bg-slate-50: 背景颜色设为极浅的石板色。 bg-white: 背景颜色设为白色。 hover:bg-slate-200: 鼠标悬停时背景变为浅灰色(石板色 200)。 rounded-full: 彻底圆角(通常用于制作圆形按钮或药丸形状)。 rounded-md: 中等圆角(标准卡片或按钮常用)。 3. 间距 (Spacing) p-1: 四周内边距(Padding)为 0.25rem / 4px。 p-4: 四周内边距为 1rem / 16px。 px-4: 左右(水平方向)内边距为 1rem / 16px。 4. 文本样式 (Typography) text-2xl: 字体大小设置为 1.5rem / 24px,行高 2rem。 font-bold: 字体加粗。 text-xs: 最小字体大小(通常为 12px)。 tracking-widest: 字符间距最大化(增加字母之间的空隙)。 text-gray-500: 文字颜色设为中灰色。 5. 响应式与复杂布局 (Responsive & Advanced) sm:w-1/2: 在 sm 屏幕(≥640px)及以上时,宽度为 50%。 lg:w-1/5: 在 lg 屏幕(≥1024px)及以上时,宽度为 20%。 flex-row: 弹性布局方向为水平行。 scroll-auto: 溢出时根据内容自动显示滚动条。 cursor-pointer: 鼠标悬停时显示小手图标(点击反馈)。 line-clamp-1: 文本超出 1 行时显示省略号。 line-clamp-2: 文本超出 2 行时显示省略号。

March 29, 2026

V8 引擎的底层逻辑

March 29, 2026

var_let_const 的区别

March 29, 2026

作用域

March 29, 2026