为开源的 C# USB 库 Device.Net 添加了根据名称过滤设备的功能
修改后 Device.Net 库的 Github 地址:
https://github.com/wudicgi/Device.Net-display-name-filtering-enhanced

2020-06-07 添加:
今天在 BeatShow 中完善 USB 设备管理相关代码时,发现之前所修改的版本获取设备的 DisplayName 不太方便, IsDefinitionMatch() 方法中也没有检查 DisplayName 是否匹配,今天把这两个问题都改了。
当前语言: 中文 (简体) · also available in: English
BeatShow 的一种新的硬件形式
新硬件,名字还没确定。这个设备是 USB 供电+通信的,Win7 以上的系统免驱。


在优酷上观看: https://v.youku.com/v_show/id_XNDc2ODI4MjkxNg==.html
当前语言: 中文 (简体)
ATSHA204A 简明使用手册 (1/2: 配置项和常用命令)
本文共分 2 部分:

前言

在 BeatShow 硬件中,我需要使用 ATSHA204A 为 ESP8266 和 STM32 的固件提供一定的验证功能,以尽量保护硬件不被克隆。当然,我没有使用 MCU 验证 ATSHA204A 的这种方式,而是选择在通信过程中,由 PC 端来验证 ATSHA204A. 使用这种方式的好处在于, PC 端软件是可以通过混淆、虚拟化、加壳等手段来增加破解难度的,而且随着软件升级还可以修改验证时使用的数据,灵活度更高一些。

确定使用方式后,我本身其实只需要在生产阶段向 ATSHA204A 写入一些预先计算好的密钥值,然后在使用阶段由 PC 端软件通过指令交互来验证这些密钥值是否正确就可以了。但是 ATSHA204A 本身的功能比较多,配置也比较灵活,直接看 Atmel (当然被收购之后应该说 Microchip 了) 的 datasheet 容易被绕晕。网上能搜到的文章感觉写得也不够清楚,或者比较散,可能还不如直接看 datasheet. 因此我在阅读 datasheet 时专门梳理了一些我认为比较重要的概念和细节,并经过整理形成了本篇《ATSHA204A 简明使用手册》。

AT88CK590 评估板

Microchip 有一个 AT88CK590 评估套件 (Evaluation Kit), 可以用于评估 ATSHA204A, ATAES132A 和 ATECC508A 这三颗芯片。同时还可以自己打开外壳,在尾部的焊盘焊上插针,外接芯片使用。



有了这个评估套件后,就可以使用官方的 ACES CE 软件了,否则找不到设备的话是进入不了主界面的。



ATSHA204A 中的几个区域

Configuration Zone

Configuration Zone 是芯片内 EEPROM 中的一块存储配置信息的区域,共 88 bytes。整个 Configuration Zone 中的数据都是一直可读的,而且除了开头部分的 SN, RevNum 和 I2CEnable 不可修改外,其他数据在 Configuration Zone 未被锁定时是可写的。



OTP Zone

OTP Zone 是 EEPROM 中的一块 32 * 2 = 64 bytes 大小的区域。在 Configuration Zone 已锁定,但 OTP Zone 未锁定时可写。



Data Zone

Data Zone 是 EEPROM 中的一块 32 * 16 = 512 bytes 大小的区域。



TempKey

TempKey 是芯片内 SRAM 中的一块区域,数据长度为 32 bytes, 此外还有一些像 SlotID, SourceFlag, Valid 这样的一些状态数据。用于存储 Nonce 和 GenDig 命令的结果。



区域锁定

在通过 Lock 命令写入 LockConfig 来锁定 Configuration Zone 前,OTP Zone 即不能读也不能写。只有在锁定 Configuration Zone 后,但还未通过 Lock 命令写入 LockValue 来锁定 OTP Zone 前,OTP Zone 可以通过 Write 命令写入。

ATSHA204A 的常用命令

ATSHA204A 共有 14 个命令,如下 (粗体: 较常用灰色: 不推荐使用):

  • CheckMac -- 检查 MAC 并返回 bool 结果,不推荐使用
  • DeriveKey -- 从 target key 或 parent key 分散出一个 target key
  • DevRev -- 获取 4 字节的芯片修订编号,软件不应该使用这个值
  • GenDig -- 从一个随机或输入的种子和一个 key 生成一个数据保护摘要
  • HMAC -- 计算 HMAC, 无兼容需求时不如使用 MAC 命令
  • Lock -- 锁定 Configuration Zone 或 Data and OTP Zone
  • MAC -- 使用 key 和其他内部数据计算一个 SHA-256 值,作为 MAC 用于验证
  • Nonce -- 生成一个 32 字节的随机数 (返回),和一个 nonce (内部存储于 TempKey, 不返回)
  • Pause -- 暂停,MCU 只接一个 ATSHA204A 时用不到
  • Random -- 生成一个 32 字节的随机数,不推荐使用,没有 Nonce 命令 TempKey 保密的作用
  • Read -- 读取 EEPROM 中的数据
  • SHA -- 计算 SHA-256 值,完全可以在 MCU 中算
  • UpdateUltra -- 用于更新配置区域中的 UserExtra 和 Selector 字节,一般不用
  • Write -- 写入数据到 EEPROM

不推荐使用的命令后边就不再介绍了,本文主要针对硬件防克隆这一应用介绍常用的几个命令。

使用阶段的常用命令

(符号约定: a || b 表示 a 与 b 相连接,'12EF' 中的 12, EF 为十六进制数据 0x12, 0xEF.)

使用阶段的常用命令有 Nonce, MAC, GenDig 和 DeriveKey.

Nonce

Nonce 是 ATSHA204A 的 datasheet 中随处可见的一个词,根据 Wiktionary 上的解释,"The cryptography sense is commonly said to be a contraction of number used once, although this is probably incorrect." 把 nonce 理解成只使用一次的随机数在 ATSHA204A 中是非常恰当的,比使用 random number 多了只使用一次的含义。

Nonce 命令会生成一个 nonce, 以便在后续的 GenDig, MAC, HMAC, Read 或 Write 命令中使用。生成结果 (nonce) 会存储在 TempKey 中,同时将生成过程中产生的随机数 RandOut 返回。

Mode 参数的低 2 位指定 nonce 的生成方式:
0b00 生成一个新的随机数,将其和命令数据 NumIn 合并后,结果存储在 TempKey 中。在产生随机数前如果有必要则自动更新随机数发生器的 seed 值(推荐的方式,安全度高)。
RandOut = 新生成的随机数 (32 bytes)
TempKey = SHA256(RandOut || NumIn (20 bytes) || ...)
0b01 同 0b00, 除了生成随机数前不更新随机数发生器的 seed 值,直接使用原有的 seed 值。
RandOut = 新生成的随机数 (32 bytes)
TempKey = SHA256(RandOut || NumIn (20 bytes) || ...)
0b11 透传模式,直接将命令数据 NumIn 写入到 TempKey 中。
RandOut = '00'
TempKey = NumIn

MAC

使用芯片内存储的 key 或其他数据和命令数据 Challenge 计算一个 SHA-256 值,作为 MAC 返回。

Response = SHA256(
    SlotID 指定的内部 key 或 TempKey ||
    命令数据 Challenge 或 TempKey (推荐) ||
    ... ||
    (OTP 的前 11 bytes) 或 (OTP 的前 8 bytes || '000000') 或 (11 bytes '00') ||
    (SN 调整过顺序的所有 9 bytes) 或 (SN 的最后 1 byte || 4 bytes '00' || SN 的前 2 bytes || 2 bytes '00')
)

GenDig

生成摘要,使用内部存储的数据 (配置区域数据,OTP 数据,或 key 值) 和 TempKey 的当前内容计算一个 SHA-256 值,并将其更新到 TempKey 中。

执行该命令可以为需要使用 TempKey 值的命令 (如 MAC 和 DeriveKey 命令) 引入额外的参与运算的数据。

如果 Zone 参数为 0x02 (Data), 且SlotConfig<SlotID>.CheckOnly 位为 1, 则摘要按如下内容计算:

TempKey = SHA256(
    SlotID 指定的内部 key ||
    命令数据 OtherData ||
    (SN 的最后 1 byte || SN 的前 2 bytes) ||
    ... ||
    TempKey
)

否则按如下方式计算:

TempKey = SHA256(
    Config 或 OTP 或 Data.slot 或 TransportKey ||
    ... ||
    (SN 的最后 1 byte || SN 的前 2 bytes) ||
    ... ||
    TempKey
)

DeriveKey

分散密钥,使用当前的一个 key 值 (source key) 和 TempKey 中存储的 nonce 计算一个 SHA-256 值,并将其写入到 target key 的 slot 中。

结果写入到哪个 slot 由命令参数 TargetKey 指定,SlotConfig<TargetKey>.Bit13 必须已被置位。

如果 SlotConfig<TargetKey>.Bit12 为 0, 则参与 hash 计算的 source key 就是 target key (即 key rolling, 密钥滚动操作)。
如果该位为 1, 则 source key 为该 target key 的 parent key, 通过 SlotConfig<TargetKey>.WriteKey 中指定的 slot 号来查找 (即密钥创建操作).

如果 SlotConfig<TargetKey>.Bit15 为 1, 则必须计算并提供命令数据 MAC 用于验证。
MAC = SHA256(ParentKey, Opcode, Param1, Param2, SN<8>, SN<0:1>)
其中 ParentKey 是 SlotConfig<TargetKey>.WriteKey 中指定的 slot 号的 key.

target key = SHA256(
    source key (target key 或 parent key) ||
    ... ||
    (SN 的最后 1 byte || SN 的前 2 bytes) ||
    ... ||
    TempKey
)

生产阶段的常用命令

生产 (数据个人化) 阶段的常用命令有 Write, Read 和 Lock. 待更新下一篇时再补充本部分内容。
当前语言: 中文 (简体)
尝试了一下根据鬼畜小课堂的扒谱教程进行扒谱
昨天看到了 B 站 UP 主 还有一天就放假了 发的一个 《【鬼畜小课堂018】使用FL Studio扒谱》教程,今天就试了一下。

感觉对于我这种完全不懂乐理,也听不出 do re mi 的人来说还是挺适用的。下边是我扒的 Pain in My Heart 中的一个小片段:


在优酷上观看: https://v.youku.com/v_show/id_XNDc2ODI5ODkyMA==.html
当前语言: 中文 (简体)
你所没见过的银河 SOHO...
晚上拍的,你所没见过的银河 SOHO...


在优酷上观看: https://v.youku.com/v_show/id_XNDc2ODI5MzMzNg==.html

本来想一圈一圈 PS 的,但 GoPro 夜间拍出来的画质还是比较渣,就先不弄了。
当前语言: 中文 (简体)
配置出一个更好用的 Windows 10
历史相关文章:
2013-01-28: 《将 Windows 7 配置成 Windows XP 的样子 (同时关闭一些恼人的功能)
2015-10-31: 《将 Windows 7 配置成 Windows 8.1 的样子
2016-01-03: 《配置出一个更好用的 Windows 8.1

以下配置过程是我在配置 Windows 10 系统的过程中记录下来的,仅供参考。

1. 调节 DPI

  • 右键点击桌面 -> 显示设置 -> 缩放与布局
  • 更改文本、应用等项目的大小 -> 选择一个文字大小适中的缩放比例
  • 点击缩放比例选择下方的“高级缩放设置”
  • 修复应用缩放 -> 允许 Windows 尝试修复应用,使其不模糊 -> 打开
  • 注销并重新登入
  • 右键点击桌面 -> 查看 -> 选择“小图标”
  • 右键点击桌面 -> 查看 -> 开启“自动排列图标”

2. 禁用动画效果

  • 右键点击开始菜单按钮 -> 文件资源管理器, 或按 Win+E 快捷键打开资源管理器
  • 右键点击左侧导航窗格的“此电脑” -> 属性 -> 高级系统设置
  • 高级 -> 性能 -> 设置... -> 视觉效果 -> 取消所有动画效果的选择

3. 设置 UAC

  • 开始 -> 设置 -> 控制面板 -> 用户帐户 -> 更改用户帐户控制设置
  • 选择“仅当应用尝试更改计算机时通知我 (不降低桌面亮度)”

4. 安装 Open-Shell

  • 从 github 上 Open-Shell-Menu 项目的 Releases 页面 下载安装程序 OpenShellSetup_xxx.exe
  • 安装 Open-Shell, 最好选择不安装其中的 Classic IE 和 Open-Shell Update 组件.

关于 Open-Shell
Ivo Beltchev 的 Classic Shell 已经于 2017 年 12 月停止开发,原因是 Win10 现在滚动更新得太频繁了,而且很多组件在由经典 Win32 程序向 UWP 程序迁移,作者能用于此项目的业余时间也不多,无法持续跟进更新。
Open-Shell 是其他人在 Classic Shell 上 fork 出来的一个分支,宣称会继续开发。不过我看了一下在 github 上的提交历史,到目前为止的修改基本只是替换软件名称,之后是否会持续更新不得而知。

5. 设置开始菜单

  • 开始菜单 -> 程序 -> Open-Shell -> Open-Shell Menu Settings
  • 在 Start Menu Style 选项卡中,选择 Classic style
  • 勾选顶部的 Show all settings
  • 逐个选项卡查看,并按自己的喜好进行配置,也可以导入以前使用过的配置
  • 以下是我自己所进行的设置,供参考:

Special Items
    Computer: 选择 Don't display this item
    取消选择 Show Help and Support
Main Menu
    Show recent or frequent programs: 选择 Don't show
    取消选择 Enable jumplists
General Behavior
    取消选择 Highlight newly installed programs
    取消选择 Check for Windows updates on shutdown
Skin
    选择 Windows 8
Taskbar
    选择 Customize taskbar
        Taskbar look: 选择 Opaque
        Taskbar color: 选择一个较深的颜色,如蓝色主题可使用深蓝色 976600

6. 设置资源管理器

首先,设置 Open-Shell 所提供的选项。

  • 开始菜单 -> 程序 -> Open-Shell -> Classic Explorer Settings
  • 勾选顶部的 Show all settings
  • 逐个选项卡查看,并按自己的喜好进行配置,也可以导入以前使用过的配置
  • 以下是我自己所进行的设置,供参考:

Navigation Pane
    Navigation pane style: 选择 Windows XP Simple
    选择 Don't fade buttons
    选择 Full-size offset for sub-folders
    Auto-navigate to the selected folder: 选择 Always
    Auto-navigation delay: 由默认值 100 改为 200
Title Bar
    选择 Disable breadcrumbs

接着,设置 Windows 资源管理器自身提供的选项。

  • 按 Win+E 快捷键打开资源管理器
  • 右键点击工具栏空白处,取消选择 Classic Explorer Bar
  • 查看 -> 选项,打开文件夹选项对话框
  • 常规 -> 打开文件资源管理器时打开 -> 选择“此电脑”
  • 常规 -> 隐私 -> 取消选择 在“快速访问”中显示最近使用的文件
  • 常规 -> 隐私 -> 取消选择 在“快速访问”中显示常用文件夹
  • 常规 -> 隐私 -> 清除文件资源管理器历史记录 -> 点击“清除”
  • 查看 -> 导航窗格 -> 选择“展开到打开的文件夹”
  • 查看 -> 导航窗格 -> 按个人喜好决定是否选择“显示库”
  • 查看 -> 文件和文件夹 -> 隐藏文件和文件夹 -> 选择“显示隐藏的文件、文件夹和驱动器”
  • 查看 -> 文件和文件夹 -> 选择“用彩色显示加密或压缩的 NTFS 文件”
  • 点击确定按钮,保存设置

17. 设置标题栏和任务栏颜色

  • 右键点击桌面 -> 个性化 -> 颜色
  • 选择颜色 -> Windows 颜色 -> 选择一个较深的蓝色
  • 更多选项 -> 更多选项 -> 透明效果 -> 关闭
  • 更多选项 -> 在以下区域显示主题色 -> 选中“开始菜单、任务栏和操作中心”
  • 更多选项 -> 在以下区域显示主题色 -> 选中“标题栏”

任务栏背景颜色,和活动窗口任务栏按钮颜色的配置
任务栏背景颜色: 在 Open-Shell 的开始菜单设置中 Taskbar -> Customize taskbar -> Taskbar color 所指定的颜色。
任务栏上活动窗口按钮的颜色: 在 Windows 的 个性化 -> 颜色 -> 选择颜色 中所选择的颜色。
这两个颜色应该有良好的区分度,例如状态栏背景使用蓝色的话,活动窗口按钮颜色就使用深蓝色。

7. 设置任务栏

  • 右键点击任务栏空白位置 -> 任务栏设置
  • 在桌面模式下自动隐藏任务栏 -> 打开
  • 使用小任务栏按钮 -> 打开
  • 当我右键单击“开始”按钮或按下 Windows 键 + X 时,在菜单中将命令提示符替换为 Windows PowerShell -> 关闭
  • 合并任务栏按钮 -> 选择“从不”
  • 通知区域 -> 选择哪些图标显示在任务栏上 -> 按自己的喜好设置
  • 通知区域 -> 打开或关闭系统图标 -> 按自己的喜好设置
  • 人脉 -> 在任务栏上显示联系人 -> 关闭
  • 右键点击任务栏空白位置 -> Cortana -> 选择“隐藏”
  • 右键点击任务栏空白位置 -> 取消选择 显示“任务视图”按钮

9. 为任务栏添加快速启动栏

  • 按 Win+E 快捷键打开资源管理器,在地址栏中输入 %APPDATA%\Microsoft\Internet Explorer\Quick Launch 并按回车
  • 复制地址栏中的地址,应为 C:\Users\<你的用户名>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch
  • 右键点击任务栏空白位置 -> 工具栏 -> 选择“新建工具栏...”
  • 将刚才复制的 Quick Launch 目录完整路径粘贴到选择文件夹对话框的地址栏中,按回车,然后点击选择文件夹
  • 右键点击任务栏空白位置 -> 取消选择“锁定任务栏”
  • 拖拽刚才新建的 Quick Launch 工具栏到开始按钮右侧
  • 右键点击 Quick Launch 工具栏 -> 取消选择“显示文本”
  • 右键点击 Quick Launch 工具栏 -> 取消选择“显示标题”
  • 在 %APPDATA%\Microsoft\Internet Explorer\Quick Launch 目录中放置少量自己常用程序的快捷方式,例如浏览器,和使用资源管理器打开 D 盘的快捷方式: C:\Windows\explorer.exe /e,D:\
  • 删除 Quick Launch 目录中原本可能存在的“显示桌面”和“在窗口之间切换”快捷方式
  • 调节 Quick Launch 工具栏所占的宽度,需要来回切换是否锁定任务栏,以调节到宽度合适
  • 右键点击任务栏空白位置 -> 选择“锁定任务栏”
  • 关闭所有已打开的窗口
  • 右键逐一点击任务栏上的程序图标 -> 选择“从任务栏取消固定”

使用快速启动栏,相比将应用固定到任务栏的优势
从 Windows 7 开始,任务栏上的快速启动栏默认就不存在了,转而出现了新的将程序固定到任务栏的用法。这种新的用法有两个问题:
(1) 严重降低了程序切换的效率。尤其是在同一个程序开启了多个窗口的情况下,用户不得不先将鼠标移动到任务栏的图标上,等窗口预览弹出后再选择要切换到哪个窗口。
(2) 各个程序的任务栏按钮宽度可能会不一致。固定到任务栏上的程序在未打开时只显示图标,而任务栏如果设置了显示不隐藏标签,打开的程序是会显示标题文本的。

8. 安装 7+ Taskbar Tweak


10. 设置时间选项

  • 开始 -> 设置 -> 电脑设置 -> 时间和语言
  • 日期和时间 -> 格式 -> 更改日期和时间格式
  • 一周的第一天: 星期日
  • 短日期格式: yyyy-M-d

11. 键盘快捷方式下划线

  • 开始 -> 设置 -> 控制面板 -> 轻松使用设置中心 -> 使键盘更易于使用
  • 取消选择“始终朗读这个部分”
  • 取消选择“始终扫描这个部分”
  • 使鼠标更易于使用 -> 勾选“将窗口移动到屏幕边缘时不要自动排列窗口”
  • 使键盘更易于使用 -> 勾选“给键盘快捷方式和访问键加下划线”

“给键盘快捷方式和访问键加下划线”选项的作用:
(1) 在英文版系统中,只有开启该选项后,像文件右键菜单中的 Rename 才会显示为 Rename,从而能看出键盘快捷键是什么。而中文版系统中,由于一般会使用“重命名(M)”这种形式,是否开启则只看个人喜好,对使用影响不大。
(2) 只有开启该选项后,复选框和桌面图标等控件在获得焦点时,才会显示虚线边框,有助于确认当前获得焦点的控件是哪个,也便于键盘操作。

12. 关闭自动播放

  • 开始 -> 设置 -> 控制面板 -> 自动播放
  • 先点击最下方的“重置所有默认值”按钮,使每个选择框都为“选择默认值”状态
  • 然后取消选中最上方的“为所有媒体和设备使用自动播放”复选框
  • 点击“保存”按钮完成设置

13. 隐藏资源管理器左侧目录树中的 3D 对象、文档、下载等文件夹


14. 禁用压缩文件夹

  • 将如下内容保存为 Disable_ZIP_Compressed_Folders.reg 文件,并导入注册表

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\CompressedFolder\CLSID]

[-HKEY_CLASSES_ROOT\SystemFileAssociations\.zip\CLSID]

  • 将如下内容保存为 Disable_CAB_Files.reg 文件,并导入注册表

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\CABFolder\CLSID]

[-HKEY_CLASSES_ROOT\SystemFileAssociations\.cab\CLSID]

15. 禁用文件夹内容识别

  • Change Folder Template in Windows 10 下载 Reset_Folder_View_Settings_of_All_Folders_to_Default.bat, 并以管理员身份运行
  • 从上一步骤的同一页面下载 All_Folders_Use_General_Items_Folder_Template.bat, 并以管理员身份运行

关于 Windows 的文件夹模板和文件夹内容识别
大概是从 Win7 开始,Windows 默认就会对文件夹进行内容识别,以它认为合适的方式来展示文件列表。比如对于存放了大量 .mp3 音频文件的文件夹,以详细信息方式查看时文件列表标题会由默认的名称、类型、修改日期等变为名称、参与创作的艺术家、唱片集等。十分影响对文件的正常管理操作,对于任何类型的文件,修改日期、文件类型和文件大小信息都是比这些元数据更为重要的。

16. 设置文件夹默认视图

  • 按 Win+E 快捷键打开资源管理器
  • 查看 -> 选项,打开文件夹选项对话框
  • 查看 -> 文件夹视图 -> 点击“重置文件夹”,把所有文件夹都重置为默认视图
  • 点击“确定”按钮,关闭文件夹选项对话框
  • 打开一个普通的文件夹,调整查看类型 (我习惯使用详细列表) 和名称、修改日期、类型等各列的宽度
  • 查看 -> 选项,再次打开文件夹选项对话框
  • 查看 -> 文件夹视图 -> 点击“应用到文件夹”,使所有文件夹都使用刚才设置好的视图
  • 点击“确定”按钮,关闭文件夹选项对话框
  • 关闭资源管理器

17. 设置系统声音

  • 开始 -> 设置 -> 控制面板 -> 声音
  • 声音 -> 声音方案,选择“无声”,点击确定

18. 设置输入法

Win10 上中文输入法的设置方法较为复杂,具体请看之前所发的文章《修改 Windows 10 的中文输入法配置,使其像 Win7, XP 一样易于使用》。
当前语言: 中文 (简体)
更多条目: [1] [2] [3] [4] [5] [6] [7] ... [27]
« 上一页 · 下一页 »