我的一个朋友从Facebook上下载了一些恶意软件,我很好奇它在不感染我自己的情况下是怎么做的。我知道你不能真正地反编译。exe,但是我至少可以在程序集中查看它或附加调试器吗?
编辑说它不是. net可执行文件,没有CLI头文件。
我的一个朋友从Facebook上下载了一些恶意软件,我很好奇它在不感染我自己的情况下是怎么做的。我知道你不能真正地反编译。exe,但是我至少可以在程序集中查看它或附加调试器吗?
编辑说它不是. net可执行文件,没有CLI头文件。
如果你只是想弄清楚恶意软件在做什么,在像Process Monitor这样的免费工具下运行它可能会更容易,它会在它试图访问文件系统、注册表、端口等时报告…
此外,使用像免费的VMWare服务器这样的虚拟机对这类工作非常有帮助。您可以创建一个“干净”映像,然后每次运行恶意软件时都返回到该映像。
使用调试器,您可以交互式地逐级遍历程序集。 使用反汇编程序,您可以更详细地查看程序集。 使用反编译器,您可以将程序转换回部分源代码,假设您知道它是用什么编写的(您可以使用PEiD等免费工具找到它-如果程序是打包的,则必须首先解包,如果在任何地方都找不到PEiD,则可以轻松检测它。DIE目前在github上有一个强大的开发者社区)。
调试器:
OllyDbg, free, a fine 32-bit debugger, for which you can find numerous user-made plugins and scripts to make it all the more useful. WinDbg, free, a quite capable debugger by Microsoft. WinDbg is especially useful for looking at the Windows internals, since it knows more about the data structures than other debuggers. SoftICE, SICE to friends. Commercial and development stopped in 2006. SoftICE is kind of a hardcore tool that runs beneath the operating system (and halts the whole system when invoked). SoftICE is still used by many professionals, although might be hard to obtain and might not work on some hardware (or software - namely, it will not work on Vista or NVIDIA gfx cards).
反汇编器:
IDA Pro(商用)-顶级的反汇编器/调试器。大多数专业人士都使用,比如恶意软件分析师等。虽然花费相当多的钱(有免费的版本,但它是相当有限的) W32Dasm(免费)-有点过时,但可以完成工作。我相信W32Dasm现在已经被抛弃了,有许多用户创建的hack可以添加一些非常有用的功能。你得四处看看才能找到最好的版本。
Decompilers:
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的:)
psoul的精彩帖子回答了你的问题,所以我不会复制他的好工作,但我觉得它有助于解释为什么这是一个完全有效但也非常愚蠢的问题。毕竟,这是一个学习的地方,对吧?
现代计算机程序是通过一系列转换产生的,从人类可读的文本指令体(称为“源代码”)的输入开始,到计算机可读的指令体(也称为“二进制”或“机器代码”)结束。
计算机运行一组机器码指令的方式归根结底是非常简单的。处理器可以采取的每个操作(例如,从内存中读取,添加两个值)都由一个数字代码表示。如果我告诉你数字1代表尖叫,数字2代表傻笑,然后举着写着1或2的卡片,期待你尖叫或傻笑,我所使用的系统本质上与计算机使用的系统相同。
二进制文件只是这些代码(通常称为“操作码”)和操作码所作用的信息(“参数”)的集合。
汇编语言是一种计算机语言,其中每个命令字恰好代表处理器上的一个操作码。在汇编语言命令和处理器操作代码之间有直接1:1的转换。这就是为什么为x386处理器编写程序集与为ARM处理器编写程序集不同的原因。
反汇编很简单:程序读取二进制(机器代码),用等价的汇编语言命令替换操作代码,并将结果作为文本文件输出。理解这一点很重要;如果您的计算机可以读取二进制文件,那么您也可以读取二进制文件,可以手动使用操作代码表(ick),也可以通过反汇编程序。
反汇编程序有一些新的技巧,但重要的是要理解反汇编程序最终是一个搜索和替换机制。这就是为什么任何禁止它的EULA最终都是在夸夸其谈。你不能既允许计算机读取程序数据,又禁止计算机读取程序数据。
(不要误解我的意思,已经有人试图这么做了。它们和DRM一样适用于歌曲文件。)
但是,对于拆卸方法有一些注意事项。变量名不存在;这样的东西对你的CPU不存在。库调用非常混乱,通常需要进一步分解二进制文件。即使在最好的条件下,组装也很难阅读。
大多数专业程序员在阅读汇编语言时都会感到头疼。对于一个业余爱好者来说,这是不可能发生的。
不管怎样,这是一种有些粉饰的解释,但我希望它能有所帮助。任何人都可以随意纠正我的错误陈述;已经有一段时间了。;)
如果你没有时间,提交恶意软件到cwsandbox:
http://www.cwsandbox.org/
http://jon.oberheide.org/blog/2008/01/15/detecting-and-evading-cwsandbox/
HTH
真不敢相信居然没人提豁免调试器的事。
免疫调试器是一个强大的工具,编写漏洞,分析恶意软件,并反向工程二进制文件。它最初是基于Ollydbg 1.0源代码,但与名称资源的bug修复。它有一个良好支持的Python API,易于扩展,因此您可以编写Python脚本来帮助您进行分析。
另外,Corelan团队的Peter写了一个很好的工具,叫mona.py,顺便说一句,这是一个很好的工具。
我想说,在2019年(甚至在2022年),Ghidra (https://ghidra-sre.org/)值得一看。它是开源的(免费的),具有惊人的代码分析能力,包括反编译到相当可读的C代码的能力。