È impossibile analizzare un programma per scoprire se farà qualcosa di malevolo. Questo è vero indipendentemente dal fatto che si stia tentando di analizzare il codice sorgente o compilato.
Il modo per fare ciò che si richiede è compilare ed eseguire il codice in una sandbox. Una volta che il programma è terminato (o dopo un timeout che hai deciso) distruggi la sandbox.
La sicurezza di una tale costruzione è sicura quanto la sandbox che stai utilizzando. A seconda dei requisiti del codice necessario per eseguire la sandbox potrebbe essere qualcosa di semplice come la modalità sicura di Linux, o qualcosa di complicato come una macchina virtuale in piena regola, idealmente senza connettività di rete.
Più complicata è la sandbox, maggiore è il rischio di una vulnerabilità di sicurezza nella sandbox che compromette un progetto altrimenti valido.
Alcune lingue possono essere compilate in modo sicuro all'esterno di una sandbox. Ma ci sono lingue in cui persino la loro compilazione può consumare quantità imprevedibili di risorse. Questa domanda su un sito affiliato mostra alcuni esempi di come un piccolo codice sorgente può esplodere in un grande output.
Se il compilatore stesso è privo di vulnerabilità, potrebbe essere sufficiente impostare limiti sulla quantità di CPU, memoria e spazio su disco che è consentito consumare. Per una maggiore sicurezza è possibile eseguire il compilatore all'interno di una macchina virtuale.
Ovviamente questi metodi possono essere combinati per un ulteriore livello di sicurezza. Se dovessi costruire un sistema del genere, probabilmente inizierei una macchina virtuale e all'interno della macchina virtuale userei ulimit per limitare l'utilizzo delle risorse del compilatore. Quindi collegherei il codice compilato in un wrapper per eseguirlo in modalità sicura. Infine, ancora all'interno della macchina virtuale eseguirò l'eseguibile collegato.