65.9K
CodeProject 正在变化。 阅读更多。
Home

如何正确地逆向工程软件( 适用于 Windows)

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.48/5 (6投票s)

2019年5月7日

CPOL

5分钟阅读

viewsIcon

14153

进行逆向工程所需的知识库,逆向工程 Windows 软件的基本原理、反汇编器和工具

逆向工程可以定义为一种基于从特定硬件或软件中提取的信息来理解其内部结构的过程。软件逆向工程通常旨在回答某个应用程序或系统如何工作的问题。当然,当有详细文档可用时,这个过程会变得相当容易。然而,在实践中,大多数时候这类信息受到严格限制,迫使你使用其他方法来理解目标软件。

在许多情况下,软件工程是必要的

  • 研究和剖析恶意软件,以便了解如何检测它并最好地防范它
  • 研究网络协议以提供更好的网络安全
  • 研究特定的文件格式以存储特定数据,例如磁盘映像和邮件数据库
  • 提高与封闭平台或第三方软件的兼容性
  • 研究未公开的平台功能
  • 测试自己的软件免受逆向工程的保护

本文涵盖了 如何进行软件逆向工程 的基础知识,涉及所需的知识以及应使用的工具。逆向工程过程需要丰富的编程经验,以及掌握一系列工具的知识,这些工具对于拆解应用程序至关重要。 

软件工程所需的知识

逆向工程不同的软件通常需要截然不同的知识库。例如,如果你需要逆向工程任何网络应用程序,你需要了解网络结构,知道进程间通信,并理解你需要分析的网络数据包的结构,更不用说连接及其顺序了。

逆向工程加密算法需要深入理解密码学,以及对最流行的加密方法及其使用的算法有广泛的了解。

逆向工程文件结构不仅需要了解文件格式,还需要了解各种系统组件如何与目标文件进行交互。对于有丰富文件和文件系统工作经验的人来说,这项任务会容易得多,因为他们可以将这些经验融入到他们的逆向方法中。一个有经验的人能够做的事情的一个例子是,创建一个写入文件独特类型值的测试,同时记录写入数据的大小和到存储文件的偏移量。这可能有助于快速找到计算偏移量时常见的模式,从而为文件内部结构提供必要的提示。 

虽然专业知识非常重要,但任何想了解如何逆向工程的人都应该具备一些通用信息,例如各种编程语言和编译器,以及典型的应用程序结构。

任何软件逆向工程的根本在于反汇编器。它允许确定目标软件使用的算法和逻辑。然而,鉴于市面上有无数的编译器和文件格式,更不用说截然不同的操作系统了,没有一个工具适合所有情况,你需要为不同的问题找到不同的方法。

为了更好地理解反编译的代码,你还需要了解汇编语言,函数的调用方式,理解堆栈结构以及堆栈帧的概念等。现代编译器在代码优化方面表现出色,因此当你通过编译器运行代码然后反编译时,你会看到与原始代码的巨大差异。因此,在逆向代码工程时,有必要不要试图猜测原始代码,而是理解其背后的思想,为什么某个部分被编写出来,以及它的作用是什么。通过了解汇编器如何输出各种代码,你将能够产生一些想法。下一步就是根据你对原始代码目的的理解来创建自己的原型。

软件逆向工程工具

反汇编器。 反汇编器是一种软件,用于将可执行文件转换为汇编代码。IDA Pro 是最著名的反汇编器,非常容易推荐。它提供了许多可以大大加快逆向工程速度的工具,例如显示函数调用树,解析可执行文件的导出和导入,并显示其必要信息等。它甚至可以用 C 语言显示代码,这对于不熟悉汇编的任何人来说都非常有帮助。

Sysinternals 工具集。 Windows 软件逆向工程大量使用所有 Sysinternals 工具

  • TCPView – 该工具充当网络嗅探器,允许查看 TCP/UDP 数据包上的数据
  • TDIMon – 该工具类似于网络嗅探器,但会监视套接字级别
  • PortMon – 用于监视物理串行和并行端口以及通过它们传输的任何流量的工具。
  • WinObj – 该工具允许以整洁的分层结构显示系统内的所有对象。如果你想了解如何逆向工程驱动程序以及使用同步原语的软件,它可能会非常有帮助。

API Monitor。 此工具允许确定任何被调用的 API 及其行为。该工具拥有一个非常强大的内置数据库,包含对大量 API 的调用,不仅包括 kernel32 和 ntdll 的调用,还包括托管环境、COM 等的调用。

调试器。 调试器是任何开发人员的必备工具,允许他们查看其软件在任何特定时间点的行为。你可以以同样的方式将调试器用于逆向工程。市面上最流行的有 WinDBG 和 OllyDBG,后者提供内置的反汇编器和 API 解析功能,而前者则支持内核级调试。两者都是非常强大的工具,选择哪一个完全取决于你手头的任务。

你可以在 这里 找到更详细的概述和关于如何正确逆向工程 Windows 软件的实际示例。 

© . All rights reserved.