Dipende dalla situazione - tipo di applicazione, modello di implementazione, in particolare il modello di minaccia, ecc.
Ad esempio, alcuni compilatori possono sostanzialmente modificare alcuni codici delicati, introducendo sottili difetti, come l'esclusione di alcuni controlli, che appaiono nel codice (soddisfacendo la revisione del codice) ma non nel binario (in mancanza del test di realtà). < br>
Inoltre ci sono alcuni rootkit a livello di codice - hai citato C ++, ma ci sono anche rootkits di codice gestito per es. .NET e Java: evaderebbero completamente la revisione del codice, ma verranno visualizzati nei file binari distribuiti.
Inoltre, lo stesso compilatore potrebbe avere determinati rootkit, che consentirebbero l'inserimento di backdoor nella tua app. (Vedi un po 'di storia del rootkit originale - il compilatore ha inserito una password backdoor nello script di accesso e ha anche inserito questa backdoor in il compilatore stesso quando si ricompila dal codice "pulito"). Di nuovo, manca dal codice sorgente ma presente nel file binario.
Detto questo, è ovviamente più difficile e dispendioso in termini di tempo fare il reverse engineering del binario, e sarebbe inutile negli scenari più se hai già il codice sorgente.
Voglio sottolineare questo punto: se hai il codice sorgente, non disturbare nemmeno con RE finché non hai ripulito tutte le altre vulnerabilità che hai trovato tramite revisione del codice, pentesting, fuzzing, modellazione di minacce, ecc. E anche in questo caso, solo preoccuparsi se si tratta di un'app altamente sensibile o estremamente visibile.
I casi limite sono abbastanza difficili da trovare, e abbastanza rari, che i tuoi sforzi possano essere meglio spesi altrove.
D'altro canto, si noti che ci sono alcuni prodotti di analisi statici che analizzano in modo specifico i binari (ad esempio, Veracode), quindi se si sta utilizzando uno di questi non ha molta importanza ...