[C#] Ejecutar Exe Incrustado

Iniciado por Xkipper, 1 Octubre 2011, 05:42 AM

0 Miembros y 2 Visitantes están viendo este tema.

Xkipper

Hola

Solo llevo unos días en esto del C# y me pareció interesante los métodos de programación.

Bueno, estoy en un mini proyecto donde tengo un Recurso (EXE) Incrustado y deseo ejecutarlo sin Escribirlo al Disco.

Hasta el momento debo escribirlo al Disco para ejecutarlo y la verdad no me molesta mucho, pero por "seguridad" me gustaría que el Exe no fuera llevado al Disco Duro.

--- Otra cosa, con lo mismo de ejecutar la Aplicación Incrustada. ---

He insertado un control Timer1 en mi proyecto (formulario) y la idea era que corriera la Aplicación y se activara el Timer1 para hacer un posterior Conteo de cuantos minutos la aplicación lleva Ejecutándose, pero me he llevado la sorpresa que al Ejecutar el EXE extraído el Timer no Corre aunque le de Start antes o después de la linea de proces.start().

Alguien me podría orientar sobre el caso ^^

Saludos

Keyen Night

Bueno tengo varias cosas que aclararte :) la primera a través de la clase Process puedes obtener el StartTime del proceso y restado con Date.Now puede obtener el tiempo en TimeSpan que lleva corriendo el proceso desde que se inicio.

Aquí un ejemplo de como hacerlo con el proceso mismo
Código (vb.net) [Seleccionar]

  MessageBox.Show(Date.Now.Subtract(Process.GetCurrentProcess.StartTime).ToString)


Y con respecto a lo del ejecutable hay una noticia buena y una mala :xD

La mala es que sin escribir el archivo en el disco no lo podrás correr.
La buena es que si el ejecutable está en .Net y no está ofuscado o protegido el código lo puedes cargar con Reflexion.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Xkipper

Oh Gracias.

Timer:
Esto lo "resolví" usando un BackgroundWorker así podía disfrutar el Timer como lo necesitaba.

Exe:
Lamentablemente intente con el método de Reflexión pero no funciono debido a que el Exe es de otro tipo y no reconoce el Ensamblador.

Necesito 2 cosas :

1.- Proteger el exe para que el usuario no lo pueda Correr sin usar la aplicación en C#

2.- Detectar programas Hook que estén corriendo en el Sistema, necesito identificar programas o script como AutoHotKeys. Para eso era Timer. Lamentablemente aun no se como detectar procesos a ese Nivel.

¿Alguien tiene una idea?

Saludos... ^^

Keyen Night

#3
1.- Tienes el source del exe que no quieres que habra sin la aplicación en C#?
2.- No te recomiendo .Net para hacer esto, pero si lo quieres intentar adelante, tengo experiencias personales con .Net y Hooks traumantes :xD

Los Hooks vienen de diferentes colores, tamaños y formas, hay muchos metodos para hacer Hook, busca como funcionan algunos de estos metodos para poder detectar su presencia, siempre dejan alguna marca que se puede detectar.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Xkipper

Keyen Night, eres el unico vivo en el Foro  :P

Bueno, no tengo el SRC del Exe porque ya viene compilado.

Sobre el uso de Hook se que hay de todas las formas.

Ahora, elegí .Net porque lo encontré mas fácil ya que no soy programador, por lo mismo se que no podría detectar esas huellas que mencionas.

Sé que AutoHotKeys ocupa una DLL propia de ellos, pero sus scripts compilados (exe) están comprimidos por UPX, no se si se puedan detectar aplicación en ejecución por el método UPX desde C#.

Si C# no es capaz de cumplir esa función, pues se podría usar otro lenguaje, compilar  un ejecutable y hacerlo correr con Timer1 para que monitoree y mate Hooks.

Saludos...

Keyen Night

#5
Entonces es Hook por inyección de dll, debes tener en cuenta que Hookear es algo muy delicado, si instalas o desinstalas inadecuadamente el Hook puedes terminar con una bonita BSOD :xD o que el proceso crashee, debes usar C++ no hay otra opción :-X

Si estas buscando una dll en especifico basta con hacer tu una dll para inyectar en los procesos y descargar la dll que buscas, si estas generalizando y quieres detectar y descargar un tipo en especifico tienes que buscar como funcionan para ver como detectar ese tipo de inyección, con respecto a UPX, no hay que preocuparse porque cuando el dll esta cargado en memoria ya no está protegido. Por esto del Hook si estas dispuesto a hacerlo en C++ no tienes mucho de que preocuparte hay muchos ejemplos aqui en el foro incluso hay una clase en ASM/C++ hecha por [Zero] (Este tipo es un genio :xD) que la puedes usar en VS C++

Si no tienes el Source ni es .Net entonces no puedes hacer nada para evitar que el proceso no se habrá, a menos que estes dispuesto a hacerle un parche a el ejecutable, bastante difícil si eres principiante, si no tienes el Source pero es .Net puedes hacer un parche con .Net Reflector y el Add-Ins Reflexil, bastante fácil de hacer.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...