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


237

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

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


3
来自Facebook的恶意软件?您能解释一下吗
Aditya Mukherji,

很抱歉收到超级迟到的回复...但是我认为是这样的:她运行了一个恶意软件,该恶意软件有时在FB(me)上向她的所有联系人发送垃圾邮件,并带有指向要求您的“视频”的链接下载“新的编解码器”。在这种意义上,我假设它的行为像蠕虫。
swilliams

Answers:


446

使用调试器,您可以交互地完成程序汇编。
使用反汇编程序,您可以更详细地查看程序汇编。
使用反编译器,您可以将程序重新转换为部分源代码,前提是您知道该程序是用什么编写的(可以使用PEiD等免费工具来查找 -如果该程序已打包,则必须先将其解压缩或者检测-IT-容易,如果你不能找到PEID任何地方。DIE具有较强的开发者社区上github上目前)。

调试器:

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

反汇编器:

  • IDA Pro(商业版)-顶级反汇编程序/调试器。由大多数专业人士使用,例如恶意软件分析师等。尽管要花费很多钱(存在免费版本,但相当有限)
  • W32Dasm(免费)-有点过时了,但可以完成工作。我相信W32Dasm现在已经放弃了软件,并且有许多用户创建的黑客来添加一些非常有用的功能。您必须四处寻找最佳版本。

反编译器:

  • Visual Basic:商业VB反编译器,生成可识别的字节码。
  • 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的:)


16
我很欣赏最后一段的一般性建议,但在以下问题中还是很有趣的:我怀疑EULA附带有病毒!;-)
PhiLho

4
实际上,最近有些恶意软件甚至是特洛伊木马程序中都包含了EULA(哦,那些俄罗斯人。。)当然,(可以)忽略它们,因为可以认为没有人会提出起诉。 ..而且,它们通常写得很烂,以至于在任何情况下法庭上都没有意义。
anon6439

2
请注意,IDA Pro的先前版本可免费用于非商业用途。
西蒙·布坎

6
请注意,如今,大多数恶意软件(至少是经过编译的恶意软件)都可以轻松检测其是否在VMWare,Virtual PC,WINE,VirtualBox等
Mick

如果您在VM中运行,请当心Blue Pill攻击。
Siqi Lin

44

psoul的出色帖子可以回答您的问题,因此我不会重复他的出色著作,但我认为这有助于解释为什么这一次既是完全有效的又是非常愚蠢的问题。毕竟,这是一个学习的地方,对吧?

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

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

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

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

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

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

(不要误会我,已经尝试过这样做。它们与歌曲文件上的DRM一样有效。)

但是,拆卸方法有一些注意事项。变量名不存在;您的CPU不存在这种情况。库调用就像地狱一样令人迷惑,并且经常需要拆卸其他二进制文件。在最好的条件下,汇编是很难读的。

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

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


1
这详细介绍了反汇编,但是我很想听听关于反编译的详细说明。可能同样没有结果吗?有哪些警告?
Prometheus

@has:反编译本机代码是一项艰巨的挑战,通常是不可能的。优化器极具侵略性,经常将源代码转换为零。您无法反编译任何内容。
IInspectable '18


11

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




6

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

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


4

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


是的,我考虑过这一点,但是我不想为了建立一个虚拟机而烦恼:)
swilliams

1
没错,这种情况很麻烦,但是我总是发现保留VM来测试新软件或类似的东西很有用。然后,我可以做我想做的事情,只是选择最后不保存状态,然后回到干净的VM进行下一次运行。
Rob Prouse,



3

我不敢相信还没有人对Immunity Debugger说话。

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

另外,Corelan团队的一位Peter写了一个很好的工具btw,名为mona.py。






By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.