如何了解exe / dll是用C ++ /。Net / Java還是任何其他語言編寫的。我嘗試使用Dependency Walker,但無法獲取所需的信息。
如何了解exe / dll是用C ++ /。Net / Java還是任何其他語言編寫的。我嘗試使用Dependency Walker,但無法獲取所需的信息。
(將我的SO答案重新發佈到類似問題)
在許多情況下,可以識別用於編譯代碼的編譯器,並由此確定原始語言
大多數語言實現都包含某種運行時庫,以實現該語言的各種高級操作。例如,C具有實現文件I / O操作的CRT( fopen
, fread
等),Delphi為其 string
提供了編譯器幫助器。類型(連接,賦值等),ADA具有各種低級功能來確保語言安全性等。通過比較程序代碼和候選編譯器的運行時庫,您也許可以找到匹配項。
IDA在 FLIRT技術中實現了這種方法。通過使用簽名,IDA能夠確定DOS和Windows的大多數主要編譯器。在Linux上,這有點困難,因為它沒有單一的編譯器二進制提供程序,因此必須為每個發行版都進行簽名。
但是,即使不求助於運行時庫代碼,也有可能標識使用的編譯器。許多編譯器使用非常不同的慣用法來表示各種操作。例如,我能夠猜測,用於Duqu病毒的編譯器是Visual C ++,後來被確認。
mscorlib.dll
的導入.net框架。 Marco Pontello的 TrID軟件通常可以識別用於編譯文件的內容。
Java字節碼文件可以通過文件開頭的魔術數字: 0xCAFEBABE
來標識。同樣,標準的命名約定是使這些文件的名稱以 .class
結尾。
但是,@ hexafraction在註釋中發出警告:“ Java類文件不會包含它們的名稱。打包到.exe PE時可見的幻數或文件擴展名,除非它們已解包(假定它們只是放在首位,並且沒有重新編譯為機器代碼)”
Stud_PE(免費)掃描許多PE文件(.EXE和.DLL)的簽名。
您可以通過查看PE標頭來檢測.net程序集。有關詳細信息,請閱讀CLR規範和PE / COFFEE規範。
Java使用它自己的類文件格式。我不太熟悉它,但是應該可以肯定地對類文件進行標識。
母語的開發主要是關於啟發式的。諸如調用約定,序言,結語等之類的東西。分解的遞歸下降以及慣用語識別器可能會使源編譯器識別。例如,GCC和類生成非常獨特的代碼。
(公然插件)
protectionid(pid.gamecopyworld.com)報告編譯器信息(在配置中將其打開)
做到這一點,這是一堆複雜的事情
檢查字節模式
檢查導入(mscoree.dll,msvcr * .dll等)
檢查入口點代碼
檢查mz存根
檢查鏈接器版本
以及其他一些事情
示例輸出
掃描-> C:\ ProtectionID.source \ problematic.files \ solved \ detected \ Agile.NET 6.2.0.16.AgileNETUnpackMe \ AgileUnpackMe.exe
文件類型:32位Exe(子系統:Win GUI / 2),大小:7680(01E00h)字節
[文件啟發式]->標誌:0000010000000100110100010001000010000(0x0404D030)
[Entrypoint Section Entropy]:5.25(section#0)“ .text” |大小:0x1288(4744)個字節
[DllCharacteristics]->標誌:(0x8540)-> ASLR | DEP | NOSEH | TSA
[ImpHash]-> f34d5f2d4577ed6d9ceec516c1f5a744
[SectionCount] 3(0x3)| ImageSize 0x8000(32768)個字節
[版本信息]產品名稱:AgileUnpackMe
[版本信息]產品版本:1.0.4999.25574
[版本信息]文件說明: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)
類型: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)