GPG暗号化ファイルをバイナリ実行可能ファイルのように見せる

GPG暗号化ファイルをバイナリ実行可能ファイルのように見せる

奇妙な問題があります。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によって異なります。もちろん、要求がある場合にのみペイロードのみを印刷するように、プログラム自体にいくつかのロジックをいつでも追加できます。objcopydd

答え2

ポイントは何ですか?実行可能ファイルを含めます。

ld --format=binary archive.tgz.gpg executable_file

実際にELF実行可能ファイルを提供します。実行されません(_start実行するシンボルはありません)。

これが必要な場合は、mainmain.cなどの機能を含むC / C ++ / ...プログラムを作成し、データを含むビルドint main(){}オブジェクトファイルを使用しld --relocatable --format=binary archive.tgz.gpg mixin.oて最後にプログラムと共にビルドしますgcc main.c mixin.o -o main

非常に簡単にデータを取得し、かなり標準的なbinutilsツールreadelfobjcopy。 (たとえば、特定の文字列が含まれていることを確認environ

今、どの専門家もこれにだまされないでしょう。組み込みアーカイブは経験的エントロピー、このようなバイナリ分析ツールは、radare2難読化方法に関係なくそれを検出します。

あなたができることは、暗号化されたアーカイブのサイズを人為的に増やすことです。たとえば、暗号文の各バイトを実際のCプログラムから抜粋した一般的な機械語コードセットの他のメンバーにマップすることです(長さは一定ではなく、接頭辞を除く)。 )。ただし、マッピングを解除する必要があります。これには辞書が必要で、標準ツールだけを使用するとかなり迷惑になることがあります。

関連情報