USB 存储设备的无代码 kext

2024-02-22

在一个项目中,我最近尝试通过 osx 10.9.5 上的 libusb 访问 USB 存储设备。但显然一些默认驱动程序声称该设备,我无法访问它。当我尝试通过 libusb 访问它时,它返回我有“权限不足”。

当我在 Ubuntu 中执行 (java) 应用程序时,一切都按预期运行。

我在互联网上的研究表明,提供与较高探测分数上的设备相匹配的无代码 kext 将阻止默认驱动程序声明该设备。这将完全解决问题,因为卸载 IOUSBMassStorage kext 使得我们可以使用设备执行所需的操作。

我创建无代码 kext 的尝试并没有像我希望的那样成功,因为它似乎既不会在启动时加载,也不会在我使用时加载kextload。至少我是这么想的,因为我无法卸载它,也无法在列出的任何地方找到它。

我的 Info.plist 的最新版本如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>OSBundleLibraries</key>
    <dict/>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleGetInfoString</key>
    <string>Test USB Stick</string>
    <key>CFBundleIdentifier</key>
    <string>de.mischok.testkext</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>Test USB Device</string>
    <key>CFBundlePackageType</key>
    <string>KEXT</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>1.0.0</string>
    <key>IOKitPersonalities</key>
    <dict>
        <key>Device Driver</key>
        <dict>
            <key>CFBundleIdentifier</key>
            <string>de.mischok.testkext</string>
            <key>IOClass</key>
            <string>IOUSBUserClientInit</string>
            <key>IOProviderClass</key>
            <string>IOUSBDevice</string>
            <key>idProduct</key>
            <integer>357</integer>
            <key>idVendor</key>
            <integer>4871</integer>
            <key>bcdDevice</key>
            <integer>4352</integer>
            <key>bConfigurationValue</key>
            <integer>1</integer>
            <key>bInterfaceNumber</key>
            <integer>0</integer>
        </dict>
        <key>Interface Driver</key>
        <dict>
            <key>CFBundleIdentifier</key>
            <string>de.mischok.testkext</string>
            <key>IOClass</key>
            <string>IOUSBUserClientInit</string>
            <key>IOProviderClass</key>
            <string>IOUSBInterface</string>
            <key>idProduct</key>
            <integer>357</integer>
            <key>idVendor</key>
            <integer>4871</integer>
            <key>bcdDevice</key>
            <integer>4352</integer>
            <key>bConfigurationValue</key>
            <integer>1</integer>
            <key>bInterfaceNumber</key>
            <integer>0</integer>
        </dict>
    </dict>
    <key>OSBundleRequired</key>
     <string>Local-Root</string>
</dict>
</plist>

跑步时sudo kextutil -t -n /path/to/my.kext返回这些诊断信息:

Diagnostics for /Users/user/Desktop/testv1-0.kext:
Warnings: 
    Personality CFBundleIdentifier names a kext that doesn't declare an executable: 
        'Interface Driver' -> 'de.mischok.testkext'
        'Device Driver' -> 'de.mischok.testkext'

Code Signing Failure: not code signed
Warnings: 
    Personality CFBundleIdentifier names a kext that doesn't declare an executable: 
        'Interface Driver' -> 'de.mischok.testkext'
        'Device Driver' -> 'de.mischok.testkext'

/Users/user/Desktop/testv1-0.kext appears to be loadable (including linkage for on-disk libraries).

正如它所说的 kext 应该是可加载的,我认为它应该可以工作。但是当使用以下命令加载 kext 时,system.log 会记录这一点,而不是工作sudo kextload /path/to/my.kext:

Nov  5 12:28:58 users-MacBook-Pro.local sudo[528]: user : TTY=ttys000 ; PWD=/Users/user ; USER=root ; COMMAND=/sbin/kextload /Users/user/Desktop/testv1-0.kext
Nov  5 12:28:58 users-MacBook-Pro.local com.apple.kextd[12]: WARNING - Invalid signature -67062 0xFFFFFFFFFFFEFA0A for kext "/Users/user/Desktop/testv1-0.kext"

由于这只是一个警告,我认为它已成功加载。但一旦我插入设备,USB 探测器输出如下所示:

Nov  5 12:57:11.911  [6]    Device Descriptor Dump
Nov  5 12:57:11.911  [6]        bLength 18
Nov  5 12:57:11.911  [6]        bDescriptorType 1
Nov  5 12:57:11.911  [6]        bcdUSB 768 (0x0300)
Nov  5 12:57:11.911  [6]        bDeviceClass 0
Nov  5 12:57:11.911  [6]        bDeviceSubClass 0
Nov  5 12:57:11.911  [6]        bDeviceProtocol 0
Nov  5 12:57:11.911  [6]        bMaxPacketSize0 9
Nov  5 12:57:11.911  [6]        idVendor 4871 (0x1307)
Nov  5 12:57:11.911  [6]        idProduct 357 (0x0165)
Nov  5 12:57:11.911  [6]        bcdDevice 4352 (0x1100)
Nov  5 12:57:11.911  [6]        iManufacturer 1 
Nov  5 12:57:11.911  [6]        iProduct 2 
Nov  5 12:57:11.911  [6]        iSerialNumber 3
Nov  5 12:57:11.911  [6]        bNumConfigurations 1
Nov  5 12:57:11.916  [5]    Finding device driver for DEVICE, matching personality using com.apple.iokit.IOUSBUserClient, score: 106999, wildCard = 3
Nov  5 12:57:11.916  [6]        Matched: idVendor (4871) idProduct (357) bcdDevice (4352) 
Nov  5 12:57:11.916  [6]        Didn't Match: nothing
Nov  5 12:57:11.917  [5]    Finding device driver for DEVICE, matching personality using com.apple.driver.AppleUSBComposite, score: 50000, wildCard = 0
Nov  5 12:57:11.917  [6]        Matched: bDeviceClass (0) bDeviceSubClass (0) 
Nov  5 12:57:11.917  [6]        Didn't Match: nothing
Nov  5 12:57:11.918  [5]    Finding device driver for DEVICE, matching personality using com.apple.driver.AppleUSBCDC, score: 60000, wildCard = 0
Nov  5 12:57:11.918  [6]        Matched: bDeviceClass (0) bDeviceSubClass (0) bDeviceProtocol (0) 
Nov  5 12:57:11.918  [6]        Didn't Match: nothing

这些是唯一发生的个性匹配,所以我想知道,我应该做什么才能让我的驱动程序与我的设备甚至加载相匹配?


  1. Use kextutil, not kextload。它提供了更好的诊断。
  2. 指定 IOClass 的 I/O Kit 个性IOUSBUserClientInit必须指定一个CFBundleIdentifier of com.apple.iokit.IOUSBUserClient因为那是那个班级居住的地方。
  3. 要加载未签名的 kext,它必须驻留在/System/Library/Extensions在 10.9.x 上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

USB 存储设备的无代码 kext 的相关文章

随机推荐

  • 递归读取文件夹并对每个文件夹执行命令

    我试图递归到文件夹 然后使用 bash 脚本在它们上运行命令 有什么建议么 如果您想递归到目录 对其中找到的每个文件执行命令 我会使用find我认为 命令 而不是使用 shell 脚本编写任何内容 该命令可以接收很多参数 例如type过滤返
  • XNA Content.Load 如何操作?

    我只是好奇它是否在每次调用时实际上将资源加载到内存中 或者如果它查找它 发现它是否已加载 如果未加载 则加载一次并仅保留引用 以便第二次调用它只是获取对它的引用 它会跟踪已加载的内容 并且如果之前已加载过该对象 则仅返回对同一对象的引用 这
  • OpenCV 和 Python - 图像太大而无法显示

    我的图像尺寸为 6400 3200 而我的屏幕为 1280 x 800 因此 仅需要调整图像大小以供显示 我正在使用 Python 和 OpenCV 2 4 9 根据OpenCV 文档 http docs opencv org 2 4 mo
  • Docker-compose 异常

    溢出 我尝试将 docker compose 脚本从我的 ubuntu 工作站传输到我的 Fedora 笔记本电脑 当击中时 docker compose up 我得到以下异常 polito localhost dev docker com
  • 为什么 Android Studio 无法引用仅包含在 build.gradle 中的库?

    在我的应用程序中 我使用 Guava 库 我在我的文章中引用了它build gradle文件仅如下 dependencies compile com google guava guava 13 0 1 我的应用程序重建并运行良好 然而 当我
  • 使用条件运算符时没有隐式转换[重复]

    这个问题在这里已经有答案了 我有以下课程 abstract class AClass class Foo AClass class Bar AClass 当我尝试使用它们时 AClass myInstance myInstance true
  • 通过拖放到批处理文件上运行命令

    我想将文件拖放到批处理文件上 以便对其运行以下命令 如何在删除的文件上运行命令 PotreeConverter exe
  • 如何在 OpenShift 上部署多模块 Maven Spring Boot 应用程序

    我有一个要部署的多模块 spring boot 项目开放式换档 https www openshift com 我也在那里安装了 Jenkins 源代码托管在 Github 上 每个模块都包含一场战争 以便拥有微服务结构
  • C++ 冒泡排序双向链表

    我知道冒泡排序可能不是最快的方法 但它是可以接受的 我只是在将算法调整为数组中的双链接列表时遇到麻烦 我的双链表有一个 int 类型和一个 string 类型来保存数字和单词 我的列表是用插入排序来排序的 我编写了该插入排序来按字母顺序排序
  • 当用户在 Safari/Chrome 中关闭窗口时,我可以弹出确认对话框吗?

    在 IE 和 FF 中 我可以将事件处理程序附加到 onBeforeUnload 并通过将字符串传递给事件的属性 用户将看到一个对话框 询问他是否要继续 卸载 关闭窗口或导航离开 Safari 和 Chrome 不支持 onBeforeUn
  • 如何替换雪花中的重音字符?

    我正在尝试将列中的重音字符替换为 普通 字符 select 我想要一些会返回 aaaaaa 的操作 刚刚和我的一位同事找到了解决方案 select translate aeiouaoaeoac 我们还可以添加一个lower 使其推广到更多案
  • C++ 中的声明点

    为什么没有输出101当我分配了之前的x到新的x int x 101 int x x std cout lt lt x lt lt std endl 输出 垃圾 422634 我以为是第二个x将被初始化为101但它没有初始化 注 本例的解决方
  • 我还应该使用 Silverlight/XBAP

    我们需要创建一个可以通过浏览器使用但也可以离线使用的应用程序 我们的客户将使用浏览器版本进行计算 每个客户都需要使用用户名和密码登录应用程序 离线版本将由我们自己的员工使用 他们需要能够在未连接到网络的情况下使用此版本 应用程序所需的数据将
  • PHP 中的这个语法( page = $page ? $page : 'default' )是什么意思?

    我是 PHP 新手 我在中遇到了这个语法WordPress http en wikipedia org wiki WordPress 该代码的最后一行有什么作用 page SERVER REQUEST URI page str replac
  • 如何在WCF中返回数据集(xsd)

    我有一个库 它通过某种方法返回数据集 我需要通过 WCF 公开此数据集 客户端应用程序将使用它作为报告生成器 准确地说是 DevExpress XtraReport 的数据源 DataSet 包含大约 58 个 DataTable 其中包括
  • MySql 索引填充因子?

    在MySql中创建索引时如何指定填充因子 你不知道 http dev mysql com doc refman 5 0 en create index html http dev mysql com doc refman 5 0 en cr
  • 父子类关系设计模式

    我有一堂课 其中有一个子项目列表 是否有一个我可以复制的设计模式 可以应用于这些类 以便我可以从子级访问父级实例 并且它强制执行诸如无法将子级添加到多个父级等规则 尝试复合设计模式 https www dofactory com net c
  • Android GCM 发送成功,但在某些设备上未收到

    在服务器端 我使用Google提供的GCM服务器1 0 2库 在客户端 我按照提供的方式设置了 GCM官方文档 http developer android com google gcm client html 我的问题是 在大多数设备上一
  • 自定义 Mahapps.MetroWindow 关闭按钮

    我正在使用 Mahapps MetroWindow http mahapps com http mahapps com 来设计我的应用程序外观 现在我正在寻找自定义 X 关闭按钮外观的正确方法 默认情况下 MetroWindow 将自定义样
  • USB 存储设备的无代码 kext

    在一个项目中 我最近尝试通过 osx 10 9 5 上的 libusb 访问 USB 存储设备 但显然一些默认驱动程序声称该设备 我无法访问它 当我尝试通过 libusb 访问它时 它返回我有 权限不足 当我在 Ubuntu 中执行 jav