如何了解exe / dll是用C ++ /。Net / Java还是任何其他语言编写的。我尝试使用Dependency Walker,但无法获取所需的信息。

评论

通常,用于生成可执行文件的编译器会在其自身上留下一些显式字符串。尝试查看可执行文件中剩余的多余部分。其次,如果没有显式标记,则可以通过识别用于生成汇编器的ABI来推断原始语言(可能是编译器)。

值得记住的是,程序可以用多种语言编写,然后转换或导出为二进制文件。

Mandiant的Red Curtain具有此功能,想知道您是否可以逆转他们在那做的事情吗?

#1 楼

(将我对类似问题的SO答案重新发布)

在许多情况下,可以标识用于编译代码的编译器,并由此确定原始语言。

大多数语言实现都包含某种运行时库,以实现该语言的各种高级操作。例如,C具有实现文件I / O操作的CRT(fopenfread等),Delphi具有其string类型(串联,赋值等)的编译器帮助器,ADA具有各种低级功能以确保语言安全和以此类推。通过比较程序代码和候选编译器的运行时库,您也许可以找到匹配项。

IDA在FLIRT技术中实现了这种方法。通过使用签名,IDA能够确定DOS和Windows的大多数主要编译器。在Linux上,这有些困难,因为它没有单一的编译器二进制提供程序,因此必须为每个发行版都进行签名。可以识别所使用的编译器。许多编译器使用非常不同的惯用法来表示各种操作。例如,我能够猜出用于Duqu病毒的编译器是Visual C ++,后来被证实。

#2 楼


.NET可以通过import来标识,您可以使用依赖项warker来查看-。检查是否存在mscorlib.dll的导入,它是.net框架的核心库。
可以通过查看程序集来识别C ++,它使用此调用约定。

PEid可以显示有关编译器和运行方式的部分信息。时间被使用。通常,它为此使用签名列表。

Detect It Easy-此工具仍在维护中,并且具有非常有趣的功能。




评论


由于某些原因,我无法取消对PEID的操作。 Windows Defender会将其删除为恶意软件。

–c00000fd
18年1月5日在22:23

#3 楼

Marco Pontello的TrID软件通常可以识别用于编译文件的内容。

评论


注意:免费,仅供非商业用途

–托马斯·韦勒(Thomas Weller)
2014年1月5日在21:08

您有使用指南吗?我已经下载了主程序,但是找不到单独包装所需的定义数据库?我看到了定义在网站上的位置,但是我还无法弄清楚如何下载它们。

–mattyb
17年4月6日在18:06

def下载就在主程序下载下

– Avery3R
17年4月14日在22:28

#4 楼

Java字节码文件可以通过其魔幻数字标识:文件开头的0xCAFEBABE。同样,标准的命名约定是将这些文件的名称以.class结尾。 .exe PE,除非它们已解压缩(假设它们只是被打包,而不是重新编译为机器代码)”

评论


将Java类文件打包到.exe PE中时,它们的幻数或文件扩展名将不可见,除非将它们解包(假定它们只是放在首位,而不是重新编译为机器代码)

– Nanofarad
2014年9月4日在17:35

#5 楼

Stud_PE(免费)扫描许多PE文件(.EXE和.DLL)的签名。

#6 楼

您可以通过查看PE标头来检测.net程序集。请阅读CLR规范和PE / COFFEE规范以获取详细信息。

Java使用它自己的类文件格式。我不太熟悉它,但是应该可以肯定地对类文件进行标识。

本地语言开发主要是关于启发式的。诸如调用约定,序言,结语等之类的东西。分解的递归下降以及惯用语识别器可能会使源编译器识别。例如,GCC和类生成非常独特的代码。

#7 楼

(公然插件)

protectionid(pid.gamecopyworld.com)报告编译器信息(在配置中将其打开)

要这样做,它是一堆复杂的事情

检查字节码

检查导入(mscoree.dll,msvcr * .dll等)

检查入口点代码

检查mz存根

检查链接器版本

以及其他一些内容

示例输出

扫描- > C:\ ProtectionID.source \ problematic.files \ solved \ detected \ Agile.NET

文件类型:32位Exe(子系统: Win GUI / 2),大小:7680(01E00h)字节

[文件启发式]->标记:00000100000001001101000000110000(0x0404D030)

[入口节熵]: 5.25(第0节)“ .text” |大小:0x1288(4744)个字节

[DllCharacteristics]->标志:(0x8540)-> ASLR | DEP | NOSEH | TSA

[ImpHash]-> f34d5f2d4577ed6d9ceec516c1f5a744

[SectionCount] 3(0x3)| ImageSize 0x8000(32768)个字节

[VersionInfo]产品名称:AgileUnpackMe

[VersionInfo]产品版本:1.0.4999.25574

[ VersionInfo]文件描述:AgileUnpackMe

[VersionInfo]文件版本:1.0.4999.25574

[VersionInfo]原始文件名:AgileUnpackMe.exe

[VersionInfo ]内部名称:AgileUnpackMe.exe

[VersionInfo]法律版权:版权所有2013

[Debug Info](记录1 of 1)(文件偏移量0x1414)

特性:0x0 | TimeDateStamp:0x522C69AD | MajorVer:0 / MinorVer:0->(0.0)

Type:2(0x2)-> CodeView |大小:0x57(87)

AddressOfRawData:0x3230 | PointerToRawData:0x1430

CvSig:0x53445352 | SigGuid A75CE0F5-0D67-4FC4-A2C612B95C81F742

年龄:0x6 | Pdb:c:\ AgileUnpackMe \ AgileUnpackMe \ obj \ x86 \ Debug \ AgileUnpackMe.pdb

[!]检测到AgileDotNet

[CompilerDetect]-> .NET

[。] .Net信息-> v 2.5 | x86托管(/ platform:x86)|标志:0x00000003->
COMIMAGE_FLAGS_ILONLY | COMIMAGE_FLAGS_32BITREQUIRED |

[。]入口点(令牌):0x06000006

[。] MetaData RVA:0x00002184 |大小:0x00000C0C(3084)

[。] MetaData->版本1.1-> v2.0.50727

[。]标志:0x0 |数据流:0x5(5)


扫描时间:0.156秒[00000009Ch(156)刻度] [539扫描完成]