No logro entender tu explicación, desconozco de C# pero la instrucción:
byte[] executableSource = doSomethingToGetExecutableSource();
En todos los lenguajes de programación que conozco retornaría un valor tras llamar a una función, esta variable es tipo byte, lo más lógico es que solo se retorne un código de notificación (sin errores o con errores), esto es utilizado para verificar si la función se logró ejecutar sin problemas:
FuncionA(){
if(a!=b){
return ERROR1 // constante ERROR1 que simboliza a un simple número.
}else{
...
...
return SUCCESS // constante SUCCESS que simboliza a un simple número.
}
y si es como tu dices, entonces tomas el source y borras todo pero todo y solo dejas la función:
doSomethingToGetExecutableSource();
Compilas, luego con un debugger, analizas las instrucciones de la función.
Las anotas en un notepad o lo que sea de tu agrado.
Vuelves a compilar pero con todo el source, ya con eso buscas la secuencia de instrucciones (estarías buscando en donde se encuentra la función en ejecutable).
ya localizada la función debes poner un BP en el inicio de ella para saber en que lugar es llamada, obteniendo ese lugar, lo más probable es que logres localizar el puntero a executableSource, en donde debería tener el source del . EXE que se convierte en no se qué o no se qué.
Lo que pasa es que no tengo el source completo y no puedo compilarlo.
La parte que "descifra" la DLL no la tengo y al sacarla con Reflector veo que está ofuscada con Crypto Obfuscator (una versión nueva que ningún deobfuscator de momento soporta)
Es decir: no puedo compilar (si pudiese, directamente hacía un
File.WriteAllBytes(execurableSource) y así de fácil lo lograría).
Por eso, estoy intentando leer lo que tiene desde la RAM.
Descarto tu siguiente respuesta ya que se trata sobre compilar el código fuente y es una opción que he descartado.