hardware - 你见过或做过的最酷的黑客攻击是什么?

标签 hardware

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




作为程序员,我们都编写了一个非常酷的程序或以有趣的方式拼凑一些硬件来解决问题。今天我在思考这些 hack 以及它们中的一些是如何被现代技术弃用的(例如,您不再需要 hack 您的 Tivo 来添加网络端口)。在软件世界中,我们现在认为在网页上拖放之类的事情是理所当然的,但不久前这也是一个非常令人兴奋的黑客攻击。

我见过的最巧妙的硬件黑客之一是几年前由一家电信公司的前同事完成的。他的办公室里有一台小型可移植电视,他会在工作时整天看它。为了摆脱它,他将一个开关连接到通过他 table 底下的脚启动的开/关。

您个人见过或做过的最酷的硬件或软件黑客攻击是什么?你现在在做什么黑客?

最佳答案

我记得这个 hack 是 Bob Smith 写的,他做了一个名为 386MAX(或“386 to the Max”)的旧 DOS 时代内存管理器。它不是产品的一部分,而是一个他制作并张贴在某处的小实用程序。然而,在网络上,我能找到的对这项技术的唯一引用是 DDJ Undocumented Corner来自 November 1996 的专栏通过罗伯特柯林斯。

问题

在英特尔推出 CPUID instruction 之前,很难检查系统上 CPU 的确切类型和修订级别。事实证明,在 386 及更高版本的大多数版本中,实际上有一个 CPU ID,但它仅在特定时间可见:就在处理器在 EDX 寄存器中重置之后。 (假设计算机的 BIOS 将是唯一合法对此感兴趣的软件)。

问题:如果我们不是 BIOS,普通程序如何检索这个寄存器值?

背景 Material

这种黑客攻击依赖于 IBM PC 兼容计算机的六个不同特性。它们如下:

  • 从 IBM AT 及更高版本开始,有一种方法可以访问 independently disable the A20 address line在公交车上。
  • 大多数计算机没有在 BIOS ROM 正下方的非常高的内存地址中安装 RAM。
  • 大多数 IBM PC 总线计算机在读取未安装内存的内存位置时返回 0xFF。
  • 0xFF 0xFF 0xFF 等是 Intel CPU 上的非法操作码。
  • 如果您在内存中安装异常处理程序,它会在这个时代的大多数 CPU(386 到 486)软重启后幸免于难。
  • 在软复位或硬复位时,英特尔处理器跳转到位于可寻址内存顶部的一个地址,减去 16 个字节,这就是 BIOS ROM 被放置在那里的原因。

  • 该程序结合了所有这些琐事的知识来实现​​目标。

    黑客

    结果是一个 DOS 命令行程序,它执行以下操作:
  • 安装了非法操作码异常处理程序
  • 关闭总线上的A20地址线
  • 软重启 CPU(我认为这是通过 BIOS 调用)

  • 当软重启发生时,处理器会尝试跳转到内存顶部减去 16 个字节,这是 ROM 启动代码所在的位置。但是,由于 A20 关闭,它实际上会跳到内存顶部减去 16 字节减去 1 兆字节。在大多数 PC 上,那里没有 RAM。所以它会从这个不存在的 RAM 中获取一系列 0xFF 字节,并尝试执行它。这将创建非法操作码异常。

    然后,他的异常处理程序会取出 EDX(CPUID)的值并将其存放在他可以找到的地方。然后它会清理困惑(重新打开 A20,从保护模式返回到 DOS 的实模式)并将控制权返回给原始代码。

    当它奏效时,简直是天才。瞧,这是一个简单的命令行 DOS 程序,可以为您提供 CPUID 值。

    当然,不可避免地会有一些“不太兼容”的 PC,当你运行它时会严重崩溃。呃,好吧。

    关于hardware - 你见过或做过的最酷的黑客攻击是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/192479/

    相关文章:

    .net - SMS网关设备

    hardware - 你能推荐一个vhdl源代码的网站吗?

    c - PThreads上下文中的多处理器与多线程

    interface - 与外部设备进行 I/O 的硬件

    linux - 您是否应该在Linux服务器上同时使用两个NIC?

    C++ volatile : guaranteed 32-bit accesses?

    hardware - 有没有办法以编程方式访问 DELL XPS 媒体按钮

    java - 通过线路输入或麦克风输入以 Java 进行连续音频录制

    c - 编写 FPGA 电路时从哪里开始?

    java - 如何用Java制作最简单的软件控制ON/OFF硬件?