反跟踪,计算机加密反跟踪技术密文技术和实例

计算机加密反跟踪技术密文技术和实例 - 系统安全 - 电脑教程网

计算机加密反跟踪技术密文技术和实例

日期:2007-05-09   荐:
一 )跟 踪 技 术
大家知道DOS中有一个功能强大的动态跟踪调试软件DEBUG,它能够实现对程序的跟踪和逐条运行,其实这是利用了单步中断和断点中断的原因,而且目前的大多数跟踪调试软件都是利用了这两个中断 。

单步中断(INT 1)是由机器内部状态引起的一种中断,当系统标志寄存器的TF标志(单步跟踪标志)被置位时,就会自动产生一次单步中断,使得CPU能在执行一条指令后停下来,并显示各寄存器的内容 。
断点中断(INT 3)是一种软中断,软中断又称为自陷指令,当CPU 执行到自陷指令时,就进入断点中断服务程序,由断点中断服务程序完成对断点处各寄存器内容的显示 。
G命令的执行过程:DEBUG中的G命令是用于运行程序的,但当G命令后面跟有断点参数时,就可使程序运行至断点处中断,并显示各寄存器的内容,这样就可以大大提高跟踪的速度 。它的实现是通过调用断点中断来实现的:DE-BUG首先保存设置的断点处指令,改用断点中断INT 3指令代替,当程序执行到断点处的INT 3指令时,便产生断点中断,并把原先保存的断点处指令重新替代 INT 3,以完成一个完整的设置断点的G命 令 。通过对单步中断和断点中断的合理组合,可以产生强大的动态调试跟踪功能,这就对磁盘加密技术造成了巨大的威慑,所以破坏单步中断和断点中断,在反跟踪技术中就显得十分必要,成为反跟踪技术中的"必修课 "。

二 )反 跟 踪 技 术
作为反拷贝技术的保护者反跟踪技术是整个磁盘加密技术中最能显示技术水平的部分,如果它稍有漏洞就会影响到整个磁盘加密技术的可靠性. 不过毫无漏洞的反跟踪技术是没有,随着时间的推移、编程工具的更新和经验的积累,反跟踪技术只会向完美逼近,但可以肯定的是:一定不会达到完美,这和哲学中的"绝对和相对"是同一个道理 。一个卓越的反跟踪技术虽然肯定有着微小的漏洞,但是它本身其它的技术可以起到弥补和尽可能减小这个漏洞的作用,这就是这个反跟踪技术的卓越之处 。一个有效的反跟踪技术应该具有3大特性:

重要程序段是不可跳越和修改的:PROLOK的 解 密 过 程 是 通 过 修 改 判 读 指 纹 的 程 序 段 来 实 现 的,这其 实 是 激 光 加 密 系 统 中 反 跟 踪 技 术 的 一 个 败 笔 ,一 个 有 效 的 反 跟 踪 技 术 应 该 对 加 密 系 统 中 的 某 些 甚 至 全 部 程 序 段 进 行 保 护 ,如 果 这 其 中 有 内 容 被 修 改 ,将 导 致 出 错 ,主 要 方 法 有 累 计 、累 或 和 异 或 和 程 序 段 等 方 法 ,同 时 还 要 保 证 重 要 程 序 段 一 定 要 被 执 行 ,方 法 主 要有 加 密 程 序 分 段 加 密 ,运 行 时 逐 层解 密 ,逐 层 清 除 的 方 法 ,即 只 有 运 行 了 重 要 的 程 序 段 ,才 能 将 下 一 层 程 序 代 码 从 密 码 形 式 转 换 成 明 码 形 式 ;
不 通 过 加 密 系 统 的 译 码 算 法 ,密 码 不 可 破 译: 为 塑 造 一 个 封 闭 的 加 密 系 统 ,杜 绝 使 用 外 调 自 编 子 程 序 甚 至 手 工 转 换 密 码 ,规 定 只 能 由 加 密 系 统 的 译 码 程 序 来 转 换 密码 ;
加 密 系 统 是 不 可 动 态 跟 踪 执 行 的 :动 态 跟 踪 是 对 加 密 系 统 的 窥 视 ,所 以 反 跟 踪 技 术 应 该 绝 对 禁 止 对 加 密 系 统 的 动 态 跟 踪 。
反 跟 踪 技 术 主 要 采 用 的 方 法 有 :

抑 制 跟 踪 中 断 :DEBUG的 T和 G命 令 分 别 要 运 行 系 统 的单 步中 断 和 断 点 中 断 服 务 程 序 ,在 系 统 向 量 表 中 这 两 个 中 断 的 中 断 向 量 分 别 为 1和 3,中 断服务 程 序 的 入 口 地 址 分 别 存 放 在 0000:0004和 0000:000C起 始 的 4个 字 节 中 。 因 此 ,当 这 些 单 元 中的 内容 被 修 改 后 ,T和 G命 令 将 无法 正 常 执 行 ,具 体 实 现 方 法 :
(1)将 这 些 单 元 作 为 堆 栈 使 用;
(2)在 这 些 单 元 中 送 入 软 件 运 行 的必 要 数 据 ;
(3)将 软 件 中 某 个 子 程 序 的 地 址 存 放 在 这 些 单 元中,当 需 要 调 用 时 使 用 INT 1和 INT3指 令 来 代 替 CALL指 令 ;
(4)放 入 惩 罚 性 程 序 的 入 口 地 址 。
封 锁 键 盘 输 入 :各 种 跟 踪 调 试 软 件 在 工 作 时 ,都 要 从键盘 上 接 收 操 作 者 发 出 的 命 令 ,而 且 还 要 从 屏 幕 上 显 示 出 调 试 跟 踪 的 结 果 ,这 也 是 各 种跟 踪调 试 软 件 对 运 行 环 境 的 最 低要 求 。 因 此 反 跟 踪 技 术 针 对 跟 踪 调 试 软 件 的 这 种 "弱 点 ",在 加密 系 统 无 须 从 键 盘 或 屏 幕 输入 、 输 出 信 息 时 ,关 闭 了 这 些 外 围 设 备 ,以 破 坏 跟 踪 调 试软 件的 运 行 环 境 。 键 盘 信 息 的 输 入 采 用 的 硬 件 中 断 方 式 ,由 BIOS中 的 键 盘中断 服 务 程 序 接 收 、 识 别 和 转换 ,最 后 送 入 可 存 放 16个 字 符 的 键 盘 缓 冲 区 。 针 对 这 些 过程 反跟 踪 技 术 可 以 采 用 的 方 法 有:
(1)改 变 键 盘 中 断 服 务 程 序 、 BIOS的 键 盘 I/O中 断 服 务 程序 的入 口 地 址 :键 盘 中 断 的 中 断向 量 为 9,BIOS的 键 盘 I/O中 断 的 中 断 向 量 为 16H,它 们 的 中 断 服务程 序 的 入 口 地 址 分 别 存 放 在内 存 地 址 0000:0024H和 0000:0058H起 始 的 4个 字 节 中 ,改 变 这 些 地址中 的 内 容 ,键 盘 信 息 将 不 能正 常 输 入 。

[1] [2] [3] [4] [5] [6]  

(2)禁 止 键 盘 中 断 :键 盘 中 断 是 一 个 可 屏 蔽 中 断 ,可 通 过 向 825 9中 断 控 制 器 送 屏 蔽 控 制 字来 屏 蔽 键 盘 中 断 。 控 制 键 盘 的 是 中 断 屏 蔽 寄 存 器 的 第 1位 ,只要 将 该 位 置 1,即 可 关 闭 键 盘 的中 断 。
IN AL,21H
OR AL,02H
OUT 21H,AL
需 要 开 放 键 盘 中 断 时 ,也 要 用 三 条 指 令 :
IN AL,21H
AND AL,FDH
OUT 21H,AL

(3)禁 止 接 收 键 盘 数 据 :键 盘 数 据 的 接 收 是 由 主 机 板 上 8255A并 行 接 口 完 成 的 。 其 中 端 口 A用 来 接 收 键 盘 扫 描 码 ,端 口 B的 第 7位 用 来 控 制 端 口 A的 接收 ,该位 为 0表 示 允 许 键 盘 输 入 ,为 1则 清 除 键 盘 。 正 常 情 况 下 ,来 自 键 盘 的 扫 描 码 从 端 口 A接收 之后 ,均 要 清 除 键 盘 ,然 后 再 允许 键 盘 输 入 ,为 了 封 锁 键 盘 输 入 ,我 们 只 须 将 端 口 B的 第 7位置1:
IN AL,61H
OR AL,80HOUT 61H,AL
当 需 要 恢 复 键 盘 输 入 时 ,执 行 以 下 三 条 指 令 :
IN AL,61H
AND AL,7FH
OUT 61H,AL

(4)不 接 受 指 定 键 法 :在 DEBUG中 T、 P和 G都 是 用 于 动 态 跟踪 的关 键 命 令 ,如 果 加 密 系 统 关 键 命 令 ,如 果 加 密 系 统在 运 行 时 必 须 从 键 盘 上 接 收 信 息 (这 个 时 候 加 密 系 统 容 易被各 种 跟 踪 调 试 软 件 截 获 ,所 以应 尽 量 避 免 ),可 以 通 过 对 键 盘 中 断 服 务 程 序 的 修 改 扩 充 ,使 之不 接 受 T、 P和 G这 些 敏 感 的 键码 ,以 达 到 反 跟 踪 的 目 的 。 当 然 这 是 一 种 不 得 以 而 采 取 的方法 ,因 为 它 有 相 当 大 的 局 限 性和 漏 洞 :一 是 如 果 加 密 系 统 在 接 受 的 信 息 中 ,可 能 牵 涉 到 T、 P等 键 码 ,这 种 方 法 就 行 不 通 了 ;二 是 DEBUG下 的 动 态 调 试 命 令 是 T、 P和 G,那 么 其 它 的 跟 踪 调试软 件 呢 ?显 然 其 它 的 软 件 就不 一 定 是 这 些 命 令 了 ,而 且 还 不 乏 两 个 键 码 、 三 个 键 码 以及更 多 键 码 组 成 的 动 态 调 试 命 令。
3.设 置 显 示 器 的 显 示 性 能 :当 加 密 系 统 无 需 在 屏 幕 上显示 信 息 时 ,可 以 通 过 各 种 方 法关 闭 屏 幕 ,这 样 可 使 解 密 者 无 法 得 到 跟 踪 调 试 软 件 返 回 的任何 信 息 ,以 阻 止 解 密 者 对 加 密系 统 的 破 译 。 这 种 反 跟 踪 技 术 在 实 现 方 法 上 也 有 5类 :
(1)封 锁 屏 幕 显 示 :可 以 重 新 设 置 屏 幕 特 性 ,将 前 景 和 背景色 彩 置 成 同 一 种 颜 色 ,使 解 密 者 在 跟 踪 期 间 无 法 看 见 调 试 信 息 :
MOV AH,0BH
MOV BH,0
MOV BL,0
INT 10H

这 时 屏 幕 的 背 景 颜 色 和 字 符 颜 色 均 被 置 成 黑 色 ,当 需恢 复屏 幕 的 显 示 特 性 时 ,可 将 上述 第 3条 指 令 中 的 BL值 换 成 1~ 7,便 使 字 符 的 颜 色 变 成 深 蓝、 绿和 红 色 等 。
(2)检 查 加 密 系 统 是 否 处 于 被 监 控 状 态 :各 类 跟 踪 调 试软 件在 显 示 信 息 时 ,必 然 会 出 现屏 幕 上 卷 和 换 页 等 操 作 ,因 此 可 以 经 常 检 查 屏 幕 上 某 些 位置的 状 态 ,若 有 变 化 则 一 定 有 人在 跟 踪 程 序 。 获 取 屏 幕 信 息 的 方 法 可 用 以 下 指 令 来 实 现:
MOV AH,02
MOV BH,0
MOV DH,行 光 标 值
MOV DL,列 光 标 值
INT 10H
MOV AH,08
INT 10H

这 样 就 可 以 读 取 光 标 处 的 字 符 和 属 性 了 。
(3)修 改 显 示 器 I/O中 断 服 务 程 序 的 入 口 地 址 :显 示 器 I/O中 断 I NT 10H的 中 断 入 口 地 址 存 放在 内 存 地 址 0000:0040H开 始 的 4个 字 节 中 ,修 改 这 4个 字 节 中 的内容 ,就 可 破 坏 或 扩 充 显 示 器 I/O中 断 服 务 程 序 。
(4)定 时 清 屏 :利 用 对 时 钟 中 断 的 扩 充 ,可 以 使 时 钟 中 断定 时 清 屏 。
(5)直 接 对 视 屏 缓 冲 区 操 作 :每 台 机 器 都 有 固 定 位 置 和长 度的 视 屏 缓 冲 区 (具 体 的 位 置和 长 度 随 显 示 器 的 类 型 而 不 同 ),不 过 各 类 显 示 器 上 的 所有 信息 都 是 视 屏 缓 冲 区 中 信 息 的反 应 。 如 果 软 件 直 接 对 视 屏 缓 冲 区 进 行 操 作 ,可 以 获 得 比利用 显 示 中 断 快 得 多 的 显 示 速 度 ,现 在 许 多 先 进 的 跟 踪 调 试 软 件 都 采 取 了 这 种 方 法 ,一 是提 高速 度 ;二 是 针 对 反 跟 踪 技 术 ,所以 反 跟 踪 技 术 仅 仅 只 修 改 显 示 中 断 的 入 口 地 址 是 远 远 不够 的 ,还 要 通 过 对 时 钟 中 断 的 修 改扩 充 ,定 时 频 繁 地 刷 新 视 屏 缓 冲 区 中 的 内 容 。
检 测 跟 踪 法 :当 解 密 者 利 用 各 种 跟 踪 调 试 软 件 对 加密系 统 分 析 执 行 时 ,势 必 会 造 成许 多 与 正 常 执 行 加 密 系 统 不 一 致 的 地 方 ,如 运 行 环 境 、 中断入 口 和 时 间 差 异 等 等 。 如 果 在反 跟 踪 技 术 中 对 不 一 致 的 地 方 采 取 一 定 的 措 施 ,也 同 样 可以起 到 保 护 加 密 系 统 的 目 的 。 实 现 这 种 方 法 的 关 键 在 于 以 下 两 个 方 面 :一 是 如 果 检测 到加 密 系 统 是 否 被 跟 踪 ,二 是检 测 到 被 跟 踪 后 如 何 进 行 处 理 ,前 一 个 方 面 的 实 现 主 要 依靠加 密 者 对 DOS内 核 和 跟 踪 调 试软 件 的 深 入 了 解 ,后 者 则 一 般 是 一 种 死 循 环 、 启 动 机 器 或提示 非 法 跟 踪 并 停 止 运 行 的 程 序 ,但 也 不 排 除 有 惩 罚 性 动 作 的 程 序 ,在 这 里 只 主 要 讨 论 第一 方面 : (1)定 时 检 测 法 :一 个 程 序 在 正 常 运 行 和 被 跟 踪 运 行 时 ,所花 的 时 间 是 大 不 相 同 的 ,可 以想 象 一 个 被 跟 踪 运 行 的 程 序 往 往 要 花 费 极 长 的 时 间 ,反 跟踪技 术 抓 住 这 个 特 点 ,根 据 执 行时 间 的 长 短 来 判 断 是 否 被 跟 踪 。 这 种 技 术 在 具 体 实 现 时有 两点 要 注 意 :① 确 定 程 序 正 常 运行 时 所 需 的 时 间 :这 个 时 间 的 取 值 一 般 比 最 慢 速 机 器 (8088)运行 的 时 间 稍 微 长 一 些 ,如 果 在检 测 执 行 时 间 时 发 现 所 用 时 间 还 大 于 定 下 的 时 间 值 ,就 可以肯 定 当 前 的 程 序 是 被 跟 踪 执 行 ;② 发 现 执 行 所 用 的 时 间 小 于 定 下 的 时 间 值 ,也 不 能 认 为是?绝对 没 被 跟 踪 ,这 是 因 为 DEBUG的T和 G命 令 在 执 行 时 将 禁 止 所 有 可 屏 蔽 的 中 断 ,用 以 计 时 的 时 钟中 断 也 不 例 外 ,所 以 如 果 用 T和 P命 令 对 程 序 进 行 动 态 跟 踪 执 行 时 ,会 完 全 停 止 时 钟 的 计 数,有 可 能 出 现 执 行 时 间 远 小于 规 定 的 时 间 值 的 情 况 (甚 至 可 能 出 现 不 用 时 间 的 怪 事 )。 解决 这 个 问 题 的 办 法 除 了 利 用抑 制 跟 踪 中 断 法 外 ,还 可 通 过 时 间 中 断 1AH来 解 决 :如 果 发 现 时钟 不 走 动 ,则 进 入 死 循 环 。

 [1] [2] [3] [4] [5] [6]  


MOV AH,0

INT 1AH ;读当前时钟值

MOV BX,DX ;读取的时钟低部存入BX

LOOP:MOV AH,0

INT 1AH

CMP BX,DX ;比较时钟低部是否变动
JZ LOOP ;时钟未走动则返回重读


另 外 还 存 在 另 一 种 可 能 的 情 况 :即 解 密 者 简 化 了 加 密 程 序, 则 也 会 引 起 执 行 所 用 时 间小 于 规 定 值 的 情 况 ,这 种 方 法 的 对 策 是 在 反 跟 踪 技 术 中 加 入定 时 检 测 关 键 部 位 数 据 是 否 改变 和 对 代 码 实 施 保 护 法 。 (2)偶 尔 检 测 法 :在 加 密 系 统 中 加 入 判 断 时 间 的 功 能 ,并 且当 时 间 满 足 某 一 条 件 时 再 对加 密 系 统 中 的 关 键 部 位 进 行 判 断 ,如 果 关 键 部 位 不 存 在 或 发现 了 变 化 则 可 判 定 加 密 系 统 已经 被 破 坏 ,应 立 即 做 出 相 应 的 反 应 。 象 这 类 反 跟 踪 技 术 可 以出 现 在 加 密 系 统 的 各 处 ,并 为了 增 加 解 密 难 度 ,还 可 以 使 多 次 出 现 的 这 类 反 跟 踪 技 术 紧 密联 系 、 环 环 相 扣 ,以 造 成 一 种永 远 无 法 解 密 的 感 觉 。 这 类 技 术 如 果 运 用 于 大 的 程 序 中 可 以极 大 的 提 高 磁 盘 加 密 技 术 的 可 靠 性 ,甚 至 几 乎 不 可 解 密 。 (3)利 用 时 钟 中 断 法 :时 钟 中 断 INT 8大 约 每 隔 55ms就 要 被 执 行一 次 。 它 主 要 处 理 两 项 任务 :一 是 计 时 ;二 是 管 理 软 盘 驱 动 器 的 启 闭 时 间 ,另 外 在 它 执 行时 ,还 要 再 次 调 用 INT 1AH和 INT 1CH中 断 ,这 其 中 的 INT 1CH中 断 实 质 上 只 是 一 个 空 操 作 的 中 断 , 它 主 要 用 于 用 户 有 某 种周 期 性 的 工 作 时 ,让 用 户 用 自 己 设 计 的 中 断 服 务 程 序 取 而 代之 的 。 在 反 跟 踪 技 术 中 利 用 时钟 中 断 可 以 定 时 检 查 前 台 任 务 执 行 的 情 况 ,如 果 发 现 前 台 的程 序 被 非 法 跟 踪 调 试 ,可 以 立即 采 取 相 应 的 措 施 ,也 可 以 对 中 断 向 量 表 作 定 时 检 查 、 计 算程 序 执 行 时 间 、 密 文 的 译 码 操作 和 前 面 说 到 的 定 时 清 屏 等 等 。 利 用 时 钟 中 断 法 是 一 个 非 常有 效 的 反 跟 踪 技 术 ,通 过 对 INT 1CH中 断 的 扩 充 ,时 钟 中 断 可 以 完 成 许 多 任 务 ,但 要 注 意 的 是 ,这 个 扩 充 程 序 不 宜 过 大 ,以免 影 响 前 台 程 序 的 执 行 速 度 。 (4)PSP法 :每 个 程 序 在 执 行 时 都 必 须 建 立 对 应 的 程 序 段 前 缀 P SP,当 程 序 未 被 跟 踪 执 行 时 ,PSP中 14H与 16H开 始 的 两 个 字 节 是 相 同 的 ,当 被 跟 踪 运 行 时 ,这 些内 容 就 不 会 相 同 。 (5)中 断 检 测 法 :一 个 执 行 的 程 序 如 未 被 跟 踪 ,则 INT 1和 INT 3的 入 口 地 址 相 同 ,且 都 为 哑中 断 ,如 被 跟 踪 则 相 反 ,所 以 通 过 检 测 INT 1和 INT 3的 入 口 地 址 即可 判 断 是 否 被 跟 踪 。
、 破 坏 中 断 向 量 表 :DOS提 供 了 从 0到 FFH的 256个 中 断 调 用 (见表 1),它 们 驻 留 在 内 存 的较 低 地 址 中 ,相 应 的 入 口 地 址 位 于 内 存 0000:0000至 0000:03FFH中 ,每个 入 口 地 址 由 4个 字 节 组 成 ,其 中 前 两 个 字 节 为 程 序 的 偏 移 地 址 ,后 两 个 字 节 为 程 序 的 段地 址 。 DEBUG等 跟 踪 调 试 软 件 在 运 行 时 大 量 地 使 用 了 DOS提 供 的 各类 中 断 ,不 仅 如 此 ,比 DEBUG功 能 更 强 大 ,甚 至 针 对 反 跟 踪 技 术 设 计 的 高 级 反 反 跟 踪 调试 软 件 也 调 用 了 DOS中 断 ,典 型 的 例 子 就 是 使 用 其 它 中 断 来 代 替 断 点 中 断 的 反 反 跟 踪技 术 。 破 坏 中 断 向 量 表 显 然 可以 从 根 本 上 破 坏 一 切 跟 踪 调 试 软 件 的 运 行 环 境 ,以 达 到 "以 不应 万 变 "的 最 终 目 的 。 DOS和 BIOS有 个 40段 的 数 据 区 ,它 位 于 内 存 0040:0000至 0040:00FFH,这 256个 字 节 存 放 的 都 是当 前 系 统 配 置 情 况 ,对 这 些 内 容 的 修 改 也 会 直 接 影 响 到 各 类跟 踪 调 试 软 件 的 正 常 运 行 。 从 LOCK89开 始 就 已 经 使 用 了 破 坏 中 断 向 量 表 和 部 分 40段 数 据 区 的反 跟 踪 技 术 ,因 为 这 种 技 术的 卓 越 表 现 ,直 至 LOCK93这 种 反 跟 踪 技 术 一 直 被 保 留 延 用 下 来。 破 坏 中 断 表 在 其 它 反 跟 踪 技 术 中 也 出 现 过 ,如 :抑 制 跟 踪中 断 、 改 变 键 盘 中 断 服 务 程序 入 口 地 址 和 修 改 显 示 器 中 断 服 务 程 序 入 口 地 址 等 等 ,所 以破 坏 中 断 表 是 一 个 涉 及 面 极 广、 效 果 极 好 的 反 跟 踪 技 术 ,它 能 最 大 程 度 地 阻 止 解 密 者 对 加密 系 统 的 直 接 或 间 接 动 态 跟 踪 ,使 解 密 技 术 面 临 一 个 全 新 的 问 题 。
设 置 堆 栈 指 针 法 :跟 踪 调 试 软 件 在 运 行 时 ,会 产 生 对 堆栈 的 操 作 动 作 ,比 如 :保 存 断 点。 因 而 在 反 跟 踪 技 术 中 对 于 堆 栈 指 针 的 运 用 就 显 得 相 当 重 要了 ,比 如 对 堆 栈 指 针 的 值 进 行设 计 ,并 力 求 使 设 计 的 结 果 具 备 一 定 的 抗 修 改 性 ,以 免 解 密 者通 过 再 次 修 改 堆 栈 指 针 的 值来 达 到 继 续 跟 踪 的 目 的 。 !TB38013100.gif
(1)将 堆 栈 指 针 设 到 ROM区 :只 读 存 储 区 ROM是 无 法 保 存 数 据 的 , 堆 栈 指 针 如 果 指 向 ROM区 域 ,势 必 不 能 保 存 数 据 ,这 将 会 使 跟 踪 调 试 无 法 继 续 进 行下 去 。

 [1] [2] [3] [4] [5] [6]  

(2)设 在 程 序 段 中 :堆 栈 指 针 如 果 设 在 将 要 执 行 的 程 序 段 中 , 那 么 任 何 的 堆 栈 操 作 都 会破 坏 程 序 代 码 ,使 程 序 不 能 正 常 运 行 。
(3)设 在 中 断 向 量 表 内 :INT 1和 INT 3是 反 跟 踪 技 术 一 定 要 破坏 的 中 断 ,所 以 将 堆 栈 指 针 设在 内 存 的 低 地 址 段 内 ,既 可 以 进 行 少 量 的 堆 栈 操 作 (跟 踪 调 试软 件 一 般 需 要 大 量 的 堆 栈 来存 放 数 据 ),还 可 以 破 坏 单 步 和 断 点 中 断 的 入 口 地 址 。
(4)将 堆 栈 指 针 移 作 它 用 :如 果 确 认 没 有 堆 栈 操 作 的 话 ,可以 将 堆 栈 指 针 拿 来 做 其 它 用 途 ,如 保 存 经 常 要 更 换 的 数 据 ,这 样 就 可 以 使 堆 栈 指 针 的 值 经常 更 换 ,从 而 使 它 根 本 无 法 保存 数 据 。设 置 堆 栈 指 针 法 是 一 个 针 对 动 态 跟 踪 设 计 的 反 跟 踪 技 术 ,不 过 它 的 运 用 有 着 一 定 的 限制 :(1)要 保 证 将 要 执 行 的 程 序 段 不 能 进 行 有 效 的 堆 栈 操 作 ;(2)在 要 进 行 堆 栈 操 作 时 ,必 须 首先 恢 复 正 确 的 堆 栈 指 针 。 设 置 堆 栈 指 针 不 会 影 响 到 时 钟 中 断 保 存 数 据 ,因 为 象 时 钟和 键 盘 等 系 统 中 断 保 存 数 据所 用 的 都 是 系 统 栈 ,而 不 象 单 步 和 断 点 中 断 是 用 堆 栈 来 保 存断 点 的 。
对 程 序 分 块 加 密 执 行 :为 了 防 止 加 密 程 序 被 反 汇 编 ,加密 程 序 最 好 以 分 块 的 密 文 形式 装 入 内 存 ,在 执 行 时 由 上 一 块 加 密 程 序 对 其 进 行 译 码 ,而 且在 某 一 块 执 行 结 束 后 必 须 立即 对 它 进 行 清 除 ,这 样 在 任 何 时 刻 内 不 可 能 从 内 存 中 得 到 完整 的 解 密 程 序 代 码 。 这 种 方 法除 了 能 防 止 反 汇 编 外 还 可 以 使 解 密 者 无 法 设 置 断 点 ,从 而 从 一 个 侧 面 来 防 止 动 态 跟 踪 。
对 程 序 段 进 行 校 验 :对 一 个 加 密 程 序 的 解 密 工 作 往 往只 是 对 几 个 关 键 指 令 的 修 改 ,因 此 对 程 序 段 特 别 是 关 键 指 令 的 保 护 性 校 验 是 十 分 必 要 的 ,这 样 可 以 防 止 解 密 者 对 指 令进 行 非 法 篡 改 。 具 体 方 法 有 累 计 、 累 减 、 累 或 和 异 或 和 程 序段 等 方 法 。
迷 惑 、 拖 垮 解 密 者 :为 了 迷 惑 和 拖 垮 解 密 者 ,可 以 在 加密 系 统 中 多 多 设 置 专 门 针 对解 密 者 的 "陷 阱 ",这 样 既 可 以 消 耗 解 密 者 的 时 间 和 精 力 ,还 可以 磨 灭 解 密 者 的 斗 志 和 毅 力 。
(1)设 置 大 循 环 :程 序 越 简 单 ,就 越 易 读 ,跟 踪 也 就 越 方 便 ,便于 这 个 原 因 ,在 加 密 系 统 中 设置 大 循 环 ,可 以 在 精 力 上 消 耗 解 密 者 ,延 长 跟 踪 破 译 加 密 系 统的 时 间 。 这 种 反 跟 踪 技 术 已经 被 广 泛 应 用 ,而 且 取 得 了 较 好 的 效 果 。 它 的 具 体 实 现 方 法是 :在 加 密 程 序 中 设 置 多 重 循环 ,并 使 上 一 层 循 环 启 动 下 一 层 循 环 ,下 一 层 循 环 启 动 下 下 一层 循 环 ,如 此 循 环 ,而 且 还 可 以 频 繁 地 调 用 子 程 序 ,还 要 保 证 不 能 有 一 层 循 环 被 遗 漏 不 执 行。
(2)废 指 令 法 :在 加 密 程 序 中 设 置 适 当 的 无 用 程 序 段 ,而 且在 这 其 中 设 置 如 大 循 环 等 程序 ,这 种 方 法 在 反 跟 踪 技 术 中 被 称 为 废 指 令 法 。 要 实 现 废 指令 法 有 三 点 要 保 证 :① 废 指 令要 精 心 组 织 安 排 ,不 要 让 解 密 者 识 破 机 关 ,这 是 废 指 令 法 应 具备 的 基 本 点 ,因 为 它 的 目 的 是诱 导 解 密 者 去 研 究 破 解 自 身 ,并 在 破 解 过 程 中 拖 垮 解 密 者 ,所以 废 指 令 法 本 身 的 伪 装 十 分重 要 ;② 所 用 的 废 指 令 应 大 量 选 用 用 户 生 疏 的 指 令 或 DOS内 部功 能 的 调 用 ,以 最 大 程 度 地 消耗 解 密 者 的 精 力 和 破 译 时 间 ;③ 要 确 保 不 实 现 任 何 功 能 的 废指 令 段 不 能 被 逾 越 ,这 是 废 指令 法 要 注 意 的 一 个 重 要 问 题 ,因 为 它 如 果 能 被 轻 易 逾 越 ,那 么就 说 明 加 密 系 统 所 采 取 的 废指 令 法 是 失 败 的 反 跟 踪 技 术 。
(3)程 序 自 生 成 技 术 :程 序 的 自 生 成 是 指 在 程 序 的 运 行 过 程中 ,利 用 上 面 的 程 序 来 生 成将 要 执 行 的 指 令 代 码 ,并 在 程 序 中 设 置 各 种 反 跟 踪 措 施 的 技 术 。 这 样 可 以 使 得 反 汇 编 的 指令 并 非 是 将 要 执 行 的 指 令 代 码 ,同 时 还 可 以 隐 蔽 关 键 指 令 代码 ,但 由 于 实 现 代 价 较 高 ,一 般只 对 某 些 关 键 指 令 适 用 。
指 令 流 队 列 法 :CPU为 了 提 高 运 行 速 度 ,专 门 开 辟 了 一 个指 令 流 队 列 ,以 存 放 将 要 执行 的 指 令 ,这 样 就 节 省 了 CPU为 了 取 指 令 而 等 待 的 时 间 。 不 过通 过 对 它 的 利 用 也 可 以 达 到迷 惑 解 密 者 和 阻 止 动 态 跟 踪 加 密 程 序 的 目 的 。 在 程 序 正 常 执 行 时 ,其 后 续 指 令 是 存 放 在 指 令 流 队 列 中 的 , 而 跟 踪 调 试 程 序 时 就 完 全不 同 了 ,因 为 它 牵 涉 到 动 态 修 改 程 序 指 令 代 码 (包 括 后 续 指 令 )的 原 因 ,所 以 无 论 后 续 指 令 是否 被 存 放 在 指 令 流 队 列 中 ,被 修 改 的 指 令 都 将 被 执 行 (包 括 后续 指 令 ),这 一 点 和 程 序 正 常 执行 时 是 相 反 的 ,因 为 正 常 执 行 时 ,CPU只 从 指 令 流 队 列 中 读 取 指令 , 即 使 后 续 指 令 刚 刚 被 正在 执 行 的 指 令 修 改 过 。 这 是 一 个 构 思 十 分 巧 妙 的 反 跟 踪 技 术 ,现 列 出 一 个 基 于 此 原 理 的 反跟 踪 程 序 :

 [1] [2] [3] [4] [5] [6]  

JMP S2

S1: JMP S1 ;死循环

S2: LEA SI,S1

LEA DI,S3

PUSH CS

PUSH CS

POP DS

POP ES

CLD

LODSW
STOSW

;设 计 在 S3处 存 放 S1处 的 指 令 ,如 果 在 正 常 执 行 时 ,由 于 S3处的 其 它 指 令 已 经 被 存 入 指 令流 队 列 中 ,所 以 它 会 正 常 运 行 ,反 之 则 执 行 S1处 的 死 循 环 指 令 S3: 其 它 指 令.
9.逆 指 令 流 法 :指 令 代 码 在 内 存 中 是 从 低 地 址 向 高 地 址存 放 的 ,CPU执 行 指 令 的 顺 序也 是 如 此 ,这 个 过 程 是 由 硬 件 来 实 现 的 ,而 且 这 个 规 则 已 经 被人 和 跟 踪 调 试 软 件 牢 牢 接 收。 针 对 这 个 方 面 逆 指 令 流 法 特 意 改 变 顺 序 执 行 指 令 的 方 式 ,使 CPU按 逆 向 的 方 式 执 行 指 令 ,这 样 就 使 得 解 密 者 根 本 无 法 阅 读 已 经 逆 向 排 列 的 指 令 代 码 ,从 而 阻 止 解 密 者 对 程 序 的 跟踪 。 因 为 顺 序 执 行 指 令 是 由 硬 件 决 定 的 ,所 以 如 果 用 软 件 的 方式 设 计 CPU按 逆 向 执 行 指 令,就 显 出 相 当 困 难 和 繁 琐 了 ,不 过 逆 指 令 流 法 是 一 个 非 常 有 吸引 力 和 使 用 前 景 的 反 跟 踪 技术 ,如 果 能 把 这 种 技 术 成 功 地 运 用 在 磁 盘 加 密 技 术 中 ,势 必 会给 解 密 者 造 成 巨 大 的 压 力 和威 慑 。 近 些 年 来 各 种 报 刊 对 这 种 反 跟 踪 技 术 进 行 过 深 入 的 讨 论 ,本 文 就 摘 取 其 中 的 精 华 给 大家 介 绍 一 下 逆 指 令 流 法 的 实 现 方 法 。 单 步 中 断 是 DOS提 供 跟 踪 程 序 的 手 段 ,这 个 中 断 普 遍 被 运 用于 跟 踪 调 试 软 件 ,是 反 跟 踪技 术 的 "死 敌 ",但 是 如 果 运 用 恰 当 ,它 同 样 也 可 以 成 为 "朋 友 ",逆 指 令 流 法 就 是 一 例 :由 于 顺 序执 行 指 令 是 由 硬 件 来 控 制 的 ,所 以 用 软 件 方 式 改 变 这 种 规 律的 方 法 只 有 通 过 以 下 两 点 :① 使 指 令 代 码 在 内 存 中 逆 向 排 列 ,即 从 高 地 址 向 低 地 址 排 列 ;② 执 行 某 条 指 令 时 ,再 将 该 指 令按 正 常 顺 序 排 列 ,以 适 应 硬 件 的 要 求 。 前 者 是 静 态 的 ,在 设 计时 就 可 安 排 妥 当 ,而 后 者 则 较复 杂 了 ,一 是 如 何 在 连 续 执 行 指 令 的 同 时 ,把 指 令 代 码 从 逆 向 捋 顺 为 顺 向 ;二 是 指 令 的 长 度各 不 相 同 ,如 何 迅 速 了 解 下 一 条 要 捋 顺 的 指 令 代 码 到 底 有 多长 ?这 就 要 利 用 设 置 单 步 中 断标 志 和 修 改 单 步 中 断 服 务 程 序 来 完 成 。
(1)设 置 单 步 中 断 标 志 使 CPU每 执 行 完 一 条 指 令 后 都 转 去 执行 INT 1中 断 服 务 程 序 ,并 同时 修 改 INT 1的 中 断 服 务 程 序 ,使 它 能 完 成 逆 向 指 令 的 顺 向 及 修改 CS:IP的 值 、 使 IP指 针 人 为递 减 的 功 能 。 设 置 单 步 中 断 的 标 志 ,即 是 将 标 志 寄 存 器 的 第 8位 T置 为 1,程 序 如 下 :
PUSHF

POP AX

OR AX,0100HPUSH AX

POPF

(2)修 改 CS:IP的 值 :设 X地 址 处 的 指 令 执 行 后 ,由 硬 件 自 动 完成 了 IP值 的 递 增 修 改 (顺 序 执 行 ),将 IP的 值 改 为 Y(Y>X),指 向 了 下 一 条 要 执 行 的 指 令 (正 常 情况 下 )。 那 么 根 据 X和 Y的 值 就可 判 断 出 X地 址 处 的 指 令 代 码 的 确 切 长 度 (Y-X),从 而 推 出 逆 向时 下 一 条 指 令 的 地 址 Z(Z<X):Z=X-(Y-X)=2X-Y,知 道 了 逆 向 时 的 下 一 条 指 令 的 地 址 ,就 可 在 INT 1中 断 服 务 程 序 中 将 保护 的 中 断 现 场 中 的 IP从 Y改 成 Z。
(3)指 令 顺 向 :首 先 为 了 保 证 系 统 的 速 度 ,再 者 为 了 减 少 修改 扩 充 的 INT 1中 断 服 务 程 序 的长 度 ,在 具 体 确 定 顺 向 指 令 代 码 的 长 度 时 ,以 PC机 最 长 的 指 令代 码 6字 节 计 算 。 决 定 了 指 令代 码 的 长 度 ,剩 下 的 就 是 指 令 代 码 的 顺 向 :由 于 CPU只 能 顺 向 执行 指 令 ,所 以 必 须 将 Z地 址 前面 的 5个 字 节 的 内 容 复 制 到 Z地 址 后 面 的 单 元 中 ,并 且 为 了 避 免破 坏 其 中 的 信 息 ,要 将 Z地 址后 面 的 5个 单 元 中 的 内 容 暂 时 保 存 起 来 ,以 便 下 次 予 以 恢 复 。 逆 指 令 流 法 实 现 过 程 中 应 注 意 的 问 题 :① 由 于 指 令 流 队 列的 存 在 ,使 得 第 一 次 进 入 INT 1的 地 址 各 不 相 同 ,这 是 因 为 指 令 流 队 列 的 大 小 随 CPU的 不 同 而不 同 :8088CPU的 指 令 流 队 列 空 间 为 4个 字 节 ,80286为 6个 字 节 , 80386为 16个 字 节 ,所 以 指 令 流 队列 中 的 后 续 指 令 的 条 数 也 各不 相 同 ,这 样 就 导 致 了 不 同 的 CPU,首 次 调 用 INT 1的 地 址 各 不 相同 的 现 象 。 它 的 解 决 方 法 是在 设 置 完 单 步 中 断 标 志 后 ,不 要 立 即 安 排 执 行 指 令 ,而 应 插 入适 当 的 空 操 作 命 令 NOP(90);② 如 果 逆 指 令 流 程 序 中 有 软 中 断 指 令 (以 指 令 代 码 CDH打 头 的 ),必须 恢 复 正 常 的 顺 序 执 行 指令 状 态 ,否 则 在 软 中 断 服 务 程 序 中 也 将 使 程 序 逆 向 运 行 。 并在 软 中 断 指 令 执 行 完 毕 后 ,再设 置 成 逆 指 令 流 运 行 方 式 。

 [1] [2] [3] [4] [5] [6]  

混 合 编 程 法 :破 译 加 密 系 统 的 首 要 工 作 是 读 取 程 序 和弄 清 程 序 思 路 ,并 针 对 其 中 的弱 点 下 手 。 为 了 阻 挠 解 密 者 对 加 密 程 序 的 分 析 ,可 以 尽 量 将程 序 设 计 得 紊 乱 些 ,以 降 低 程序 的 可 读 性 。 这 种 方 法 具 体 在 反 跟 踪 技 术 中 使 用 的 就 是 混 合编 程 法 等 ,因 为 高 级 编 译 语 言的 程 序 可 读 性 本 身 就 较 差 (如 编 译 过 的 BASIC、 COBOL程 序 等 ),如果 再 将 几 种 高 级 语 言 联 合起 来 编 写 使 用 ,一 定 会 极 大 的 降 低 程 序 的 可 读 性 。
自 编 软中 断 13技 术 :由 于 反 拷 贝 技 术 制 作 的 指 纹 一 般都 存 在 于 软 盘 上 ,所 以 现 在 的磁 盘 加 密 系 统 都 存 在 着 一 个 明 显 的 外 部 特 征 :即 都 要 通 过 调用 INT 13来 判 断 软 盘 上 指 纹 的真 伪 。 由 于 要 调 用 INT 13,所 以 应 保 证 中 断 表 (至 少 部 分 中 断 表 ,如 与 INT 13有 关 的 INT 40和 INT1E等 等 )的 正 确 性 ,即 使 先 前 使 用 了 破 坏 中 断 表 等 反 跟 踪 技术 ,到 这 个 时 候 都 必 须 恢 复 中断 表 的 内 容 ,这 就 过 早 地 暴 露 了 自 己 的 弱 点 ,加 上 INT 13中 断 的入 口 参 数 是 公 开 的 ,通 过 入 口参 数 便 可 发 现 加 密 程 序 具 体 读 取 的 是 哪 些 扇 区 或 哪 个 磁 道 ,甚 至 可 以 发 现 加 密 系 统 采 取 的是 何 种 反 拷 贝 技 术 ,这 就 给 解 密 者 以 可 乘 之 机 ,对 加 密 系 统 造成 巨 大 的 威 胁 .












(出处:http://www.sheup.com)


 [1] [2] [3] [4] [5] [6] 

(1)设 置 单 步 中 断 标 志 使 CPU每 执 行 完 一 条 指 令 后 都 转 去 执行 INT 1中 断 服 务 程 序 ,并 同时 修 改 INT 1的 中 断 服 务 程 序 ,使 它 能 完 成 逆 向 指 令 的 顺 向 及 修改 CS:IP的 值 、 使 IP指 针 人 为递 减 的 功 能 。 设 置 单 步 中 断 的 标 志 ,即 是 将 标 志 寄 存 器 的 第 8位 T置 为 1,程 序 如 下 :
PUSHF

POP AX

OR AX,0100HPUSH AX

POPF

(2)修 改 CS:IP的 值 :设 X地 址 处 的 指 令 执 行 后 ,由 硬 件 自 动 完成 了 IP值 的 递 增 修 改 (顺 序 执 行 ),将 IP的 值 改 为 Y(Y>X),指 向 了 下 一 条 要 执 行 的 指 令 (正 常 情况 下 )。 那 么 根 据 X和 Y的 值 就可 判 断 出 X地 址 处 的 指 令 代 码 的 确 切 长 度 (Y-X),从 而 推 出 逆 向时 下 一 条 指 令 的 地 址 Z(Z<X):Z=X-(Y-X)=2X-Y,知 道 了 逆 向 时 的 下 一 条 指 令 的 地 址 ,就 可 在 INT 1中 断 服 务 程 序 中 将 保护 的 中 断 现 场 中 的 IP从 Y改 成 Z。
(3)指 令 顺 向 :首 先 为 了 保 证 系 统 的 速 度 ,再 者 为 了 减 少 修改 扩 充 的 INT 1中 断 服 务 程 序 的长 度 ,在 具 体 确 定 顺 向 指 令 代 码 的 长 度 时 ,以 PC机 最 长 的 指 令代 码 6字 节 计 算 。 决 定 了 指 令代 码 的 长 度 ,剩 下 的 就 是 指 令 代 码 的 顺 向 :由 于 CPU只 能 顺 向 执行 指 令 ,所 以 必 须 将 Z地 址 前面 的 5个 字 节 的 内 容 复 制 到 Z地 址 后 面 的 单 元 中 ,并 且 为 了 避 免破 坏 其 中 的 信 息 ,要 将 Z地 址后 面 的 5个 单 元 中 的 内 容 暂 时 保 存 起 来 ,以 便 下 次 予 以 恢 复 。 逆 指 令 流 法 实 现 过 程 中 应 注 意 的 问 题 :① 由 于 指 令 流 队 列的 存 在 ,使 得 第 一 次 进 入 INT 1的 地 址 各 不 相 同 ,这 是 因 为 指 令 流 队 列 的 大 小 随 CPU的 不 同 而不 同 :8088CPU的 指 令 流 队 列 空 间 为 4个 字 节 ,80286为 6个 字 节 , 80386为 16个 字 节 ,所 以 指 令 流 队列 中 的 后 续 指 令 的 条 数 也 各不 相 同 ,这 样 就 导 致 了 不 同 的 CPU,首 次 调 用 INT 1的 地 址 各 不 相同 的 现 象 。 它 的 解 决 方 法 是在 设 置 完 单 步 中 断 标 志 后 ,不 要 立 即 安 排 执 行 指 令 ,而 应 插 入适 当 的 空 操 作 命 令 NOP(90);② 如 果 逆 指 令 流 程 序 中 有 软 中 断 指 令 (以 指 令 代 码 CDH打 头 的 ),必须 恢 复 正 常 的 顺 序 执 行 指令 状 态 ,否 则 在 软 中 断 服 务 程 序 中 也 将 使 程 序 逆 向 运 行 。 并在 软 中 断 指 令 执 行 完 毕 后 ,再设 置 成 逆 指 令 流 运 行 方 式 。
混 合 编 程 法 :破 译 加 密 系 统 的 首 要 工 作 是 读 取 程 序 和弄 清 程 序 思 路 ,并 针 对 其 中 的弱 点 下 手 。 为 了 阻 挠 解 密 者 对 加 密 程 序 的 分 析 ,可 以 尽 量 将程 序 设 计 得 紊 乱 些 ,以 降 低 程序 的 可 读 性 。 这 种 方 法 具 体 在 反 跟 踪 技 术 中 使 用 的 就 是 混 合编 程 法 等 ,因 为 高 级 编 译 语 言的 程 序 可 读 性 本 身 就 较 差 (如 编 译 过 的 BASIC、 COBOL程 序 等 ),如果 再 将 几 种 高 级 语 言 联 合起 来 编 写 使 用 ,一 定 会 极 大 的 降 低 程 序 的 可 读 性 。
自 编 软中 断 13技 术 :由 于 反 拷 贝 技 术 制 作 的 指 纹 一 般都 存 在 于 软 盘 上 ,所 以 现 在 的磁 盘 加 密 系 统 都 存 在 着 一 个 明 显 的 外 部 特 征 :即 都 要 通 过 调用 INT 13来 判 断 软 盘 上 指 纹 的真 伪 。 由 于 要 调 用 INT 13,所 以 应 保 证 中 断 表 (至 少 部 分 中 断 表 ,如 与 INT 13有 关 的 INT 40和 INT1E等 等 )的 正 确 性 ,即 使 先 前 使 用 了 破 坏 中 断 表 等 反 跟 踪 技术 ,到 这 个 时 候 都 必 须 恢 复 中断 表 的 内 容 ,这 就 过 早 地 暴 露 了 自 己 的 弱 点 ,加 上 INT 13中 断 的入 口 参 数 是 公 开 的 ,通 过 入 口参 数 便 可 发 现 加 密 程 序 具 体 读 取 的 是 哪 些 扇 区 或 哪 个 磁 道 ,甚 至 可 以 发 现 加 密 系 统 采 取 的是 何 种 反 拷 贝 技 术 ,这 就 给 解 密 者 以 可 乘 之 机 ,对 加 密 系 统 造成 巨 大 的 威 胁 .

 [1] [2] [3] [4] [5] [6] [7] [8]  













(出处:http://www.sheup.com)


 [1] [2] [3] [4] [5] [6] [7] [8] 

标签: