如何正确的对Windows软件进行逆向工程(翻译/转载)

您所在的位置:网站首页 逆向软件工程师是干什么的 如何正确的对Windows软件进行逆向工程(翻译/转载)

如何正确的对Windows软件进行逆向工程(翻译/转载)

2024-05-22 20:30| 来源: 网络整理| 查看: 265

0x00 前言

你有没有想过要拆开某个机械装置了解它的工作原理呢?嗯,谁没有呢。这种欲望也是是逆向工程的主导力量,逆向对于分析产品安全性、在不运行可疑的.exe文件的情况下查明其用途、恢复丢失的文档、开发基于旧软件的新解决方案等非常有用。在本文中,我们讨论执行逆向工程所需的知识结构、逆向工程的基本原理、Windows软件、反汇编器和工具。我们还提供了对一个程序进行逆向工程的步骤示例。

0x01 什么是逆向工程?

逆向工程是发现硬件或软件背后的原理(例如其体系结构和内部结构)的过程。简单来说逆向工程就是搞清楚程序是如何工作的。显然,如果您有文档,那么整个过程将变得更加简单。但是经常会发生这样的情况:没有文档,您需要通过另外的途径来学习某个软件的工作方式。您什么时候需要对软件进行逆向工程,逆向工程对你有什么帮助?逆向工程在计算机科学领域有许多用途,包括:

研究网络通讯协议 查找恶意软件中使用的算法,例如计算机病毒,特洛伊木马,勒索软件等。 研究用于存储任何类型信息的文件格式,例如电子邮件数据库和磁盘映像 检查您自己的软件抵抗逆向工程的能力 改善软件与系统和第三方软件的兼容性 使用未文档化的系统功能逆向工程的合法性取决于其目的以及软件的使用方式。假设您已合法获得该软件的副本,则上述所有目的都是完全合法的。但是,例如,如果您打算对软件某些闭源功能进行逆向工程,然后在另一个软件中使用,则可能会遇到麻烦。

关于法律文件,最终用户许可协议(EULA)通常禁止进行逆向工程。但是美国数字千年版权法案规定,如果为了提高与其他产品的兼容性而逆向某个软件是合法的。法律要求因国家/地区而异,因此请在开始之前花点时间研究一下。现在,让我们看看如何对软件进行逆向工程。

0x01 逆向工程需要什么?

要开始逆向软件,您需要:

1.您想要使用逆向工程领域的知识 2.一些能够再反汇编一个软件时应用你专业知识的工具让我们考虑一个与软件不相关的例子。假设您有一只手表,想确定它是机械的、石英的还是自动的。拥有该领域的知识意味着您应该知道有三种类型的手表。此外,您应该知道,如果有电池,它应该在手表内部,打开手表就可以看到它。您还应该了解手表的内部结构,电池的外观以及打开表壳所需的工具的基本知识。拥有可以验证知识的工具,意味着您需要一把螺丝起子或其他专用工具,才能打开手表。就像对手表进行逆向工程需要特定的技能和工具一样,逆向工程软件也需要其自身在特定领域的知识和工具。 0x02 理论知识-软件逆向工程过程

对于不同的软件逆向工程任务,您需要不同类型的知识。当然,有一些常识可以帮助您完成大多数逆向工程任务:常见的应用程序结构,编程语言,编译器等知识。但是,如果没有特定的理论知识,就无法完成具体的逆向工程任务。

逆向任务 你需要的基础知识 对有网络行为的软件进行逆向工程 进程间通信、网络的结构、连接、网络数据包等 逆向加密算法 密码学及最常使用的密码学相关算法 逆向文件结构 基本文件概念以及不同的系统或组件如何使用文件

在逆向分析某些软件时使用一些技巧可以节省大量时间。对于有文件交互的软件,可以输入一些比较特殊的数据,然后记录实际存储时候的数据的大小和偏移,这些信息有助于你发现这些文件的内部结构。进行逆向工程过程时,软件开发人员通常使用反汇编程序来查找适当的算法和程序逻辑。有许多不同的可执行文件格式,编译器(提供不同的输出)和操作系统,因为这种多样性,很难通过单一的技术去逆向各种类型的软件。要理解反编译的代码,您需要一些有关汇编语言,函数调用约定,栈结构,堆栈框架等方知识。了解不同语言的汇编程序输出可能有助于您发现原始功能。让我们来看一些Windows x86平台的示例。假设我们有以下代码:

123456int count = 0;for (int i = 0; i < 10; ++i){count++;}std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3