Riesci a scoprire quale compilatore è stato utilizzato per compilare un programma?
-
03-07-2019 - |
Domanda
Dato un eseguibile compilato da C per essere eseguito su Solaris, è possibile determinare quale compilatore è stato usato per compilare l'eseguibile incompleto associato?
Non riesco a vedere nulla quando utilizzo le stringhe o il comando file e la magia non sembra contenere nulla di specifico.
I compilatori generalmente inseriscono un'impronta digitale nei loro file di output eseguibili?
applausi,
Soluzione
Se l'eseguibile non viene rimosso, prova / usr / ccs / bin mcs-p Questo di solito mostrerà il compilatore, il linker e tutti i file di intestazione utilizzati
Altri suggerimenti
Sì, IDA è ottimo per questo. Utilizza una tecnologia chiamata FLIRT .
PEID farà il trucco. In genere funziona alla grande. Ovviamente PEID è uno strumento di Windows ma non dovrebbe importare e dovrebbe mostrarti al compilatore (a volte anche informazioni specifiche sulla versione)
Crea piccole app di prova con ogni compilatore che stai cercando di identificare. Quindi guarda i risultati in un editor esadecimale e prova a trovare schemi. Potrebbe rivelarsi davvero ovvio, ad esempio " Rich " firme dal linker di Microsoft.
Non spogliato:
$ cc -O ciao.c
$ file a.out
a.out: eseguibile MSF ELF a 32 bit SPARC32PLUS versione 1, V8 + obbligatoria, collegata dinamicamente, non eliminata
$ stringhe -a a.out | grep cc
/opt/solarisstudio12.3/prod/bin/cc -O hello.c
$ dwarfdump -i a.out | grep compile_o
DW_AT_SUN_compile_options Xa; O; R = Sun C 5.12 SunOS_sparc Patch 148917-07 2013/10/18; backend; raw; cd;
Stripped:
$ strip a.out
$ file a.out
a.out: eseguibile MSF ELF a 32 bit SPARC32PLUS versione 1, V8 + obbligatoria, collegata dinamicamente, spogliata
$ stringhe -a a.out | grep cc
(nessuno)
Visual Studio e GCC in genere seguono diverse routine di avvio (che chiamano main). Questo forse un suggerimento. Non so degli altri però. Per le DLL, non riesco a pensare a qualcosa di simile dalla cima della mia testa.
I compilatori di solito aggiungono la propria "firma" personale come testo in chiaro nei file compilati. È possibile utilizzare uno strumento come le stringhe per estrarre il testo in chiaro.