bash 파일에는 실행 가능/바이너리 코드가 포함되어 있습니다.

bash 파일에는 실행 가능/바이너리 코드가 포함되어 있습니다.

나는 이것을 찾았다도구다운로드했을 때 바이너리 코드가 포함된 bash 실행 파일이었습니다.
우선 이것이 가능한지 몰랐습니다. 누가 이 일을 할 수 있는지 아는 사람이 있나요? 또한 bash 파일에 무엇이 포함되어 있는지 실제로 확인할 수 없기 때문에 이것이 일반적으로 얼마나 안전한지 잘 모르겠습니다.

답변1

이것은 몇 가지 "트릭"에 의존하는 독립형 Java 프로그램입니다.

  • META-INF/MANIFEST.MFJava 프로그램은 시작할 Java 클래스를 지정하는 매니페스트( )가 포함된 ZIP 파일 인 JAR 파일로 패키지될 수 있습니다 .
  • java -jarJAR 파일이 주어지면 매니페스트가 확인되고 해당 클래스가 시작되어 JAR 파일 및 Java 런타임에서 다른 필수 리소스를 로드합니다(실행할 다른 클래스를 지정할 수도 있지만 여기서는 관련이 없습니다).
  • ZIP 파일은 임의의 데이터로 시작할 수 있습니다. 이것이 자동 압축 풀기 실행 파일이 작동하는 방식입니다(실행 가능한 ZIP 파일은 실행 시 자동으로 압축이 풀립니다).

svg2pngJAR 파일에도 동일하게 적용되지만 앞에 쉘 스크립트가 추가됩니다.

#!/bin/sh

exec java -Xmx1G -jar "$0" "$@"

실행하면 쉘이 실행되고 java -Xmx1G -jar"스크립트" 이름( svg2png사용된 경로 사용)과 인수로 대체됩니다. 이 예에서는 -Xmx1G힙 크기를 설정하고 -jarJVM에 지정된 JAR 파일을 "실행"하도록 지시합니다. svg2png나머지는 svg2pngJAR 파일이며 구체적으로 다음 매니페스트를 포함합니다.

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: sterlp
X-Compile-Target-JDK: 1.8
X-Compile-Source-JDK: 1.8
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_51
Main-Class: org.sterl.svg2png.Main

이는 JVM에 클래스를 실행하여 org.sterl.svg2png.Main프로그램을 시작하도록 지시합니다.

ZIP 형식에 대한 자세한 내용을 확인할 수 있습니다.위키피디아에서, 특히 구조적 설명은 형식이 파일의 시작 부분(및 다른 위치)에 임의의 데이터를 배치할 수 있는 방법을 보여줍니다. ZIP 파일은 "중앙 디렉터리"로 식별됩니다.마치다파일.

관련 정보