Shellcode um in Datei zu schreiben



  • Noch mal etwas zusammengefasst (ungetested):

    jmp short file 
    file2: 
    pop ebx 
    push ebx 
    xor ecx,ecx
    mov [ebx+0x6],cl  
    mov [ebx+0x11],cl 
    lea ebx,[ebx+7] 
    mov cx,666o 
    xor eax,eax 
    mov al,8 
    int 0x80 
    pop ecx
    mov ebx,eax
    
    xor eax,eax 
    mov al,4 
    xor edx,edx 
    mov dl,6 
    int 0x80 
    mov al,6 
    int 0x80 
    mov al,1 
    xor ebx,ebx 
    int 0x80 
    file: 
    call file2 
    db  'Test', 0x0a, 0x0d,'#./test.txt#'
    

    Hab die Nachricht auch gleich nullterminiert, das hast du vergessen.

    Allerdings ist es doch besser die zwei strings zu trennen, dann kannst du auch schwerer vergessen irgendwelche offsets anzupassen wenn du sie mal änderst.
    Und du solltest dir dringen angewöhnen Kommentare zu machen !



  • Du willst doch wohl kein Knacker Programm erstellen oder?!



  • DarkShadow44 schrieb:

    Hab die Nachricht auch gleich nullterminiert, das hast du vergessen.

    wenn es sich um Shellcode handelt, so dürfen in der Regel keine Bytes mit Wert 0 vorkommen.

    Shellcode wird im befallenen Programm ja normalerweise mit strcpy oder ähnlichen Funktionen in den Puffer kopiert. Und strcpy hört auf Zeichen zu kopieren, sobald ein 0 Byte gefunden wird.

    Der gesamte Shellcode mitsamt NOP Sled und sich wiederholender Rücksprungadresse hier als Skizze:

    +------+-----------+----------------+
    | NOPs | Shellcode | Return Adresse |
    +------+-----------+----------------+
    

    Sind 0er bereits im Shellcode zu finden, so wird die Rücksprungadresse am Stack nicht überschrieben und dein Code wird niemals ausgeführt.

    Im Übrigen übergibt man dem Syscall write ja eh die Länge des Strings, somit kann man sich das terminierende 0 Byte ohnehin sparen.

    Du willst doch wohl kein Knacker Programm erstellen oder?!

    uhhh böse da interessiert sich jemand für Assembler, Reverse Engineering und Shellcode. Das muss ein böser Hacker sein 😃



  • wenn es sich um Shellcode handelt, so dürfen in der Regel keine Bytes mit Wert 0 vorkommen.
    

    Nullterminiert müssen Strings für API Aufrufe ja trotzdem sein, darum ja der Trick mit dem Nullterminieren per XOR.
    Der Asmcode den ich gepostet hab erzeugt kein einziges Nullbyte. 😉



  • DarkShadow44 schrieb:

    wenn es sich um Shellcode handelt, so dürfen in der Regel keine Bytes mit Wert 0 vorkommen.
    

    Nullterminiert müssen Strings für API Aufrufe ja trotzdem sein, darum ja der Trick mit dem Nullterminieren per XOR.
    Der Asmcode den ich gepostet hab erzeugt kein einziges Nullbyte. 😉

    ah ok sorry da hab ich nicht genau genug geschaut.
    wenn man das byte zur laufzeit auf 0 setzt ist das natürlich ok!



  • Du willst doch wohl kein Knacker Programm erstellen oder?!

    uhhh böse da interessiert sich jemand für Assembler, Reverse Engineering und Shellcode. Das muss ein böser Hacker sein :D[/quote]

    Tja, Bürschchen wir von GData sind schon ein paar schlaue Füchse !
    Dein Shellcode kann nix mehr machen der ist nämlich auf unserer Blacklist !
    Da besteht GAR KEIN ZWEIFEL das du da Schwindluder treiben willst.

    Ich kenn mich aus ich weiss wovon ich rede !
    Den ich habe ein Computer Bild Abonnement und lese die Zeitung jeden Monat von vorne bis hinten durch !

    GUTEN TAG !



  • Hallo.
    Ich dachte Shellcode ist ein Begriff aus der Software-Programmierung und bezeichnet die bereits schon in Opcodes umgewandelte Form von Assemblersprachenbefehlen.

    Zb. so etwas aus dem Shellscript von Herbert Kleebauer(Most of the code is stolen from Frank Kotler):
    http://coding.derkeiler.com/Archive/Assembler/alt.lang.asm/2007-07/msg00440.html

    Linux Xdemo

    7f454c4601010100000000000000000002000300010000007480040834000000
    0000000000000000340020000200000000000000010000000000000000800408
    0080040858020000580200000500000000100000010000005802000058920408
    58920408340000002004000006000000001000006a006a016a0189e1bb010000
    00b866000000cd8083c40c85c00f88a401000089c76813000000684482040857
    89e1bb03000000b866000000cd8083c40c85c00f887e01000089fbb903000000
    b837000000cd8085c00f886801000089fbb90400000089c281ca00080000b837
    000000cd8085c00f884a0100006a00680c00000068589204085789e1bb090000
    00b866000000cd8083c41085c00f88240100006a0068e8030000689092040857
    89e1bb0a000000b866000000cd8083c4103df5ffffff74db85c00f88f7000000
    be909204088b460ca368920408a3889204080fb7461883c02b24fc0fb6561dc1
    e20301d08b0406a36c9204086a00682000000068649204085789e1bb09000000
    b866000000cd8083c41085c00f88a50000006a0068e803000068909204085789
    e1bb0a000000b866000000cd8083c4103df5ffffff740885c00f88780000006a
    00680800000068849204085789e1bb09000000b866000000cd8083c41085c00f
    88520000006a0068e803000068909204085789e1bb0a000000b866000000cd80
    83c4103df5ffffff740885c00f88250000006a0068e803000068909204085789
    e1bb0a000000b866000000cd8083c4103df5ffffff74dbbb00000000b8010000
    00cd800001002f746d702f2e5831312d756e69782f5830006c000b0000000000
    00000000010008000000000000000000640032009001c8000a00000000000000
    000000000800020000000000
    

    Dirk



  • IHR HAB DOCH ALLE GAR KEINE AHNUNG IHR SCRIPT KIDDYS ! 😡

    Sowas schreibe ich in HTML in 1 Minute ! 🕶



  • Naja in "Opcodes umgewandelt" ist falsch ausgedrückt. Aber ja, es ist maschinencode (meist einfach binär oder als string durch angabe der hex-kodierten Bytes) der normalerweise dazu genutzt wird um Schwachstellen auszunutzen.
    Allerdinds würde ich den Assemblercode aus dem er entstanden ist auch noch als Shellcode bezeichnen. 😃

    @1337 H4CkEr
    Ach du schreibst uns jetzt in HTML ausführlich die Definition von Shellcode ? :p



  • @ DarkShadow44

    Ich h4b m4l mIt HTML eIn BeTrIeBsYsTem geScHriEben

    für nur 4000€ pro Tag kannst du an einem meiner HACKER KURSE teilnehmen !
    Der Kurs geht 13,37 Tage



  • freecrac schrieb:

    Hallo.
    Ich dachte Shellcode ist ein Begriff aus der Software-Programmierung und bezeichnet die bereits schon in Opcodes umgewandelte Form von Assemblersprachenbefehlen.

    Zb. so etwas aus dem Shellscript von Herbert Kleebauer(Most of the code is stolen from Frank Kotler):
    http://coding.derkeiler.com/Archive/Assembler/alt.lang.asm/2007-07/msg00440.html

    Linux Xdemo

    7f454c4601010100000000000000000002000300010000007480040834000000
    0000000000000000340020000200000000000000010000000000000000800408
    0080040858020000580200000500000000100000010000005802000058920408
    58920408340000002004000006000000001000006a006a016a0189e1bb010000
    00b866000000cd8083c40c85c00f88a401000089c76813000000684482040857
    89e1bb03000000b866000000cd8083c40c85c00f887e01000089fbb903000000
    b837000000cd8085c00f886801000089fbb90400000089c281ca00080000b837
    000000cd8085c00f884a0100006a00680c00000068589204085789e1bb090000
    00b866000000cd8083c41085c00f88240100006a0068e8030000689092040857
    89e1bb0a000000b866000000cd8083c4103df5ffffff74db85c00f88f7000000
    be909204088b460ca368920408a3889204080fb7461883c02b24fc0fb6561dc1
    e20301d08b0406a36c9204086a00682000000068649204085789e1bb09000000
    b866000000cd8083c41085c00f88a50000006a0068e803000068909204085789
    e1bb0a000000b866000000cd8083c4103df5ffffff740885c00f88780000006a
    00680800000068849204085789e1bb09000000b866000000cd8083c41085c00f
    88520000006a0068e803000068909204085789e1bb0a000000b866000000cd80
    83c4103df5ffffff740885c00f88250000006a0068e803000068909204085789
    e1bb0a000000b866000000cd8083c4103df5ffffff74dbbb00000000b8010000
    00cd800001002f746d702f2e5831312d756e69782f5830006c000b0000000000
    00000000010008000000000000000000640032009001c8000a00000000000000
    000000000800020000000000
    

    Dirk

    der name shellcode kommt daher, dass diese codes oft dazu verwendet werden, ein programm welches mit root rechten läuft dazu zu bekommen, eine shell (terminal, konsole) zu starten, welche auch mit root rechten läuft.
    dann hat man plötzlich als otto normal user root rechte, kann also so ziemlich alles mit dem system anstellen.

    shellcode wird meist in asm programmiert und dann in maschinencode übersetzt (die übersetzungsarbeit nimmt einem z.b. das programm nasm ab).
    oft muss man darauf achten, dass der maschinencode keine 0 bytes enthält, da der schadcode oft vom befallenen programm mit strcpy in den angegriffenen puffer kopiert wird.
    also dinge wie mov eax,0 sollte man vermeiden, und stattdessen etwa xor eax,eax verwenden.



  • Wenn ihr was über Shellcodes lernen wollt dann schaut mal hier vorbei:

    http://www.projectshellcode.com

    4ber nIcHt d4s IhR miR d4miT UnFuG treiBt !!!



  • Danke für die Erklärung.
    Nun habe ich nur noch zwei Fragen dazu:

    Werden mit dem Begriff Shellcode nun eigentlich die in Opcodes umgewandelte Form von Assemblerbefehlen definiert, oder gehören Assemblerbefehle die noch nicht zu Opcodes umgewandelt wurden auch mit zum Shellcode und sind ein Teil davon?

    Und besteht ein Shellcode wirklich schon selber aus ausführbaren Opcodes, oder werden diese Opcode-Bytes doch nur in ihrer für uns lesbaren Form als Werte in Ziffern dargestellt und nur damit gebildet?

    Weil reine Opcodes als ASCIIs können vergleichsweise nur so, oder ähnlich als Text dargestellt werden:
    [url]https://groups.google.com/forum/#!msg/alt.msdos.batch.nt/KTQaCTUKG3Q/9Vv8XtKESncJ[/url]

    Dirk



  • Warum willst du jetzt so genau wissen, wie es definiert ist? So genau ist es nicht definiert, und selbst wenn das jemand definiert hätte, wär mir das egal. Den fertigen Binärcode würde ich als Shellcode bezeichnen. Genauso aber auch den Asemblerquellcode davon. Und niemand kann mich daran hindern 😉



  • Moin.

    Mechanics schrieb:

    Warum willst du jetzt so genau wissen, wie es definiert ist?

    Deine Frage lautet doch eigentlich, wofür gibt es überhaupt genaue Definitionen? Antwort: Damit wir eine gemeinsame Sprache verwenden können und diese auch verstanden wird, denn was nützt es sonst, wenn man nur Bahnhof versteht und nicht wirklich weiss was genau gemeint ist? Damit dürfte dieser Punkt, wofür eine präzise Definition wichtig ist, auch hoffentlich ausreichend geklärt sein.

    In diesem speziellen Fall geht es auch darum, die Risiken die von einem Shellcodes ausgehen können, besser beurteilen zu können.

    So genau ist es nicht definiert, und selbst wenn das jemand definiert hätte, wär mir das egal. Den fertigen Binärcode würde ich als Shellcode bezeichnen. Genauso aber auch den Asemblerquellcode davon. Und niemand kann mich daran hindern 😉

    Ich wüsste jetzt nicht wen es genau interessieren könnte, ob dir eine allgemeingültige Definition gleichgültig ist, oder auch nicht und ob du auch die Fähigkeit dazu hast einem Wort eine beliebige und eigenwillige Bedeutung beizumessen und/oder ob dich daran keiner hindern kann. Wen soll das eigentlich genau interessieren? Ich meine das sind Dinge mit denen man sich schon in seiner Kindheit beschäftig und die bei meiner Frage eigentlich nicht von so grosser Bedeutung sind. Eher das genaue Gegenteil davon trifft zu.

    Wichtiger wäre die Frage, ob ein fertigen Binärcode in einem Schellcode überhaupt möglich ist, oder doch nur Assemblerbefehle und repräsentative Werte eines Opcodes als ASCII-Ziffern aufgelistet?

    Beispiel: Encoded into a string using percent-encoding (using the unescape() function to decode): unescape("%u9090");
    Diese Werte der Opcodes werden hier nur als lesbare Ziffern in Textform angegeben und dieser Text ist selber noch kein Opcode und kann so in dieser Form nicht von einer CPU als Opcodes ausgeführt werden.

    Ich möchte schlicht es nur wissen woraus ein Shellcode ganz genau bestehen kann und welche Bestandteile dort möglich und anzutreffen sind. Bisher habe ich selber noch keinen Shellcode gesehen wo tatsächlich ausführbare Opcodes enthalten sind, die von der CPU in dieser Form auch ausgeführt werden können.

    Dirk



  • Der Shellcode selber sind einfach nur Bytes die zusammengenommen lauffähigen Maschinencode bilden. Ob diese Bytes jetzt direkt binär in einer Datei stecken, Hexkodiert in einen string eingebunden, percent-encoded sind, oder einfach zur Laufzeit aus einem bild reconstruiert werden ist doch egal ?

    Wichtiger wäre die Frage, ob ein fertigen Binärcode in einem Schellcode überhaupt möglich ist, oder doch nur Assemblerbefehle und repräsentative Werte eines Opcodes als ASCII-Ziffern aufgelistet?

    Bitte was ?
    Shellcode ist letztlich >immer< Maschinencode. Und Maschinencode sind Bytes. ASCII-Zeichen sind Bytes. Das heißt du kannst jede ASCII Zeichenfolge auch als Maschinencode interpretieren. Das macht natürlich nur Sinn wenn es dann auch lauffähigen Machinencode bildet. Das merkt man dann aber meistens, weil die Zeichenfolge dann als Zeichenfolge betrachtet keinen Sinn mehr ergibt, gerne mal voll mit Sonderzeichen ist. Und weil es mit Sonderzeichen in Zeichenketten oft mal Probleme gibt (z.B. der Editor/Browser Zeichen 'verschluckt'/umwandelt oder was auch immer) verwendet man Hex oder Prozent Kodierung. Wäre für nen Angriff ja blöd wenn dein schöner Shellcode vom Browser des Ziels plötzlich verändert und damit zerstört wird.



  • Hallo freecrac,

    du musst den Unterschied zwischen Assemblercode (kann man als Mensch lesen, aber nicht der x86 Prozessor) und Maschinencode (x86 Prozessor versteht das, als Mensch hingegen nur sehr schwer lesbar) verstehen, dann hast du gewonnen.

    Hier ein einfaches Beispiel:

    Ich möchte folgende Assembler Befehle in Maschinensprache (x86) übersetzen:

    mov eax,0xAABBCCDD
    mov ebx,eax
    

    Also rufe ich das Programm nasm auf, das erledigt das für mich.
    Der Output ist nun folgender Maschinencode in HEX Darstellung, erkennst du z.B. den Wert 0xAABBCCDD wieder (little endian byte order - daher findet er sich als ccdd aabb wieder).

    b866 ccdd aabb 8966 00c3
    

    Man kann sich den Machinencode auch als ASCII ansehen, nur wird das halt nicht sehr vernünfig sein, aber siehe selbst:

    f???f??
    

    Der letzte Teil des Maschinencodes fehlt in der ASCII Darstellung. Überleg dir mal warum.

    Aber bedenke, dass es egal ist ob du den Maschinencode im HEX Editor ansiehst, oder ihn dir im ASCII Format in einem Texteditor ansiehst, oder ihn dir binär ansiehst - es ist und bleibt Maschinencode, und der x86 Prozessor kann damit umgehen.

    Da du aber mit den Basics anfangen solltest, würde ich dir empfehlen, lad dir das Programm nasm runter, und schreibt ein paar einfache Programme in Assembler. Ich denke, damit wird das alles viel klarer als wenn wir hier weiter herum theoretisieren.



  • freecrac schrieb:

    Deine Frage lautet doch eigentlich, wofür gibt es überhaupt genaue Definitionen?

    Nein. Mir gehts nur konkret um diesen Fall hier. Zum einen ist Shellcode einfach ein Begriff, den irgendwann paar Hacker/Programmierer benutzt haben und der sich etabliert hat. Der hat für mich keine formale Definition, selbst wenn jemand später versucht haben sollte, den Begriff genau zu definieren. Ist vielleicht so ähnlich wie mit "Software". Das ist ein recht schwammiger Begriff (der sich irgendwie definiert ist), der je nach Kontext verschiedene Bedeutungen haben kann. Ich kann die Binaries von MySql als Software bezeichnen, genauso aber auch den Quellcode davon. Das macht jetzt nicht den Kern des Begriffs Software aus.
    Das wollte ich damit jetzt eigentlich nur sagen. Deine Fragen waren etwas schwammig formuliert, und ich wollte dich nur darauf hinweisen, dass ich die Unterscheidung hier für das Verständnis des Begriffs Shellcode für nicht besonders relevant halte.



  • gdgfdgdgdfg schrieb:

    Hallo freecrac,

    du musst den Unterschied zwischen Assemblercode (kann man als Mensch lesen, aber nicht der x86 Prozessor) und Maschinencode (x86 Prozessor versteht das, als Mensch hingegen nur sehr schwer lesbar) verstehen, dann hast du gewonnen.

    Hier ein einfaches Beispiel:

    Ich möchte folgende Assembler Befehle in Maschinensprache (x86) übersetzen:

    mov eax,0xAABBCCDD
    mov ebx,eax
    

    Also rufe ich das Programm nasm auf, das erledigt das für mich.

    Vorschlag: Weil wir eh im Internet zugange sind, da bietet es sich an anstelle von nasm einen Online-assembler zu verwenden, der für uns objdump zum disassemblieren verwendet.

    https://defuse.ca/online-x86-assembler.htm#disassembly
    (Architecture: x86 für den 32 Bit Adressmode)

    0:  b8 dd cc bb aa          mov    eax,0xaabbccdd
    5:  89 c3                   mov    ebx,eax
    

    Der Output ist nun folgender Maschinencode in HEX Darstellung, erkennst du z.B. den Wert 0xAABBCCDD wieder (little endian byte order - daher findet er sich als ccdd aabb wieder).

    Ja stimmt, das ist mir bekannt.

    So auch das Maschinencode direkt ausführbar ist und alles Andere eben kein Maschinencode ist. Auch wenn der Begriff Maschinencode in manchen Anworten nach dieser Definition falsch verwendet wurde und es somit auch deutlich wird, wie wichtig es ist eine allgemeingültige Definition zu verwenden, wenn wir grundlegende Missverständnisse vermeiden möchten. So ist es eben nicht besonders sinnvoll, wenn von einer allgemeingültigen Definition abgewichen wird und jeder etwas Anderes damit meint.

    Man kann sich den Machinencode auch als ASCII ansehen, nur wird das halt nicht sehr vernünfig sein, aber siehe selbst:

    f???f??
    

    Der letzte Teil des Maschinencodes fehlt in der ASCII Darstellung. Überleg dir mal warum.

    Da brauche ich nicht lange zu überlegen, weil mit ASCII-Zeichen lassen sich nicht alle Bytes darstellen und wenn man z.B. einen Machinencode in eine Batchdatei verwenden möchte, dann muss man eben nur solche Bytes verwenden die als ASCIIs dargestellt werden können.

    Aber bedenke, dass es egal ist ob du den Maschinencode im HEX Editor ansiehst, oder ihn dir im ASCII Format in einem Texteditor ansiehst, oder ihn dir binär ansiehst - es ist und bleibt Maschinencode, und der x86 Prozessor kann damit umgehen.

    Ja das ist mir auch bekannt.

    Da du aber mit den Basics anfangen solltest, würde ich dir empfehlen, lad dir das Programm nasm runter, und schreibt ein paar einfache Programme in Assembler. Ich denke, damit wird das alles viel klarer als wenn wir hier weiter herum theoretisieren.

    Ich selber verwende schon viele Jahre Assembler und habe x86-Befehle zum ersten Mal schon auf einem 80286 zusammen mit Debug.exe unter DOS ausprobiert. Danach hat es auch nicht so lange gedauert, bis ich zu einem 80386 wechselte, um auch dessen Befehle und Möglichkeiten kennen zu lernen. Ich meine die Basics der Assembler-Programmierung sind mir damit schon klar genug geworden.

    DarkShadow44 schrieb:

    Der Shellcode selber sind einfach nur Bytes die zusammengenommen lauffähigen Maschinencode bilden.

    Lauffähigen Maschinencode bedeutet das eine CPU genau diesen Code auch ausführen kann.

    Ob diese Bytes jetzt direkt binär in einer Datei stecken, Hexkodiert in einen string eingebunden, percent-encoded sind, oder einfach zur Laufzeit aus einem bild reconstruiert werden ist doch egal ?

    Nö das ist nicht egal, sondern es entscheidet darüber, ob es ein Maschinencode ist, oder ob zur Laufzeit dieses Maschinencode erst erzeugt wird, weil es vorher noch kein Maschinencode war.

    Bitte was ?
    Shellcode ist letztlich >immer< Maschinencode. Und Maschinencode sind Bytes. ASCII-Zeichen sind Bytes. Das heißt du kannst jede ASCII Zeichenfolge auch als Maschinencode interpretieren.

    Bei Maschinencode kommt es eigentlich nur darauf an, ob eine CPU die Bytefolge ausführen kann, oder nicht. Ob und wie wir Menschen es interpretieren ist dafür eigentlich völlig irrelavant und Assemblerbefehle und percent-encoded bytes sind selber noch kein Maschinencode, sondern werden erst später dazu gemacht. Genau darin unterscheiden sich Maschinencode und andere Bytes die in ihrer Form noch nicht von einer CPU direkt ausführbar sind.

    Weil es für den Begriff Maschinencode schon eine allgemeingültige Definition gibt wäre es überaus sinnvoll auch nur diese Definition zu verwenden und eben nicht etwas Abweichendes davon hinein zu interpretieren, weil das nur grundlegende Missverständnisse erzeugt, die nur wenig hilfreich sind.

    Es mag ja sein das es für den Begriff "Shellcode" immer noch keine allgemeingültige Definition gibt, aber für den Begriff Maschienencode gibt es bereits eine allgemeingültige Definition, womit nur von einer CPU direkt ausführbarer Code gemeint ist und nichts anderes.

    Doch bisher habe ich immer noch keinen Shellcode gesehen, der selber auch wirklich Maschinencode enthält, der von einer CPU genauso in dieser (noch) unveränderten Form auch ausgeführt werden kann. Bisher habe ich nur Shellcode gesehen, der selber gar keinen Maschinencode enthält und dessen Bytes nicht direkt und unverändert von einer CPU ausgeführt werden können.

    Im Falle in einem Shellcode aber niemals von einer CPU direkt ausführbarer Maschinencode enthalten ist, dann wäre es ja nicht so schwer eine allgemeingültige Definition dafür zu finden, wenn man sagt dass bestimmte in einem Schellcode sich befindende Bytes erst zur Laufzeit in einen direkt ausführbaren Maschinencode umgewandelt werden.

    @Mechanics: Ich hoffe ich habe mich nun etwas weniger schwammig ausgedrückt.

    Kann nun jemand von euch auch mal einen Shellcode zeigen, der direkt ausführbaren Maschinencode enthält, oder gibt es so etwas doch nicht?

    Dirk



  • Sag mal meinst du das ernst oder willst du nur provozieren ? 😕

    Assemblerbefehle und percent-encoded bytes sind selber noch kein Maschinencode, sondern werden erst später dazu gemacht. Genau darin unterscheiden sich Maschinencode und andere Bytes die in ihrer Form noch nicht von einer CPU direkt ausführbar sind.

    Deine Logik hinkt. Demnach müsste auch ein Bild das komprimiert oder verschlüsselt ist kein Bild mehr sein.. Weil es erst beim entschlüsseln/dekomprimeiren dazu gemacht wird.
    Natürlich ist es Maschinencode wenn es Prozentkodiert angeben ist, nur in anderer Form!

    Doch bisher habe ich immer noch keinen Shellcode gesehen, der selber auch wirklich Maschinencode enthält, der von einer CPU genauso in dieser (noch) unveränderten Form auch ausgeführt werden kann.

    Da könnte man sich jetzt drüber streiten ob Hexkodierung/Prozentkodierung als "Veränderte Form" zählt.. Ich meine letztlich gibtst du direkt die Bytes an, die Umwandlung ist ja wohl trivial.

    Doch bisher habe ich immer noch keinen Shellcode gesehen, der selber auch wirklich Maschinencode enthält, der von einer CPU genauso in dieser (noch) unveränderten Form auch ausgeführt werden kann.

    Weil Shellcode eben meist in Form von source vorliegt. Also damit meine ich z.B. ein C Programm in dem der Shellcode in Form eines char-Arrays eingebunden ist. Diese Art der Einbindung ist nunmal die leichteste die ich kenne. In den Binaries liegt der Shellcode dan wieder in der "reinen" Form vor (binär als Bytes). D.h. nach deiner Definition enthält das Binary Shellcode die Source aber nicht... ?


Anmelden zum Antworten