奇妙な問題があります。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プログラムから抜粋した一般的な機械語コードセットの他のメンバーにマップすることです(長さは一定ではなく、接頭辞を除く)。 )。ただし、マッピングを解除する必要があります。これには辞書が必要で、標準ツールだけを使用するとかなり迷惑になることがあります。