Estoy buscando un programa gratuito de código abierto herramienta que compila diversos «clásico» lenguajes de secuencias de comandos, por ejemplo, Shell Korn, ksh, csh, bash, etc. como un ejecutable — y si el script llama a otros programas o ejecutables, para ser incluidos en un solo ejecutable.

Razones:

  1. Para ofuscar el código para su entrega a un cliente con el fin de no revelar nuestra Propiedad Intelectual para la entrega en un del cliente propia máquina/sistemas para los cuales no tengo control sobre lo que los permisos que pueda establecer en relación al acceso, por lo que el archivo de programa tiene que ser binario mediante el cual el funcionamiento no puede ser visto fácilmente por la visualización en un editor de texto o hexdump visor.

  2. Para hacer un solo, simplemente implementa el programa para el cliente sin/o una cantidad mínima de cualquier dependencias externas.

Yo prefiero algo simple sin la necesidad de que el administrador de paquetes desde:

  1. Yo no puedo confiar en el conocimiento de los clientes a llevar a cabo (de la onu) instrucciones de embalaje y

  2. Yo no puedo confiar en las políticas que rigen sus máquinas con respecto a la instalación de los paquetes (y de hecho de terceros).

El más simple enfoque preferido es ser capaz de compilar para la adecuada código máquina ejecutable que se ejecuta fuera de la caja sin ningún tipo de dependencias.

7 Comentarios

  1. 39

    La solución que satisface plenamente mis necesidades sería SHC – una herramienta gratuita, o CCsh una herramienta comercial. Ambos compilar los scripts de shell C, que luego puede ser compilado usando un compilador de C.

    Enlaces sobre SHC:

    Enlaces sobre CCsh:

    • Tengo tendencia a hacer de este la aceptó respuesta.
    • Yo nunca había oído hablar de esto antes, pero parece que hacer lo que el OP está pidiendo. Tenga en cuenta que puede o no puede ser compaitble con algunas de las características de bash o ksh, pero este probabaly no importa para el OP de sus objetivos. También tiene una función para dar el binario compilado una fecha de caducidad.
    • Esta es la respuesta definitiva. He estado usando SHC para compilar mi secuencias de comandos de shell, es desde el año 2002, si no me equivoco. SHC fue hecha por Francisco Javier Rosales García. Aunque, es un poco dijo, pero todavía funciona.
    • Revisar: creo que todavía actualizaciones SHC hasta ahora (2012)
    • +1 upvote x 2 Gracias Louie para la corroboración!
    • Recientemente he probado esta herramienta, SHC, y aunque es compilado en mi fecha de Fedora 14 sistema, el resultado de los ejecutables no funcionan correctamente, se iba a correr como si estuvieran en segundo plano, y yo tendría que tipo de fg a traer a primer plano. Este fue el caso para la mayoría de los scripts básicos, así que no estoy seguro de qué.
    • shc es no una ofuscación — es trivial para leer el guión de contenido en tiempo de ejecución. strace o sysdig, o incluso un adecuado análisis de /proc va a hacer el trabajo de extraer el script original.
    • «shc es no una ofuscación» – yo no disputa que. Pero aquí, shc no se utiliza para la ofuscación, pero en lugar de proporcionar la secuencia de comandos de shell en forma de código C – que luego pueden ser compilado para una máquina-código binario ejecutable, el cual ofrece la ofuscación en general.
    • Me doy cuenta de que esto fue publicado hace seis años, pero la ejecución de un programa compilado por shc todavía requiere la shell y todas las utilidades, a ser instalado. La única cosa que es bueno para es (débil) de ofuscación
    • Puede ser utilizado para un poco de mayor seguridad; ejemplo: tengo un script de bash que quiero distribuir como un código firmado el Ornitorrinco de la aplicación; para asegurar, al menos, alguna forma de seguridad contra el paquete de la manipulación, la secuencia de comandos de shell se compruebe que el paquete de firma de código de integridad y el certificado para la firma de código. Con un estándar de shell script, simplemente puede editar el script y re-codiseñar el paquete. Sin embargo, si el guión es una shc-binario, es por lo menos un poco más difícil. Lo malo, es que los shc -U opción para la fabricación de un imposible de encontrar binario no funciona más en macOS Sierra Alta.
    • PS: shc v3.9.7 fijo con soporte para untraceable binarios en El Capitán y más tarde.

  2. 5

    Usted podría utilizar esto: http://megastep.org/makeself/

    Esto genera un script de shell que se auto-extractos de un paquete de tar.gz archivo en el directorio temporal y, a continuación, puede ejecutar un comando arbitrario en la extracción.

    El uso de esta herramienta, usted puede proporcionar solamente una secuencia de comandos de shell para el cliente.

    Esta secuencia de comandos, a continuación, extraer su ofbsh ofuscado secuencias de comandos y archivos binarios en /tmp, y ejecutar de forma transparente.

    • +1 para el embalaje independiente sugerencia.
    • Aceptado respuesta es utilizar SHC de la siguiente manera: stackoverflow.com/questions/6423007/…
    • el aceptó responder re: SHC no admite la agrupación en otros ejecutables, que su pregunta dice que es un requisito.
    • «SHC no admite la agrupación en otros ejecutables». Puedo tomar su palabra para ella, sin duda, pero no necesita ser incluido en otros ejecutables – si la salida de SHC es puro código en C, entonces C código puede ser compilado, vinculado y construido utilizando herramientas estándar, que hacer soporte de agrupación (?)
    • Ejecutable, los archivos del paquete… que suenen como SFX paquete (en 7zip, winrar). He usado shc y es genial, incluso creó un binario ejecutable de obfsh script para tratar de combinarlos.
  3. 4

    Puede ofuscar scripts de shell con algo así como ofbsh. No fácilmente paquete de otros programas en un único archivo ejecutable para unix, aunque. Normalmente, el enfoque para la instalación sería otra un paquete para su plataforma, el gestor de paquetes (por ejemplo,rpm, deb, pkg) o para proporcionar un tarball para desentrañar en el directorio apropiado.

    Si usted necesita un archivo ejecutable que se descomprime el contenido que usted podría ser capaz de utilizar un shell de archivo. Echa un vistazo a la documentación de las shar(1) y ver si eso va a conseguir lo que quieres

    Si usted realmente necesidad de secuencias de comandos de la capacidad de pegar varios programas en C juntos, echar un vistazo en el lenguaje Tcl. Tiene una API que está diseñado para trivialmente envoltura de los programas en C que esperar a ver argv[] parámetros de estilo. Usted puede incluso integrar los fragmentos de código C en un intérprete de Tcl y la cola junto con varios scripts Tcl.

    Si usted realmente necesita hacer es opaca, se puede cifrar los scripts tcl y envolver toda la cosa, en algo que unencrypts el tcl secuencias de comandos a un búfer y, a continuación, ejecuta el intérprete de Tcl en ellos. Tcl puede aceptar secuencias de comandos desde un archivo o una char* buffer, por lo que el sin cifrar scripts nunca tiene que golpear el sistema de archivos.

    • Yo prefiero algo simple sin la necesidad de que el administrador de paquetes como 1) no puedo confiar en el conocimiento de los clientes para llevar a cabo esas instrucciones y 2) no puedo confiar en las políticas que rigen sus máquinas con respecto a la instalación de los paquetes (y de hecho de terceros). El más simple enfoque preferido es ser capaz de compilar para la adecuada código máquina ejecutable que se ejecuta fuera de la caja sin ningún tipo de dependencias.
    • Añadido esto a la respuesta.
    • +1 Para ofbsh, esto podría ser útil en algunos casos. A pesar de que podría causar daños a la percepción del cliente si el código es ilegible, tal vez el cliente puede estar preocupado acerca de los problemas de calidad, a menos que se les explicó que el código es deliberadamente confuso por lo que no pueden entender – que no necesariamente ayudan a construir una relación basada en la confianza, si estamos tratando de ocultar las cosas desde una 3ra parte, cliente de pago.
    • Mejor dar un ejecutable en primer lugar, lo que elimina cualquier tipo de ocultar la preocupación, es probablemente lo que el cliente espera de todos modos y no da ninguna indicación de cómo el software se implementa. Nadie se va a sentir que las cosas se están ocultos de ellos si es simple ejecutable que se ofrece.
  4. 3

    shc

    He modificado el original fuente y se actualiza a una nueva versión con algunos adición de características y correcciones de errores.
    Es aquí.

    Ejemplo De Uso:

    shc -f script.sh -o binary_name
    

    script.sh serán compilados para un binario llamado binary_name

    Tenga en cuenta que, usted todavía necesita la necesaria shell para ser instalado en su sistema para ejecutar este archivo ejecutable.

    • Esto no parece funcionar en Ubuntu 18.04; las actualizaciones?
    • Sírvanse proporcionar detalles sobre el tema de la página del proyecto. Usted puede estar haciendo algo mal..
    • gracias por la respuesta. ¿te importa si tengo un correo electrónico de usted? Yo estaba muy emocionado acerca de su proyecto, pero no podía entender cómo hacer que funcione.
  5. 1

    arx es un gran preparador, y usted puede ser capaz de integrar un obfuscator en su flujo de trabajo.

  6. 1

    Opciones que están disponibles para usted:

    • Escribir una lógica en el código que, cuando el código se ejecuta por primera vez en una caja, voy a revisar a ver si todos los paquetes necesarios existir. Y si no, el código automáticamente ir a buscar los paquetes a sí mismo y se los instale…sin preguntar al usuario a hacer nada. La única pregunta a la que el usuario debe ser respondida es «Es aceptar para proceder con la instalación de los citados paquetes? (Y/N)». De nada, fuera de que es demasiado.

    • Una vez que el código anterior es completa (sí, soy consciente de que no tiene que ser simple para que usted este código, o puede ser que es, no sé de su capacidad de codificación), copiar y pegar su código completado a un sitio como kinglazy.com y un archivo ejecutable real se generará para usted.

    Hay muy pocos beneficios de esta opción en particular:

    • Sí, usted será capaz de ejecutar la versión cifrada de su secuencia de comandos sin necesidad de exponer la información patentada.
    • Nadie puede tratar de «ver» su guión, porque si lo hacen, van a ver nada, pero indescifrable, cifrada jerga que no tienen sentido para ellos.
    • Nadie puede intentar modificar el guión, porque si lo hacen, la secuencia de comandos inmediatamente deje de funcionar.
    • No se puede ejecutar un depurador en su secuencia de comandos para ver cómo funciona. Si lo hacen, la secuencia de comandos se abortará.
    • También, nadie puede crear copias de la secuencia de comandos en el mismo servidor. Si lo hacen, va a abortar y no funciona. Sólo permiten a los usuarios crear enlaces simbólicos a la ubicación original de donde usted desea que el script sea.

    Me pueden faltar algunas cosas en lo que usted pidió, pero yo creo que el de arriba satisface una buena parte de lo que quería.

    No estoy seguro si esto funciona en otros scripts, pero ciertamente no para los scripts de shell.

Dejar respuesta

Please enter your comment!
Please enter your name here