Depende de la situación: tipo de aplicación, modelo de implementación, especialmente su modelo de amenaza, etc.
Por ejemplo, ciertos compiladores pueden cambiar sustancialmente un código delicado, introduciendo fallas sutiles, como eludir ciertas comprobaciones, que aparecen en el código (que satisfacen la revisión del código) pero no en el binario (que no supera la prueba de realidad). < br>
También hay ciertos rootkits a nivel de código - mencionaste C ++, pero también hay rootkits de código administrado para, por ejemplo. .NET y Java: eso evadiría completamente la revisión del código, pero se mostraría en los binarios implementados.
Además, el compilador en sí puede tener ciertos rootkits, que permitirían insertar puertas traseras en su aplicación. (Vea un poco del historial del rootkit original : el compilador insertó una contraseña de puerta trasera en el script de inicio de sesión; también insertó esta puerta trasera en el compilador mismo cuando se recompila desde el código "limpio"). Nuevamente, falta el código fuente pero está presente en el binario.
Dicho esto, es, por supuesto, más difícil y lento invertir la ingeniería del binario, y sería inútil en la mayoría de los escenarios si ya tiene el código fuente.
Quiero enfatizar este punto: si tiene el código fuente, ni siquiera se moleste con RE hasta que haya eliminado todas las otras vulnerabilidades que encontró a través de revisión de código, análisis de intervalos, confusión, modelado de amenazas, etc. E incluso así, solo molesta si es una aplicación altamente sensible o extremadamente visible.
Los casos de vanguardia son lo suficientemente difíciles de encontrar, y lo suficientemente raros, que sus esfuerzos pueden gastarse mejor en otros lugares.
Por otra parte, tenga en cuenta que hay algunos productos de análisis estático que analizan específicamente los binarios (por ejemplo, Veracode), por lo que si está usando uno de esos, no importa ...