当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否可以"反编译"Windows.exe?或者至少查看大会?》经验,为你挑选了8个好方法。

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

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



1> anon6439..:

使用调试器,您可以交互式地执行程序组装.
使用反汇编程序,您可以更详细地查看程序组件.
使用反编译器,您可以将程序重新转换为部分源代码,假设您知道它的内容(您可以通过PEiD等免费工具找到它 - 如果程序已打包,则必须先将其解压缩如果你无法在任何地方找到PEiD,或者检测它很容易 .DIE 目前在github上有一个强大的开发者社区.

调试器:

OllyDbg,免费,一个精美的32位调试器,你可以找到许多用户自制的插件和脚本,使它更有用.

WinDbg,免费,是一款功能强大的微软调试器.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,free,将.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的:)


软件通常都是针对EULA的:)
我很欣赏最后一段的一般性,好的建议,但在这个问题的背景下它是有趣的:我怀疑病毒带有EULA!;-)
请注意,如今大多数恶意软件(至少是已编译的恶意软件)可以轻松检测它是否在VMWare,Virtual PC,WINE,VirtualBox等中运行.
实际上,一些恶意软件甚至最近的特洛伊木马都有EULA(哦,那些俄国人......)当然,他们可以(并且被)研究忽略,因为可以假设没有人会出面起诉他们. ..而且,在任何情况下,他们通常写得太糟糕,无论在法庭上是什么意思.
请注意,IDA Pro的先前版本可免费用于非商业用途。

2> Jason L..:

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

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

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

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

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

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

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

(不要误解我的意思,尝试过这样做.它们与歌曲文件上的DRM一样有效.)

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

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

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



3> Matthew..:

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



4> utku_karatas..:

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



5> BullyWiiPlaz..:

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



6> Douglas Mayl..:

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



7> Corey Trager..:

你想要的是一种叫做"反汇编器"的软件.

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



8> joeld..:

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

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

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有