Sie sind nicht angemeldet.

1

Dienstag, 9. Februar 2010, 23:02

Assembler Grundlagen

Heyho,

nachdem ich hier im Forum bisher nichts zu dem Thema gefunden habe, wollte ich einfach mal selbst fragen, wer sich hier alles mit Assembler so gut auskennt, es anderen zu vermitteln. Ich habe ein paar Fragen, auf die ich durch CrackMe's gestoßen bin. Die erste Frage:

Quellcode

1
2
MOV ESI,DWORD PTR DS:[<&MSVCP90.??$?5DU?>].... (die Zeile geht ewig lang)
CALL ESI

Ist das richtig, dass diese Kombination ein DWORD aus dem Datensegment, und somit der Eingabe, als Funktion in das Register ESI schiebt und Call diese dann ausführt, sodass daraus eine Benutzereingabe wird?

Desweiteren:

Quellcode

1
MOV ESI,DWORD PTR SS:[ESP+48]

Diese Zeile schiebt in ESI ein DWORD aus dem Stapelsegment, und zwar das 6t-letzte (da 48/8 = 6), was zuvor mit Push auf den Stapel geschoben wurde? Soweit richtig?

Nun meine letzte Frage:

Quellcode

1
MOV EAX,DWORD PTR DS:[<&MSVCP90.?cin@std@>....(wieder ewig lang)

Woran erkenn ich hier, dass die Länge der Eingabe im Register landet?!

Vielen Dank vorab
MfG DaRe

Flachland-Gorillas retten

2

Mittwoch, 10. Februar 2010, 13:48

Hi,
Hier lernst du vielleicht erstmal etwas mehr über Debugger
Klick mich
Assambler Tutorial

Hoffe das hilft :)
Ansonsten guck hier Klick mich
Signatur :wbb: Meine Tutorials :wbb:

- [Video-Tut]OllyDbg
- [Tut]Code Protection Autoit/C/C++

DirectX9 Wissen: 47%

Autoit: 70%

C++: 60%


Und Weiter geht's!!

Für Fragen bezüglich Hacking im Sinne von Games hacken jeglicher Weise, bin ich per Pn zu erreichen.


Offline da im Urlaub

3

Mittwoch, 10. Februar 2010, 15:14

MOV EAX,DWORD


Hi,
ein DWORD, also ein Doppelwort ist immer 4 Byte lang.

WORD = 16 Bit = 2 Byte
DWORD = 32 Bit = 4 Byte

auch wenn die heutigen Prozessoren mit Wort-Größen von 64 Bit umgehen.
Ach ja, - hol dir IDA aus der Filebase. (Die hab ich hochgeladen, weil einfach genial ist)
Man kann dehr viel damit machen, aber schau dir im Debug Modus einfach erst mal die Register an.

Zaphod
Signatur Schon gewusst:
In Asse nutzen sie ein ganz neues Verfahren zur Verhinderung einer
Kernschmelze bei radioaktivem Abfall.


(Wassereinbruch in den Salzstock; tausende Fässer mit Atommüll drohen das Grundwasser zu verseuchen)


Probebohrungen in Gorleben haben laut zensiertem Bericht ergeben, daß das dort nicht passieren kann.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Zaphod« (10. Februar 2010, 15:17)


4

Mittwoch, 10. Februar 2010, 17:18

danke für die Antworten, Botcoder das OllyDBG Tutorial habe ich durch =) und @Zaphod das ist mir klar, aber wieso in dem DWORD die Länge der Eingabe steht ist meine Frage.

MfG DaRe

5

Mittwoch, 10. Februar 2010, 17:20

hä?
DWORD heißt nur das das 32Bits sind
-->der reservierte speicher.
Signatur sorry for my bad english, my nativ language is autoit
:burns:

6

Mittwoch, 10. Februar 2010, 17:23

aber ich weiß aus dem Code, dass in dem Register die Zeichenlänge der Benutzereingabe steht. Bzw denk ich das mal stark, denn wie würde es sonst in asm aussehen?

MfG DaRe

7

Donnerstag, 11. Februar 2010, 13:27

Zitat

MOV ESI,DWORD PTR DS:[<&MSVCP90.??$?5DU?>].... (die Zeile geht ewig lang)
CALL ESI

Da wird eine Adresse einer Funktion in ESI geschrieben und anschließend aufgerufen.

Zitat

MOV ESI,DWORD PTR SS:[ESP+48]

Hier wird die Adresse ESP+ 0x48 Bytes in ESI geschrieben.. (Bits sind fest in einem Byte integriert und können nur über Bit Operanden verändert werden.. das teilen durch 8 is also nicht nur falsch, da dies ein Hexwert und kein Dezimal wert ist, sondern auch sinnlos^^)

Beispiel:
Wenn ESP=004F0000 ist, dann wäre ESP+48 = 004F0048 :thumbsup:



Zum rest kann ich wenig sagen, da du mit informationen über dein Problem sehr sparsam umgehst :P
Signatur
Du möchtest Autoit lernen, aber weißt nicht wo du anfangen sollst?! : [ANFÄNGER HIER REIN] Das Erlangen von Autolt Grundwissen

Ähnliche Themen