이상한 문제가 있습니다. archive.tar.gz
일반 텍스트 파일로 채워진 tar 파일이 있습니다 . 그런 다음 아카이브는 archive.tgz.gpg
총 archive.tgz.gpg
< 100KB로 GPG 암호화됩니다.
archive.tgz.gpg
이제 Linux 바이너리처럼 보이게 만들고 대부분의 UNIX 표준 유틸리티를 사용하여 난독화를 해제하고 싶습니다 . 나는 (아마도) 그렇지 않다는 것을 알고 있다일하다바이너리 실행 파일로서 괜찮습니다. 그러나 얼핏 보면 손상된 바이너리 실행 파일처럼 보일 것입니다.
cat
내가 얻은 가장 먼 것은 파일 형식이 올바르게 반환 되지 dd
않도록 헤더 수정을 사용하려고 시도했지만 file
온라인에서 이 작업을 수행하는 데 대한 추가 정보를 찾지 못했습니다.
누구든지 나를 올바른 방향으로 안내해 줄 수 있다면 매우 감사하겠습니다. 감사해요!
답변1
작업 실행 파일에 페이로드를 완전히 포함할 수 있습니다.
echo "I am your encrypted message." > message.txt
gpg2 --symmetric message.txt
ld -r -b binary -o message.o message.txt.gpg
gcc -o unsuspicious unsuspicious.c message.o
모든 프로그램이 포함되어 있습니다 unsuspicious.c
:
#include <stdio.h>
int main(int argc, char** argv) {
printf("Hi. I am a totally unsuspicious executable.\n");
}
이 기술을 사용하면 페이로드가 바이너리의 .data 섹션에 있게 됩니다. 이를 검색하려면 전체 데이터 섹션을 추출하십시오.
objcopy --dump-section .data=data.bin unsuspicious
일부 다른 데이터가 104바이트 페이로드 앞에 옵니다. 와 사이의 정확한 차이를 확인했는데 nm unsuspicious
제 경우에는 16바이트였습니다. 이를 알면 페이로드를 검색할 수 있습니다.__data_start
_binary_message_txt_gpg_start
dd if=data.bin skip=16 bs=1 count=104 of=message.txt.gpg
이것이 목표의 효율적인 구현인지 여부는 " 표준 유틸리티"를 고려하는지 여부 nm
에 따라 다릅니다. 물론, 요청이 있을 경우에만 페이로드만 인쇄하도록 프로그램 자체에 일부 논리를 언제든지 추가할 수 있습니다.objcopy
dd
답변2
점은 무엇인가? 실행 파일을 포함시키십시오.
ld --format=binary archive.tgz.gpg executable_file
실제로 ELF 실행 파일을 제공합니다. 실행되지 않습니다( _start
실행할 기호가 없음).
이를 원한다면 main
main.c와 같은 기능이 포함된 C/C++/... 프로그램을 작성한 int main(){}
다음 데이터가 포함된 빌드 개체 파일을 사용 ld --relocatable --format=binary archive.tgz.gpg mixin.o
하고 마지막으로 프로그램과 함께 빌드하십시오 gcc main.c mixin.o -o main
.
매우 간단하게 데이터를 얻을 수 있으며 상당히 표준적인 binutils 도구 readelf
나 objcopy
. (예를 들어 특정 문자열이 들어 있는지 확인 environ
)
이제 어떤 전문가도 이것에 속지 않을 것입니다. 내장된 아카이브는경험적 엔트로피, 이와 같은 이진 분석 도구는 radare2
난독화 방법에 관계없이 이를 감지합니다.
당신이 할 수 있는 일은 암호화된 아카이브의 크기를 인위적으로 늘리는 것입니다. 예를 들어 암호문의 각 바이트를 실제 C 프로그램에서 발췌한 일반적인 기계어 코드 집합의 다른 구성원에 매핑하는 것입니다(길이가 일정할 필요는 없지만 접두사는 제외). ). 그러나 매핑을 해제해야 합니다. 이를 위해서는 사전이 필요하며 표준 도구만 사용하면 꽤 짜증날 수 있습니다.