오바시
Obash Obash는 C 프로그래밍 언어로 작성된 bash 스크립트 해독기입니다.obash는 bash 셸 스크립트를 실행 가능한 바이너리로 인코딩 및 암호화합니다.이것은 이 스크립트에 영감을 준 프로젝트입니다만, AES-256 암호화를 사용하고, 키와 초기화 벡터는 바이너리 자체에 하드 코드 되지 않고 하드웨어로부터 취득됩니다.Obash 프로젝트는 shc에 영향을 미치는 몇 가지 문제에 대처하기 위해 시작되었습니다.주요 문제는 단순히 명령어를 발행하는 것만으로 원래의 셸 스크립트소스를 확인할 수 있는 것입니다.ps -ef목적은 같지만 obash는 shc와 코드를 공유하지 않고 처음부터 처음부터 구축되어 있습니다.코드의 유사성은 순전히 우연이며 공유 목표에 의해 결정됩니다.
Obash는 아직 진행 중인 작업이지만 GitHub의 마스터 브랜치는 일반적으로 사용 가능한 소스를 가지고 있으며 테스트 브랜치는 언제든지 전환 상태에 있을 수 있습니다.
사내에서의 동작
Obash는 입력 스크립트를 가져와 AES-256이 암호화하고 base64가 AES cipertext를 부호화하여 부호 없는 문자 배열 선언에 사용할 수 있도록 합니다.그런 다음 기본적으로 인터프리터인 중간 C 파일을 생성합니다( 참조).interpreter.c기능, 암호문을 포함하는 텍스트 배열, 재사용 가능한 바이너리용 키 및 IV(하드웨어에 바인딩되지 않음) 및 메인.그런 다음 중간 C 파일이 실행 파일로 컴파일됩니다.중간 C 파일은 다음과 같은 방법으로 구축됩니다( 참조).mk_sh_c에서 기능하다.functions.c):
- 블록 포함
interpreter.h crypted_scriptbase64를 통해 부호화된 AES-256 암호화 스크립트를 포함하는 변수- 시리얼 변수 및 uuid 변수(재사용할 수 없는 경우 비어 있음)
- 차단함수
interpreter.h - body_본체 블록
interpreter.h
interpreter.h가 interpreter.c에서 생성되는 방법에 대한 자세한 내용은 refreate_interpreter_header 스크립트를 참조하십시오.
AES-256 암호화 키 및 초기화 벡터
키와 IV는 바이너리에 하드 코딩되지 않습니다(사용 가능한 스태틱바이너리를 사용하여-rflag)는 하드웨어에서 매번 취득됩니다(기계에 바인딩되지 않음).재사용 가능한 스태틱 바이너리(로 빌드)의 경우-rflag)는 UUID와 시리얼은 바이너리 자체에 존재하지만 makekey와 makeiv에 의해 조작되므로 누군가가 바이너리 자체를 검사해도 즉시 사용할 수 없습니다.시리얼과 UUID를 취득하는 장소로부터의 행방은 트레이스 가능하며 비밀(재사용 불가의 머신 UUID와 시리얼 번호, 재이용 가능한 랜덤한 16진수)은 아니지만, 이러한 행방은 그대로 직접 사용할 수 없는 방법으로 조작할 필요가 있습니다.코드에는 이 작업을 수행해야 하는 위치를 나타내는 코멘트가 있습니다(함수의 makekey 및 makeiv 함수 참조).c). Obash를 사용하는 각자는 그렇게 하도록 권장됩니다.그렇지 않으면 난독화된 바이너리에서 스크립트 소스를 추출하는 것이 상당히 쉬워집니다.예를 들어 분산 코드에서는 "-"가 UUID에서 제거되고 시리얼이 사용된 암호의 권장 길이에 도달하도록 패딩됩니다.
대체 수단
레퍼런스