題:
如何知道用哪種語言/技術程序(.exe)編寫?
Pranit Kothari
2014-01-05 13:02:17 UTC
view on stackexchange narkive permalink

如何了解exe / dll是用C ++ /。Net / Java還是任何其他語言編寫的。我嘗試使用Dependency Walker,但無法獲取所需的信息。

通常,用於構建可執行文件的編譯器會在其自身上留下一些顯式字符串。嘗試查看可執行文件中剩餘的多餘部分。其次,如果沒有顯式標記,則可以通過識別用於生成彙編器的ABI來推斷原始語言(可能還有編譯器)。
值得記住的是,程序可以用多種語言編寫,然後轉換或導出為二進製文件。
Mandiant的Red Curtain具有此功能,想知道您是否可以逆轉他們在那做的事情嗎?
七 答案:
Igor Skochinsky
2014-01-05 15:44:47 UTC
view on stackexchange narkive permalink

(將我的SO答案重新發佈到類似問題)

在許多情況下,可以識別用於編譯代碼的編譯器,並由此確定原始語言

大多數語言實現都包含某種運行時庫,以實現該語言的各種高級操作。例如,C具有實現文件I / O操作的CRT( fopen fread 等),Delphi為其 string 提供了編譯器幫助器。類型(連接,賦值等),ADA具有各種低級功能來確保語言安全性等。通過比較程序代碼和候選編譯器的運行時庫,您也許可以找到匹配項。

IDA在 FLIRT技術中實現了這種方法。通過使用簽名,IDA能夠確定DOS和Windows的大多數主要編譯器。在Linux上,這有點困難,因為它沒有單一的編譯器二進制提供程序,因此必須為每個發行版都進行簽名。

但是,即使不求助於運行時庫代碼,也有可能標識使用的編譯器。許多編譯器使用非常不同的慣用法來表示各種操作。例如,我能夠猜測,用於Duqu病毒的編譯器是Visual C ++,後來被確認

PhoeniX
2014-01-05 15:36:30 UTC
view on stackexchange narkive permalink
  1. .net可以通過導入來標識,您可以使用依賴項警告程序查看-檢查是否存在作為核心庫的 mscorlib.dll 的導入.net框架。
  2. C ++可以通過
    1. 看著程序集來識別-它使用此調用約定
    2. PEid可以顯示有關使用什麼編譯器和運行時的部分信息。通常,它為此使用簽名列表。
    3. 輕鬆檢測-該工具仍在維護中,並且具有非常有趣的功能。
    4. ol>
  3. ol>
由於某種原因,我無法取消“ PEid”。 Windows Defender將其刪除為惡意軟件。
Avery3R
2014-01-05 13:23:29 UTC
view on stackexchange narkive permalink

Marco Pontello的 TrID軟件通常可以識別用於編譯文件的內容。

注意:免費,僅供非商業用途
您有使用指南嗎?我已經下載了主程序,但是找不到單獨包裝所需的定義數據庫?我可以看到這些定義在網站上的位置,但是我還無法弄清楚如何下載它們。
def下載就在主程序下載下
jcora
2014-01-11 03:40:58 UTC
view on stackexchange narkive permalink

Java字節碼文件可以通過文件開頭的魔術數字 0xCAFEBABE 來標識。同樣,標準的命名約定是使這些文件的名稱以 .class 結尾。

但是,@ hexafraction在註釋中發出警告:“ Java類文件不會包含它們的名稱。打包到.exe PE時可見的幻數或文件擴展名,除非它們已解包(假定它們只是放在首位,並且沒有重新編譯為機器代碼)”

將Java類文件打包到.exe PE中時,它們的幻數或文件擴展名將不可見,除非將它們解包(假定它們只是打包在第一位,而不是重新編譯為機器代碼)
Thomas Weller
2014-01-06 02:58:13 UTC
view on stackexchange narkive permalink

Stud_PE(免費)掃描許多PE文件(.EXE和.DLL)的簽名。

Scott Wisniewski
2014-01-07 15:59:46 UTC
view on stackexchange narkive permalink

您可以通過查看PE標頭來檢測.net程序集。有關詳細信息,請閱讀CLR規範和PE / COFFEE規範。

Java使用它自己的類文件格式。我不太熟悉它,但是應該可以肯定地對類文件進行標識。

母語的開發主要是關於啟發式的。諸如調用約定,序言,結語等之類的東西。分解的遞歸下降以及慣用語識別器可能會使源編譯器識別。例如,GCC和類生成非常獨特的代碼。

evlncrn8
2014-09-05 01:00:15 UTC
view on stackexchange narkive permalink

(公然插件)

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)

  • 掃描時間:0.156秒[00000009Ch(156)滴答] [539掃描完成]


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...