是否可以“反编译”Windows .exe?或者至少查看大会?

时间:2008-11-07 18:44:47

标签: debugging winapi assembly decompiling

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

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

16 个答案:

答案 0 :(得分:395)

使用调试器,您可以交互式地逐步完成程序组装 使用反汇编程序,您可以更详细地查看程序组件 使用反编译器,您可以将程序重新转换为部分源代码,假设您知道它的内容(您可以使用PEiD等免费工具找到它 - 如果程序如果你无法在任何地方找到PEiD,你必须先解压缩它或Detect-it-Easy。目前DIE在github有一个强大的开发者社区。

调试器:

  • OllyDbg,免费,一个精美的32位调试器,你可以找到许多用户自制的插件和脚本,使它更有用。
  • WinDbg,免费,是微软的一款功能强大的调试器。 WinDbg对于查看Windows内部结构特别有用,因为它比其他调试器更了解数据结构。
  • SoftICE,SICE给朋友。商业和开发在2006年停止了.SoftICE是一种在操作系统下运行的硬核工具(并在调用时暂停整个系统)。 SoftICE仍然被许多专业人士使用,虽然可能很难获得,但可能无法在某些硬件上运行(或软件 - 也就是说,它不适用于Vista或NVIDIA gfx卡)。

反汇编器:

  • IDA Pro(商业) - 行顶部的反汇编程序/调试程序。被大多数专业人士使用,例如恶意软件分析师等。虽然花费了不少钱(存在free version,但它非常有限)
  • 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 here了解恶意软件分析。

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

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

答案 1 :(得分:40)

psoul对你的问题的优秀帖子答案,所以我不会复制他的好作品,但我觉得这有助于解释为什么这既是一个完全有效但又非常愚蠢的问题。毕竟,这是一个值得学习的地方,对吗?

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

计算机运行一组机器代码指令的方式最终非常简单。处理器可以采取的每个动作(例如,从存储器读取,添加两个值)由数字代码表示。如果我告诉你,数字1意味着尖叫,而数字2意味着傻笑,然后拿着1或2的卡片,期待你相应的尖叫或咯咯,我会使用与计算机使用的本质相同的系统操作。

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

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

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

反汇编程序有一些新的技巧,但重要的是要理解反汇编程序最终是一个搜索和替换机制。这就是为什么任何禁止它的EULA最终会吹热空气的原因。您不能立即允许计算机读取程序数据,也禁止计算机读取程序数据。

(不要误解我的意思,尝试这样做。它们和歌曲文件上的DRM一样好。)

然而,反汇编方法有一些警告。变量名称不存在;你的CPU不存在这样的事情。图书馆电话令人困惑,经常需要拆解更多的二进制文件。在最好的条件下阅读装配很难。

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

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

答案 2 :(得分:14)

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

答案 3 :(得分:11)

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

答案 4 :(得分:10)

x64dbg是一个积极维护的优秀的开源调试器。

答案 5 :(得分:6)

当然,看看IDA Pro。它们提供了一个eval版本,因此您可以尝试一下。

答案 6 :(得分:5)

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

快速谷歌收益:http://www.geocities.com/~sangcho/disasm.html

答案 7 :(得分:5)

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

此外,使用像免费VMWare server这样的虚拟机对这类工作非常有帮助。您可以制作一个“干净”的图像,然后每次运行恶意软件时再回到它。

答案 8 :(得分:4)

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

答案 9 :(得分:4)

Boomerang也可能值得一试。

答案 10 :(得分:3)

我无法相信没有人对Immunity Debugger一无所知。

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

另外,来自Corelan团队的一位好人Peter写了一篇名为mona.py的优秀工具btw。

答案 11 :(得分:2)

如果要在不感染计算机的情况下运行程序以查看其功能,请使用虚拟机(如VMWare或Microsoft VPC),或使用可以沙箱化程序的程序,如SandboxIE < / p>

答案 12 :(得分:2)

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

http://www.cwsandbox.org/

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

HTH

答案 13 :(得分:2)

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

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

答案 14 :(得分:1)

我想说的是,在2019年,Ghidra(https://ghidra-sre.org/)值得一试。它是开源的(免费的),并且具有出色的代码分析功能,包括能够反编译回到相当易读的C代码的功能。

答案 15 :(得分:0)

explorer suite可以做你想做的事。