No creo que se pueda detectar si una función si hay un descompilador o desamblador activo analizando tu aplicación sin estar ejecutandose, lo que si se podría hacer sería añadir código basura para intentar evitar que funcione correctamente y que el descompilador arroje resultados falsos o se rompa la descompilación porque intentó analizar una función rara.
Si querés que tu aplicación detecte en su lugar si está siendo depurada en tiempo de ejecución hay muchas maneras. La más sencilla y obviamente la más facil de evitar es
IsDebuggerPresent.
B#
Gracias, a esa función me refería, pero como dices, supongo que es muy facil de evitar.
Me parece interesante lo que has dicho de meter código basura para que se rompa la descompilación. ¿qué código podría hacer eso?