Beiträge von Suizidhilfe

    #Datum: 29.09.2008
    #Author: Eddy14


    Wenns hier nicht erwünscht ist verschieben/deleten.
    Auch etwas älter, wers braucht.


    Vorschau: [Das Tut ist zu lang zum Posten, daher poste ich unten einen DL-Link]


    [HIDE]
    #Titel: Coding a PE-Crypter (oder: Wie man EXE Dateien verschlüsselt)


    #Inhaltsverzeichnis:
    ### 0x1 - Vorwort
    ### 0x2 - Einleitung
    ### 0x3 - Runtime vs Scantime
    ### 0x4 - Das PE-Format
    ### 0x5 - Wie gehen wir vor?
    ### 0x6 - Sicherheit
    ### 0x7 - Ein bisschen Code
    ### 0x8 - Schlusswort


    _________________________
    \/\/\/\/\/0x1\/\/\/\/\/\/
    #########################
    # Vorwort #
    #########################


    Hallo und herzlich Willkommen in meinem zweiten Tutorial dieses Jahr, und das sechste
    insgesamt (leider, muss ich sagen, ich hätte gerne mehr Tutorials geschrieben, glaubt mir :/)
    Kurz gefasst, geht es in diesem Tutorial, um das verschlüsseln von exe Dateien.


    Wie in jedem meiner Tutorials, sag ich erstmal, was ihr alles an Vorwissen braucht, um dieses
    Tutorial erfolgreich zu meistern :)


    -Gute Kenntnisse in Delphi (für spätere, kleine Codeschnippsel)
    -Kenntnisse in OOP (ein bisschen reicht schon ;) ) und Strukturen
    -Man sollte schonmal eine Exe Datei gestartet haben :P
    -Kenntnisse im Bereich des Reverse-Engineering (Manual Unpacking wäre cool!)
    -Kenntnisse in Assembler (zum Schreiben des Stubs; und auch sonst sehr nützlich und wichtig)
    -Das letzte und schwierigste ist: Das PE-Format kennen!


    Alles in allem, ist natürlich hier mehr gefordert als wirklich nötig ist :)
    Aber wenn ihr all das aufgezeigte könnt, versteht ihr das Tutorial am besten. Zum letzten
    Abschnitt muss ich aber sagen, dass ich auf das PE-Format auch eingehen werde. Jedoch
    kann ich nicht komplett darauf eingehen, da es einfach den Umfang dieses Tutorials
    sprengen würde. Ich werde aber ein paar sehr gute Dokumentationen darüber verlinken.


    Also, seid ihr bereit auf ein neues Abenteuer mit Eddy? Auf gehts in die Einleitung!


    _________________________
    \/\/\/\/\/0x2\/\/\/\/\/\/
    #########################
    # Einleitung #
    #########################


    Heute, vor genau 2 Jahren, stellte ich eine Frage im opensc.ws Forum, wie man denn einen Crypter
    codet, und suchte gezielt nach einem Tutorial. Wer hätte es anders erwartet, es existierten
    keine Tutorials, und auch kein richtiger "Strang" wie man denn nun auf das gewünschte Ergebnis
    kommt. Also, machte ich einfach wie bisher, vergaÃ? das mit dem Crypter ganz schnell wieder
    und widmete mich ganz anderen Sachen. Was dabei heraus kam, ist dieses Tutorial, nach 2 Jahren :P
    (nein ich habe nicht 2 Jahre an diesem Tutorial gearbeitet, sondern nur einen Tag, aber ich habe
    2 Jahre gebraucht um mir dieses Wissen anzueignen).
    Wieso hat das so lange gedauert? Zum einen, weil ich nicht wusste WAS ich genau lernen musste,
    und zum anderen, war ich sehr viel mit anderen Sachen beschäftigt (Spieleprogrammierung ftw!).
    Irgendwann kam ich aber zum Reverse-Engineering. Ich lernte, wie man Shareware freischaltet,
    Keygens schreibt, und zuletzt, das aller wichtigste, wie man gepackte Programme wieder entpackt.
    Manual Unpacking nennt sich das ganze, und lehrt einem sehr viel über das PE-Format.
    Ich muss gestehen, ich bin nicht der King darin, aber ich weiÃ? genug, um etwas damit umgehen
    zu können :O Schande über euch, die ein Tutorial von einem Noob lesen! :P


    Naja, im nächsten Kapitel werde ich euch den Unterschied zwischen Runtime und Scantime erklären.


    Also dann, lets go! :)


    _________________________
    \/\/\/\/\/0x3\/\/\/\/\/\/
    #########################
    # Runtime vs Scantime #
    #########################


    Viele Kiddies lesen dieses Stück geschriebene Theorie. Alle denken sich "Jeah, geil, porno, hammer,
    ficken, wie code ich einen 1337 crypter ?!?!?!?!?".
    Und zugleich kommt von etwas fortgeschrittenen Noobies die Frage "Scantime kann ich ja schon crypten,
    aber Runtime? WIE GEHT DAS VERDAMMT?!"
    Erstmal ganz ruhig. Ich unterstütze euch Kiddies nicht! Ich kann euch nur sagen, in "Wirklichkeit"
    existiert nur eine Art von Cryptern, nämlich die Runtime Crypter! Die Scantime Crypter sind die
    Erfindung von kleinen Trojaner Kiddies! ;) Sieht man doch schon an dem Wort "Scan".
    Der Unterschied ist ganz klar, Runtime bedeutet, zur Laufzeit, und Scantime, zu der Zeit wo das
    Programm noch nicht gestartet wurde. Die Kiddies unterscheiden dies, weil ein Antivirus
    Programm die Möglichkeit hat, Programme auf der Festplatte zu analysieren. Ein Programm, welches
    Runtime crypted, macht es im Arbeitsspeicher, direkt während es noch läuft! Sowas merkt ein AV nicht.
    Aber ein Crypter, welches Scantime cryptet, der entpackt das entschlüsselte Programm wieder
    auf die Festplatte. Unsinn oder? Das ist ganz einfach, die Leute wissen nicht, wie ein Crypter
    überhaupt funktioniert! Ich erkläre euch mal Scantime so:
    Die exe Datei wird verschlüsselt, wie jede andere Datei auch (von Anfang der Datei bis zum Ende).
    So in dieser Form ist es natürlich nicht lauffähig! Woher soll der Windows Loader wissen, wie es
    dieses verkrüppelte Teil ausführt? Der Scantime Crypter fügt nun diese verschlüsselte Datei
    z.B. als Resource in den "Stub". Der Stub, ist hier das Programm, welches die verschlüsselte Datei
    später wieder entpackt.
    So, nun sitzt die besagte Datei im Stub. Der Stub ist nun etwas grö�er geworden (es beinhaltet
    die gecrypteten Datei). Dieser "fertige" Stub wird nun ausgeführt. Der AV erkennt da nichts, die
    Stub ist undetected (jedenfalls, solange die AV-Leute es noch nicht erkannt haben) und darin
    ist nur verstümmmelter Code, die der AV nicht kennt. Bei der Ausführung der fertigen Stub wird
    nun etwas ganz einfaches gemacht. Die Resource Datei entpackt, wird entschlüsselt, und mit einem
    einfachen Execute Kommando gestartet! Einfach oder?
    Aber der AV erkennt dies natürlich, der Virus liegt ja jetzt wieder in seiner Ursprungsform auf
    der Platte!
    Ein Runtime Crypter macht etwas ganz anderes. Es muss noch erwähnt werden, dass nicht nur EINE
    Crypt-Methode existiert, sondern sehr viele verschiedene (je nach kreativität ;) )
    Ich werde euch in diesem Tutorial eine Methode vorstellen, welches einen Stub, welches nur 23 Bytes
    groÃ? ist, in die bereits existierende Sektion einer Datei steckt. Dies ist wohl die einfachste
    und faulste Methode, einen Crypter zu coden. Aber es reicht, für dieses Tutorial.


    Ich hoffe euch ist der Unterschied klar geworden. Nochmal zum mitschreiben:
    Scantime => Virus wird nicht erkannt, zum Zeitpunkt des Scans auf der Festplatte, ABER nach der
    Decryption!
    Runtime => Virus wird nicht erkannt, zum Zeitpunkt des Scans auf der Festplatte, SOWIE nach der
    Decryption!


    Zuletzt will ich aber noch sagen, dass ich unter keinen Umständen Viren, Trojaner etc. mit diesem
    Tutorial unterstütze! Die Kiddies werden das Tutorial aber sowieso nicht erfolgreich durchstehen :)
    Da ich als Linux Nutzer schon vergessen habe, wie es war jeden Tag Angst vor Viren zu haben,
    kann ich eure Gefühle leider nicht ganz verstehen und deuten :O
    Dennoch, wisset eins: Viren sind böse, Virenschreiber nicht :)
    Anstatt "Virus" könnt ihr auch jedes andere Programm nehmen, welches nicht direkt einsehbar sein
    soll (was die Funktionalität angeht) wenn es in einen Disassembler geladen wird :)
    Also, Shareware = Virus *g*


    _________________________
    \/\/\/\/\/0x4\/\/\/\/\/\/
    #########################
    # Das PE-Format #
    #########################


    Ich werde euch jetzt nicht mit historischem ärgern, sondern nur kurz und knapp sagen: Exe und DLL
    Dateien (und soweit ich noch weiÃ?, ein paar andere) verwenden das PE-Format (Portable Executable).
    Ein Dateiformat legt fest, wie eine Datei gegliedert und aufgebaut ist. D.h. wo sich welche Daten
    befinden, wie diese abzurufen sind usw. z.B. ist eine JPG Datei ganz anders aufgebaut als eine RAR
    Datei. Nur weil dein Programm beispielsweise mit JPG Dateien umgehen kann, heiÃ?t es nicht, dass es
    das auch mit RAR Dateien kann. Denn beides sind komplett unterschiedlich und beinhalten auch
    unterschiedliche Arten von Daten, obwohl sie beide >Dateien< sind.
    Um einen Crypter für Exe Dateien zu schreiben, M�SST ihr das PE-Format in seiner ganzen Pracht
    kennen! Denn ihr werdet damit arbeiten. Ihr müsst bestimmte Daten abrufen können, abspeichern können,
    berechnen können usw.
    Dafür braucht ihr erstmal eine anständige Dokumentation. Ich kann euch da (entweder die Google Such-
    ergebnisse oder) folgendes empfehlen:
    http://arteam.accessroot.com/tutorials.html?fid=112 (sehr nett geschrieben :) )


    Ich selbst habe mir eine Delphi-Unit geschrieben, welches solch eine Datei laden und bearbeiten kann.
    Der Umgang damit ist ziemlich simple. Es kann auch noch nicht wirklich alles, aber schon einiges!
    Es umfasst schon 1400 Zeilen Code, geschrieben in ca. 2 Wochen. Wenn ihr euch also wirklich damit
    auseinandersetzen wollt, macht euch auf viel Tipp-Arbeit gefasst!
    Ihr könnt natürlich auch meine fertige Library verwenden, was euch aber nichts nützen wird, da ihr
    das PE-Format trotzdem kennen müsst (die Library macht nichts automatisch für euch, es stellt euch
    nur die Daten der PE-Datei zur verfügung).


    Lest euch ein bisschen in das Format ein. Gibt nicht auf! Schreibt am besten ein kleines C oder Delphi
    Programm, wo ihr gewisse Bereiche einer Pe-Datei ausliest und ausgibt. Für den Anfang sollte es reichen
    die 2 Magic-Bytes "MZ" und "PE" auszulesen ;) Dann seid ihr sicherlich motiviert genug, den Rest
    auch noch zu schaffen :)


    Zuletzt, gibt es noch zu sagen: Lernt Reverse Engineering, da lernt ihr das Format am besten kennen!


    _________________________
    [/HIDE]


    Download: [hide]http://rapidshare.com/files/257977715/delphi_crypter.txt[/hide]



    GruÃ?

    Die PM an dich ist mir jetzt ziemlich peinlich -.-
    Ich hab mir das garnicht genau angeguckt, riesen Dank.


    Nur eine Frage wie hast du das gefunden?


    EDIT:// Kann geclosed werden :>