Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
apxutil — Una herramienta para manipular archivos de archivo PLC de Schneider Electric. | Kitploit
Herramientas/GitHubGitHub/finngineering/apxutil
Seguridad de Sistemas EmbebidosAnálisis de VulnerabilidadesExplotaciónIngeniería InversaSeguridad SCADA/ICSSeguridad de HardwareAnálisis de BinariosAnálisis de Firmware
GitHubfinngineering/apxutil

apxutil

Una herramienta para manipular archivos de archivo PLC de Schneider Electric.

Ver Repositorio
10521hace 8 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Una herramienta para manipular archivos de archivo PLC de Schneider Electric

Esta herramienta puede extraer y reensamblar archivos "archive" de PLC, utilizados por varios PLC de Schneider Electric, incluyendo al menos M580, M340 y Quantum. Los archivos de archivo con extensión .sta son en realidad un archivo zip que contiene unos pocos archivos. Dentro del archivo, el archivo verdaderamente importante se llama Station.apx. El contenido de ese archivo es lo que se transfiere hacia/desde el PLC durante una descarga/carga (completa) del programa. Naturalmente, contiene el código ejecutable real del programa PLC. Pero también contiene toda la información necesaria para editar el programa PLC en Control Expert Classic (o Unity Pro). El formato de archivo .apx es propietario, y hay poca información disponible. Un poco de información está disponible en Liras en la red y Team82, pero este trabajo profundiza más de lo que ellos publicaron. Con esta herramienta, las diferentes "secciones" de Station.apx pueden extraerse (y descomprimirse si es necesario) para su examen. La herramienta también puede reensamblar Station.apx a partir de datos de sección y metadatos previamente extraídos (y quizás modificados). Y este archivo reensamblado se abrirá sin errores en Control Expert Classic / Unity Pro, siempre que los cambios realizados no rompan la "lógica de sección".

Motivación

Nunca hubo un gran plan con este proyecto. Utilizo PLC de Schneider Electric de vez en cuando, y estaba interesado en cómo funcionan (o no) a un nivel más fundamental. Resultó que esta investigación era lo suficientemente compleja como para mantenerme entretenido (probablemente como resolver crucigramas para la gente normal), y terminé con esta herramienta.

Advertencia

La herramienta hace todo lo posible para extraer y reensamblar los archivos con los que trabaja. Sin embargo, el usuario debe ser consciente de que la herramienta se desarrolló con:

  • Un conocimiento limitado del formato de archivo .apx (y .sta)
  • Validación de entrada limitada, lo que significa que preferirá fallar o hacer algo incorrecto antes que rendirse sin intentarlo
  • Sobrescribe archivos anteriores sin preguntar
  • Pruebas limitadas de diferentes PLC y versiones de software de programación
  • Pruebas limitadas de la funcionalidad del código

El uso de archivos reensamblados en un PLC real puede causar problemas, especialmente si ha modificado las secciones o los metadatos. Incluso es posible que pueda bloquear el PLC. Por lo tanto, cargue archivos de archivo modificados en el PLC bajo su propio riesgo.

Uso

La herramienta se usa desde la línea de comandos con el intérprete de Python:

python apxutil.py -h

usage: apxutil.py [-h] [-f filaname-apx] [-F filaname-sta] [-e dir] [-E dir] [-a manifestpath] [-A manifestpath] [-d]
                  [-x] [-B] [-r]

Herramienta para manipular archivos .sta y .apx de Schneider Electric

options:
  -h, --help            show this help message and exit
  -f, --apxfile filaname-apx
                        archivo .apx a leer o escribir
  -F, --stafile filaname-sta
                        archivo .sta a leer o escribir
  -e, --extract-apx dir
                        extraer el contenido del archivo Station.apx
  -E, --extract-sta dir
                        extraer el contenido del archivo .sta
  -a, --assemble-apx manifestpath
                        crear el archivo Station.apx basado en apx_manifest.ini
  -A, --assemble-sta manifestpath
                        crear un archivo .sta a partir de archivos en sta_manifest.ini
  -d, --decompress      descomprimir las secciones de Station.apx que están comprimidas
  -x, --hexdump         imprimir un volcado hexadecimal de Station.apx con información de cabecera
  -B, --include-apd     incluir Station.apd al crear el archivo .sta
  -r, --restart-offsets
                        reiniciar los desplazamientos a 0 para cada sección en la impresión del hexdump (útil para comparar diferencias)

La ayuda debería ser bastante autoexplicativa. Generalmente, las opciones abreviadas con letras mayúsculas funcionan en archivos .sta, y las letras minúsculas funcionan en archivos .apx. A continuación se dan algunos ejemplos de uso.

Para extraer el contenido de un archivo .sta al directorio "extracted", usaría:

python apxutil.py -F archive.sta -E extracted

Para extraer el contenido de Station.apx al directorio "contents", usaría:

python apxutil.py -f extracted/BinAppli/Station.apx -e contents -d

La opción "-d" significa que las secciones comprimidas se descomprimirán, pero se puede omitir si se desean los datos de sección sin procesar (todos).

Para reensamblar Station.apx, usaría:

python apxutil.py -f extracted/BinAppli/Station.apx -a contents

Esto ensamblará Station.apx basado en el apx_manifest.ini encontrado en el directorio contents, comprimiendo los datos de sección si se descomprimieron previamente. Los tamaños de sección y CRC se recalcularán y no se leerán de apx_manifest.ini.

Para reensamblar un archivo .sta, usaría:

python apxutil.py -F modified-archive.sta -A extracted

Esto omitirá de forma predeterminada el archivo Station.apd (que parece ser principalmente una comprobación de integridad de la cabecera del archivo Station.apx). Si desea que se incluya, agregue la opción "-B". Pero eso puede significar que Control Expert Classic no pueda abrir el archivo de proyecto.

Para "ver" directamente el contenido del archivo Station.apx, se puede usar el siguiente comando:

python apxutil.py -F modified-archive.sta -x

Esto generará un "volcado hexadecimal canónico" del archivo Station.apx, lo que significa que ve los desplazamientos, datos hexadecimales y datos ASCII, 16 bytes a la vez, incluidos los metadatos. La opción "-d" se puede usar para descomprimir las secciones comprimidas (pero tenga en cuenta que los desplazamientos tienen poco sentido en ese caso). La opción "-r" se puede usar para reiniciar el desplazamiento a 0 para cada sección. Esto es útil si ha realizado cambios y desea poder "compararlos" sin desplazamientos.

Estructura del formato de archivo APX

Si desea comprender el formato de archivo APX (al nivel de mí mismo y de esta herramienta), la mejor manera es realmente mirar el código fuente de apxutil.py. El código no debería ser demasiado difícil de leer incluso con poca experiencia en programación. Pero puede causar náuseas a los programadores reales. En cualquier caso, aquí se ofrece una visión general de alto nivel del formato de archivo. El archivo APX comienza con una cabecera de archivo de 32 bytes. El resto del archivo se divide en diferentes secciones, cada una con una estructura similar. Cada sección comienza con una cabecera de sección, cuya longitud depende del tipo de sección (definido al inicio de la cabecera). La cabecera de sección va seguida de un RTE (cabecera). Después del RTE vienen los datos de la sección (si están presentes). Y después de los datos de la sección comienza la siguiente sección (cabecera). Parece que la cabecera de sección está más relacionada con el formato Station.apx y el RTE está más relacionado con el entorno de ejecución (RunTime Environment o RealTime Environment quizás?), pero no es una distinción clara.

Descargar herramienta