284

我的一个朋友从 Facebook 下载了一些恶意软件,我很想知道它在不感染自己的情况下做了什么。我知道您不能真正反编译 .exe,但我至少可以在 Assembly 中查看它或附加调试器吗?

编辑说它不是 .NET 可执行文件,没有 CLI 标头。

4

16 回答 16

537

使用调试器,您可以交互式地逐步执行程序集。
使用反汇编程序,您可以更详细地查看程序汇编。
使用反编译器,您可以将程序转回部分源代码,假设您知道它是用什么编写的(您可以使用PEiD等免费工具找到它- 如果程序被打包,您必须先解压缩它或Detect-it-Easy如果你在任何地方都找不到 PEiD。DIE 目前在github上有一个强大的开发者社区)。

调试器:

  • OllyDbg,免费,一个优秀的 32 位调试器,您可以找到许多用户制作的插件和脚本,使其更加有用。
  • WinDbg,免费的,Microsoft 提供的功能强大的调试器。WinDbg 对于查看 Windows 内部结构特别有用,因为它比其他调试器更了解数据结构。
  • SoftICE , SICE 给朋友。商业和开发于 2006 年停止。SoftICE 是一种在操作系统下运行的核心工具(并在调用时停止整个系统)。许多专业人士仍在使用 SoftICE,尽管可能很难获得并且可能无法在某些硬件(或软件 - 即它无法在 Vista 或 NVIDIA gfx 卡上运行)上运行。

反汇编程序:

  • IDA Pro(商业)- 顶级反汇编器/调试器。大多数专业人士使用,如恶意软件分析师等。虽然成本相当高(有免费版本,但非常有限)
  • W32Dasm(免费) - 有点过时,但可以完成工作。我相信 W32Dasm 这些天是废弃软件,并且有许多用户创建的黑客来添加一些非常有用的功能。您必须四处寻找最佳版本。

反编译器:

  • Visual Basic: VB Decompiler,商业的,产生一些可识别的字节码。
  • Delphi:DeDe,免费,生成高质量的源代码。
  • C: HexRays,商业的,同一家公司的 IDA Pro 插件。产生了很好的效果,但要花一大笔钱,而且不会卖给任何人(至少我听说)。
  • .NET(C#):dotPeek,免费,将 .NET 1.0-4.5 程序集反编译为 C#。支持 .dll、.exe、.zip、.vsix、.nupkg 和 .winmd 文件。

无论您在做什么,都可能派上用场的一些相关工具是资源编辑器,例如ResourceHacker(免费)和一个好的十六进制编辑器,例如Hex Workshop(商业)。

此外,如果您正在进行恶意软件分析(或使用 SICE),我衷心建议您在虚拟机(即VMware Workstation )中运行所有内容。在 SICE 的情况下,它将保护您的实际系统免受 BSOD 的影响,在恶意软件的情况下,它将保护您的实际系统免受目标程序的攻击。您可以在此处阅读有关使用 VMware 进行恶意软件分析的信息。

就个人而言,我使用 Olly、WinDbg 和 W32Dasm 以及一些较小的实用工具。

另外,请记住,反汇编甚至调试其他人的软件通常至少违反 EULA :)

于 2008-11-07T19:11:48.153 回答
54

psoul 对您的问题的出色回答,所以我不会复制他的出色工作,但我觉得这有助于解释为什么这是一个完全有效但又非常愚蠢的问题。毕竟,这是一个学习的地方,对吧?

现代计算机程序是通过一系列转换产生的,从输入人类可读的文本指令体(称为“源代码”)到计算机可读的指令体(也称为“二进制”或“机器”)结束代码”)。

计算机运行一组机器代码指令的方式最终非常简单。处理器可以执行的每个操作(例如,从内存中读取、添加两个值)都由数字代码表示。如果我告诉你数字 1 表示尖叫,数字 2 表示咯咯笑,然后举起带有 1 或 2 的卡片,希望你相应地尖叫或咯咯笑,我将使用与计算机基本相同的系统操作。

二进制文件只是一组这些代码(通常称为“操作码”)和操作码作用的信息(“参数”)。

现在,汇编语言是一种计算机语言,其中语言中的每个命令字恰好代表处理器上的一个操作码。汇编语言命令和处理器操作码之间存在直接的 1:1 转换。这就是 x386 处理器的编码程序集不同于 ARM 处理器的编码程序集的原因。

反汇编就是这样:程序读取二进制文件(机器代码),用等效的汇编语言命令替换操作码,并将结果作为文本文件输出。理解这一点很重要;如果您的计算机可以读取二进制文件,那么您也可以读取二进制文件,无论是手动使用您手中的操作码表(ick)还是通过反汇编程序。

反汇编程序有一些新技巧,但重要的是要了解反汇编程序最终是一种搜索和替换机制。这就是为什么任何禁止它的 EULA 最终都会吹出热空气。不能既允许计算机读取程序数据,又禁止计算机读取程序数据。

(不要误会我的意思,有人尝试这样做。它们在歌曲文件上与 DRM 一样有效。)

但是,反汇编方法有一些警告。变量名不存在;你的CPU不存在这样的事情。库调用令人困惑,通常需要反汇编进一步的二进制文件。在最好的条件下,汇编很难阅读。

大多数专业程序员都不能坐下来阅读汇编语言而不感到头疼。对于业余爱好者来说,这不会发生。

无论如何,这是一个有点掩饰的解释,但我希望它有所帮助。每个人都可以随时纠正我的任何错误陈述;有一阵子了。;)

于 2008-11-07T21:12:47.220 回答
19

好消息。IDA Pro 现在对其旧版本实际上是免费的: http ://www.hex-rays.com/idapro/idadownfreeware.htm

于 2008-11-07T20:18:18.097 回答
12

任何体面的调试器都可以做到这一点。试试OllyDbg。(编辑:它有一个很棒的反汇编程序,甚至可以将参数解码为 WinAPI 调用!)

于 2008-11-07T18:50:29.257 回答
12

x64dbg是一个很好的开源调试器,被积极维护。

于 2016-09-15T21:49:48.510 回答
8

如果您只是想弄清楚恶意软件的作用,那么在免费工具Process Monitor之类的工具下运行它可能会容易得多,该工具会在它尝试访问文件系统、注册表、端口等时报告...

此外,使用免费的VMWare 服务器之类的虚拟机对此类工作非常有帮助。您可以制作一个“干净”的图像,然后在每次运行恶意软件时返回该图像。

于 2008-11-07T18:59:16.087 回答
7

我想说,在 2019 年(2022 年更是如此),Ghidra ( https://ghidra-sre.org/ ) 值得一试。它是开源的(免费的),并具有惊人的代码分析能力,包括能够反编译回相当可读的 C 代码。

于 2019-11-07T22:58:30.773 回答
6

当然,看看IDA Pro。他们提供了一个评估版本,所以你可以尝试一下。

于 2008-11-07T18:49:58.243 回答
5

您可能会在汇编中查看它的一些信息,但我认为最简单的方法是启动虚拟机并查看它的作用。确保你没有公开的股票或类似的东西可以跳过;)

于 2008-11-07T18:49:17.823 回答
4

Boomerang也可能值得一试。

于 2008-11-08T00:26:46.377 回答
4

我不敢相信没有人对Immunity Debugger只字未提。

Immunity Debugger 是一个强大的工具,用于编写漏洞利用、分析恶意软件和反向工程二进制文件。它最初基于 Ollydbg 1.0 源代码,但修复了名称解析错误。它有一个支持良好的Python API,易于扩展,因此您可以编写 Python 脚本来帮助您进行分析。

另外,Corelan 团队的 Peter 写了一个很好的工具,叫做mona.py,顺便说一句,这是一个优秀的工具。

于 2013-07-06T13:41:39.637 回答
3

您需要的是一种称为“反汇编程序”的软件。

快速谷歌产生这个:链接

于 2008-11-07T18:50:45.073 回答
2

如果您想在不感染计算机的情况下运行该程序以查看它的作用,请使用VMWare或 Microsoft VPC 之类的虚拟机,或者可以对程序进行沙盒处理的程序,例如SandboxIE

于 2008-11-07T21:12:36.240 回答
2

如果您没有时间,请将恶意软件提交到 cwsandbox:

http://www.cwsandbox.org/

http://jon.oberheide.org/blog/2008/01/15/detecting-and-evading-cwsandbox/

高温高压

于 2008-11-16T04:40:23.687 回答
2

你可以使用dotPeek,非常适合反编译exe文件。这是免费的。

https://www.jetbrains.com/decompiler/

于 2018-01-23T03:58:29.560 回答
0

探索者套件可以做你想做的事。

于 2012-08-25T11:25:38.173 回答