¿Cómo convertir un script de shell en un ejecutable binario?


36

Quiero convertir mis scripts de shell en ejecutable binario para que nadie más pueda editarlo o leerlo. ¿Hay alguna forma de convertirlo en un ejecutable binario?




@ l0b0 Ese enlace menciona dos razones. La tercera razón: desea que se ejecute en máquinas que no tienen el intérprete instalado (por ejemplo, ejecutar un script bash en una máquina que solo tiene sh). La cuarta razón: necesita root setuid por alguna razón (por ejemplo, un script que permite al usuario montar volúmenes sin sudo).
Calmarius

Respuestas:


42

shc es lo que estás buscando. obténgalo aquí: shc
Extract, cd en dir, makey luego ./shc -f SCRIPT. Hecho.

Todo lo que necesita para hacer esto, lo encontrará aquí:
SHC Howto


8
+1 wow, eso es interesante. Solo tenga en cuenta que si el proceso es exactamente como se describe, este es un método débil para ocultar una contraseña: aún podría ser extraído por alguien que sepa cómo están estructurados los ejecutables. Sin embargo, sería muy efectivo para ocultar un guión de observadores casuales. Me interesaría saber si los scripts precompilados de esta manera son más rápidos de ejecutar.
Ricitos de oro

21
Tenga en cuenta que no funciona con bash(o shbasado en bash), como se puede hacer: env SHELLOPTS=verbose ./script.xpara ver el contenido del script. Probablemente también haya formas fáciles de evitar con otros proyectiles.
Stéphane Chazelas

44
Desde la página de manual de shc, "Desafortunadamente, no le dará ninguna mejora de velocidad como lo haría un programa C real". datsi.fi.upm.es/~frosal/sources/shc.html
Adam

shc se ha actualizado a 3.9.0: github.com/neurobin/shc
Jahid

Aunque es posible que SHC no le brinde una mejora de velocidad que espera, ofrece la posibilidad de hackear SHC para obtener una mejor traducción de su script. Escribir un script de shell limpio y luego mejorar SHC podría ser más productivo que escribir un programa C desde cero, o complicar un script de shell para hacerlo más rápido.
Kaz

1

Si el objetivo aquí es ocultar su script de shell para que no se pueda leer o modificar, intente pegarlo en el siguiente sitio web:

Cifrado combinado y ofuscación

Cuando envíe su script a este sitio, se generará un archivo zip para usted. Realice los siguientes pasos para generar un ejecutable independiente a partir de este archivo zip.

  1. Después de enviar su script, haga clic derecho en el enlace de descarga
  2. Vaya a su host Unix y wget o (curl -O) el enlace de descarga
  3. Descomprima el archivo zip
  4. cd EnScryption.com
  5. ./(tu-script.sh)

El paso 5 configurará automáticamente el script y generará una copia independiente para usted. Luego puede scp esta copia independiente a diferentes hosts o distribuirla como desee. Tenga en cuenta que, una vez cifrado, no puede cambiar el nombre de su script. Esto es por razones de seguridad.

Otra opción disponible para usted, si tiene tiempo, es crear su propio algoritmo de ofuscación seguro. Si su script debe ser portátil, debe usar herramientas que estén fácilmente disponibles en la mayoría de los sistemas Unix ... es decir. openssl o base64. Esto requiere mucho tiempo. Pero si la motivación está ahí, de hecho es posible hacer que la presentación de sus guiones sea imposible o, al menos, ¡que lleve mucho tiempo!


13
Recomendaría contra tal servicio. Nunca puede estar seguro de que no inyectan ningún malware antes de entregárselo. Incluso si los creadores mismos no intentan hacerlo, entonces el adversario puede comprometer a su servidor para que realice tales inyecciones en secreto.
ddnomad

"Después de enviar su script" es exactamente lo contrario de proteger su código.
Giuseppe Urso

-1

bzexe puede convertir y también comprimir el archivo


1
No entiendo cómo esto evitaría que alguien extraiga el archivo para obtener el script de shell original, que es lo que el usuario quería evitar. La compresión no esconde nada.
Kusalananda
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.