Hola!
Veamos:
con el proceso de ingenieria inversa, se puede obtener una version descompilada de un (EXE)?
Si (Depende del lenguaje). Incluso, si haces un buen trabajo, obtendras un codigo fuente que realiza una tarea muy parecida o similiar al codigo fuente original. Por supuesto, el fuente lo deberas armar en base al desemblado.
Para lenguajes interpretados (que corren en VM: Java, .NET, etc) existen decompiladores que te proporcionan el fuente, por lo que no debes hacer mucho mas. En el caso de lenguajes que compilan a nativo, pues tendras el desemblado y a partir de ahi, empiezas a reversearlo.
de manera qeneral que pasos se deben seguir?
Esto tambien depende de muchos factores: proteccion del exe, lenguaje (tipo de compilacion y estructura/forma en la que trabaja dicho lenguaje)
Suponiendo que quieres revesear una funcion determinada:
1) Quitar packer (si hubiera)
2) Utilizar herramientas de analisis sobre el ejecutable:
2a) IDA analiza muchas clases de EXE´s
2b) Si esta en algun lenguaje interpretado (con VM): Reflector para .NET, algun decompilador para Java (DJJava decompiler me viene a la mente, aunque hay otros mejores).
2c) Si es un Delphi: IDR, Dede, Olly
2d) Si es un VB: VB Decompiler para analizar, VBReformer para modificarlo
2e) OllyDbg: la mejor herramienta para analizar cualquier cosa que corra en 32 bits!!!
Bueno, basicamente esos son los pasos generales, aunque todo depende siempre de varios factores como puedes ver...
Saludos!