Ein Packer oder Binärschutz ist ein Mittel zum Schutz von Software vor Reverse Engineering. Malware-Autoren verwenden Packer, um der signaturbasierten Erkennung zu entgehen, z. B. um RE zu vereiteln. Ein wichtiger Teil des Packers ist der Stub-Code zum Wiederherstellen der geschützten Binärdatei, der normalerweise Techniken wie Anti-Debugging, Anti-VM und Anti-Emulator enthält, die die Analyse stören.
Entpacker sind in einigen Antivirenprogrammen implementiert. Soweit ich weiß, Kaspersky und Norton. Ein Entpacker ist ein Programm, das ein gepacktes Programm entpackt, dh die ursprüngliche Binärdatei extrahiert. Es gibt Entpacker, die nur von einem bestimmten Packer entpackt werden können, und Entpacker, die entpackt werden können, auch wenn im Voraus keine Informationen über den Packer vorliegen, z. B. wie der Packer das Programm wiederherstellt. Dies wird als Allzweck-Entpacker bezeichnet. Seit etwa 2005 werden Untersuchungen zu Allzweck-Entpackern durchgeführt und OmniUnpack, PolyUnpack, Pindemonium, Renovo, RAMBO usw. entwickelt.
Zu den bekannten PE-Packern gehören UPX und Armadillo, aber nur wenige sind tatsächlich in ELF erhältlich. Wenn es sich in der POC-Phase befindet oder nur auf der Folie erklärt wird, gibt es Shiva, Burneye, Mayas Schleier und so weiter. Ich empfehle Ihnen, einen Blick auf [Mayas Schleier] zu werfen (http://bitlackeys.org/#maya).
Wenn Sie einen Packer mit ELF erstellen möchten, ist Announcing Userland Exec eine gute Referenz. Schauen Sie sich auch [Modern Userland Exec] an (http://www.stratigery.com/userlandexec.html).
Ursprünglich musste der Packer das ursprüngliche Programm im Speicher wiederherstellen und die Ausführung darauf übertragen. Aber diesmal schreibe ich die Binärdatei auf die Festplatte und führe die ursprüngliche Binärdatei mit execve () aus. Die Funktion als Packer ist nicht gut, aber ich werde mit einer einfachen beginnen. Auf diese Weise sollten Sie beide 32-Bit- / 64-Bit-Programme packen können. Wenn Sie nichts über ELF wissen, empfehle ich Ihnen, zuerst die Referenz zu lesen. Das folgende Bild zeigt das Packen der Binärdatei, die Sie schützen möchten. Die linke Seite ist die Struktur einer normalen ELF-Binärdatei, und die rechte Seite ist der Zustand, in dem die Binärdatei gespeichert ist. Es gibt wahrscheinlich mehrere Möglichkeiten, die Binärdatei zu speichern, aber dieses Mal werde ich das Datensegment erweitern und die Binärdatei dort ablegen.
Zu diesem Zweck muss der Wert des Mitglieds des Programmkopfes des Datensegments geändert werden. Insbesondere müssen Sie nur die Größe der Binärdatei hinzufügen, die Sie in p_filesz und p_memsz im Programmheader des Stub-Binärdatensegments speichern möchten. Der Stub-Code muss seinen Versatz und seine Größe kennen, um den ursprünglichen Code wiederherzustellen. Sie werden nach dem Originalcode hinzugefügt. Daher ist die endgültige Struktur wie folgt.
Wie ich vergessen habe, vergessen Sie nicht, diese Größen zu p_filesz und p_memsz hinzuzufügen, um die Größen und Offsets zu speichern. Außerdem habe ich vergessen, es in der Abbildung zu zeichnen, aber der Stub-Code muss auch den Schlüssel kennen, um den verschlüsselten Originalcode wiederherzustellen. Fügen Sie die Größe dafür hinzu. Das heißt, die Größe des ursprünglichen Datensegments + die Größe der Größe + die Größe des Versatzes + die Größe des Schlüssels ist die Größe des endgültigen Datensegments. Extrahieren Sie anschließend die Binärdatei aus Ihrem eigenen Datensegment, schreiben Sie sie auf die Festplatte und schreiben Sie den Stub-Code, um das Programm mit execve () auszuführen. Den Code dazu finden Sie unter GitHub. Wahrscheinlich sollte Linux gut funktionieren.
Laden Sie den Code herunter und geben Sie make ein, um eine Datei namens Wrapper zu erstellen.
Es kann mit "./wrapper die Binärdatei, die Sie packen möchten" gepackt werden, und eine ausführbare Binärdatei namens gepackt wird generiert. Der Code wurde in wenigen Stunden geschrieben und ist noch nicht vollständig (ich möchte nicht). Es ist fast gekritzelt, so dass Sie doppelte Funktionen und unklare Optionen sehen, aber Sie werden die Idee des Packens von Binärdateien verstehen. (Als nächstes werde ich etwas anständiger machen)
Recommended Posts