tools source sans open forensics forensic for encase computer windows computer-forensics

source - forensic tools for windows



Buscar lenguaje de programaciĆ³n utilizado (14)

Inicie y compruebe qué DLL de tiempo de ejecución usa con Process Explorer.

Si eso no lo hace inmediatamente obvio, busque en la web referencias a esos archivos DLL.

La mayoría de los desensambladores (incluido Olly, creo) pueden mostrarle fácilmente el texto contenido en un EXE o DLL, y eso a veces también puede dar una pista. Los tipos Delphi a menudo tienen el prefijo T como en TMyClass.

Si se trata de un ejecutable pequeño sin referencias de DLL y sin texto, es posible que sea SOL. En ese punto, necesitarías buscar expresiones idiomáticas de compiladores particulares, y sería principalmente conjeturas.

¿Cuál es la forma más fácil de averiguar en qué lenguaje de programación se escribió una aplicación? Me gustaría saber si es vb o c ++ o delphi o .net, etc. del archivo exe del programa.


La forma más fácil es preguntarle al desarrollador del programa. No requiere ningún conocimiento y programas de utilidad.


Puedes intentar usar Depends para ver qué dependencias de tiempo de ejecución tiene, lo que podría darte algunas pistas.


  • Determine la aplicación Delphi
  • Utilice eda_preview270.exe (desde aquí ) o alguna otra herramienta de espionaje y compruebe los nombres de las clases de ventana. Si leen como TButton o TfrmBlubb, es una aplicación de VCL. Si hay un "Afx" en ellos, es probable que sea MFC.

Buena pregunta. No hay una forma general de decirlo, pero apuesto a que la mayoría de los compiladores y bibliotecas dejan una marca en el archivo EXE resultante. Si desea dedicarle mucho tiempo, puede reunir un grupo de EXEs escritos en idiomas conocidos y buscar cadenas comunes. Imaginaría que encontrarías algo.

Dependancy Walker , que alguien más mencionó sería una buena manera de buscar dependencias reveladoras, como las versiones de MSVCRT, etc.


En general, no puedes.

Si puede cargarlo en Reflector , sabrá que es un ensamblaje administrado.


Existe un arte para detectar en qué idioma se escribió un programa. Es posible, pero no existen reglas estrictas. Se necesita mucha experiencia (y también lleva a la pregunta "¿Por qué querrías ...?" Pero aquí hay algunas ideas sobre cómo hacerlo.

Lo que estás buscando es una "firma". La firma podría ser una cierta cadena que es incluida por el compilador, una referencia a una API que es bastante común en la herramienta de programación que se utiliza, o incluso un estilo de programación que es común a las herramientas que se utilizan, visible en las cadenas contenidas En la aplicacion.

Además, hay estilos de cómo se implementa una aplicación: varios archivos de configuración que se encuentran en el directorio de implementación, dlls y ensamblajes e incluso imágenes, directorios o íconos.

Las aplicaciones Java envueltas en un ejecutable autoejecutable contendrán referencias a java libs, y es probable que tengan ciertas bibliotecas o archivos incluidos en el mismo directorio que indiquen que es java.

Como se indica en otras respuestas, un ensamblaje administrado también mostrará ciertos signos: puede abrirlo en Reflector, etc. Si bien es cierto que c # y VB son "intercambiables" una vez compilados, no es cierto que sean idénticos. Si utiliza Reflector para desensamblar código VB, con frecuencia verá que el ensamblado hace referencia al ensamblado Microsoft.VisualBasic.dll. Podrá distinguir entre las aplicaciones Mono porque es muy probable que contengan referencias a los ensamblajes mono.

Muchos compiladores ensamblan y vinculan el código de ciertas maneras y dejan huellas. Por ejemplo, al examinar un ejecutable de ventana usando "strings: tab en Process Explorer , verá muchas cadenas. Utilizando estos puede determinar estilos de programación, métodos llamados, errores o métodos de rastreo con el exe.

Un ejemplo es que los compiladores utilizan diferentes mecanismos para la localización: Microsoft almacena cadenas localizadas en archivos XML o de recursos. Otros compiladores usarán una táctica diferente.

Otro ejemplo es c ++ name mangling . El compilador de CodeWarrior utiliza un algoritmo diferente para modificar los nombres de las variables miembro y las funciones de una llamada que Visual Studio.

Supongo que podrías escribir un libro sobre el tema de determinar con precisión el linaje de cualquier ejecutable. Este tema probablemente se llamaría "programación arqueológica".


Intentaría ejecutar el .exe a través de un programa de ''cuerdas'' para obtener sugerencias variadas.


Los lenguajes compilados (con esto quiero decir sin lenguajes de scripting, o Java, .NET, etc.) se compilan en las instrucciones de ensamblaje de la CPU, que es esencialmente una conversión de un solo sentido. Normalmente no es posible determinar en qué idioma se escribió un programa. Sin embargo, utilizando un walker de dependencia, podría determinar qué biblioteca de tiempo de ejecución el programa estaba cargando (si corresponde) y, por lo tanto, determinar qué idioma utilizó (por ejemplo, MS Visual C ++ 9 usa msvcr90.dll).



usted puede verificar que es un ensamblado .net o no tratando de abrir con la herramienta ildasm.exe


Aquí hay un gran video que explica cómo puede descomprimir el archivo .exe, si está empaquetado con UPX. Software que necesita para esto: PEiD , OllyDbg , ImpREC

Después de desempaquetar el archivo binario, puede verificar con PEiD qué lenguaje de programación tiene el binario.


La forma más fácil que encontré (al menos en los juegos de computadora) fue buscar en la carpeta "redist" anidada dentro de la carpeta principal del juego. Puede ser obvio para algunos de ustedes que tienen más experiencia en programarse a sí mismos, pero el propósito específico del MSI en esta carpeta es permitir que el archivo setup.exe instale automáticamente los requisitos previos para el juego en sí. Por ejemplo: en Empire Total War, hay un MSI llamado "vcredist_x86-sp1.exe". Esto indica que el juego / programa fue escrito en "Visual C 2005" de Microsoft en .NET Framework (generalmente). De hecho, si abre el MSI / EXE, el instalador debe indicar de inmediato el idioma en el que está escrito y la versión. La razón por la que estoy familiarizado es porque codigo en C # y VB en .NET Framework y autoinstalamos los requisitos previos para nuestra aplicación de negocios. ¡Espero que esto ayude!


Prueba PEiD

por supuesto, si usaban un empacador, primero tendrían que hacer un desempaquetado :)