___INHALT:_____

1. iNTRO
2. WHAT's ASM?
3. ASM BEFEHLE
4. OUTRO
_______________

1. iNTRO
Hier bin ich malwieder mit einem neuen tutorial. Diesmal gehts ber die Grundlagen in ASM die man haben sollte wenn man cracken will. Doch zum coden reicht das alles noch lange nicht. Wenn ihr richtig in ASM coden wollt, solltet ihr euch ein Buch besorgen, ich empfehle "Das Assembler Buch" von Trutz Eike Podschun, erschienen im Addison Wesley Verlag, kostet so um die 100 Mrker.

2. WHAT's ASM?
Nun ja, assembler ist sowas wie die Mutter aller Programmiersprachen. Sie vereint sie in gewisser Weise alle, da jedes programm das man schreibt compiliert werden muss bevor man es nutzten kann. Und das was nach dem compilieren rauskommt ist eben assembler. Die Vorteile direkt in ASM zu coden liegen in der Geschwindigkeit. Ausserdem sind in ASM geschriebene Programme viel kleiner als wenn man sie in zb. Delphi schreiben wrde. Der Nachteil von ASM, wenn es einen gibt, ist dass man im Vergleich zu anderen Programmiersprachen viel mehr Quellcode schreiben muss. Aber es lohnt sich.

3. ASM BEFEHLE

REGiSTER: 
Als Register bezeichnet man einen Bereich auf dem Prozessorchip, den dieser fr das temporre Speicher von Daten nutzt. In der Registern laufen die Berechnungen der Prozessors ab, dort hlt er wichtige Adressen und Informationen. Es gibt prinzipiell zwei verschiedene Arten von Registern, 16 Bit (z.B. 486) und 32 Bit Register (z.B. Pentium). 16 Bit Register sind z.B. AX, BX, CX, DX, ..., 32 Bit Register sind z.B. EAX, EBX, EDX, ECX, .... Wenn jetzt z.B. ein 16 Bit breites Wort in einem 16 Bit Register verarbeitet werden soll, ist das kein Problem. Doch wenn jetzt ein 8 Bit breites Wort in einem 16 Bit Register verarbeitet werden soll, wird das 16 Bit Register in der Mitte geteilt, in das High Byte "H" und das Low Byte "L"  des 16 Bit Registers, wobei das High Byte von Speicherstelle 15-8 und das Low Byte von Speicherstelle 7-0 geht. Das High Byte und das Low Byte zusammen ergeben also zusammen das 16 Byte Register, das X genannt wird. So setzt sich also das 16 Bit Register AX aus dem High Byte AH und dem Low Byte AL zusammen. Es gibt verschiedene Arten von 16 und 32 Bit Registern, die alle verschiedene Aufgaben haben. Doch die hier zu erklren wrde ewig dauern, deshalb lass ichs jetzt mal dabei.

Jetzt kommen alle wichtigen ASM Befehle. Ich hoffe ich kann sie einigermassen gut erklren.

ADD: 
z.B. ADD EAX, EBX 
ADD addiert den Wert des zweiten Operanden (EBX) zum Wert des ersten Operanden (EAX) und legt das Ergebnis im ersten Operanden (EAX) wieder ab.
Enthlt EAX den Wert 1 und EBX den Wert 2, so enthlt EAX nach der Addition durch ADD EAX, EBX den Wert 3.

AND:
z.B. AND AX, BX
AND fhrt eine logische UND - Verknpfung durch. Hierbei wird bitweise der erste Operand (AX) mit dem zweiten Operand (BX) UND - verknpft, Das Resultat wird dann in den ersten Operanden eingetragen. Der zweite Operand bleibt unverndert.

CALL:
CALL ruft ein Unterprogramm auf, das auch Prozedur genannt wird. Das Unterprogramm wird mit dem Befehl RET wieder beendet. (siehe weiter unten)

CMP:
z.B. CMP EAX, EBX
CMP fhrt einen Vergleich durch. Der zweite Operand wird formal (d.h. nicht echt, sondern nur "im Geiste") vom ersten abgezogen und anhand der Resultats werden die Bits gesetzt. Dabei blieben beide Opernaden unverndert!

DEC:
z.B. DEC AH
DEC Verringert den Wert des Operanden um 1.

DIV:
DIV Dividiert zwei Vorzeichenlose Opernanden.

INC:
z.B. INC EAX
INC erhht den Wert eines Operanden um 1.

JUMPS:
Das mit den Jumps ist so ne Sache. Ich knnte jetzt alle exakt erklren, das wrde aber ewig dauern. Ausserdem erklren sie sich von selbst. Ich habe hier nur die wichtigsten aufgelistet. JUMPS kommen meist nach CMP oder TEST, da es irgendeinen Grund geben muss irgendwo hin zu springen. 

JE:
Jump if equal
"Springe wenn gleich (Bedingung erfllt)"

JNE:
Jump if not equal
"Springe wenn nicht gleich (Bedingung nicht erfllt)"

JMP:
Jump directly to
"Springe direkt"

JA:
Jump if above
"Springe wenn hher"

JNA:
Jump if not above
"Springe wenn nicht hher"

JB:
Jump if below
"Springe wenn niedriger"

JNB:
Jump if not below
"Springe wenn nicht niedriger"

JBE:
Jump if below or equal
"Springer wenn niedriger oder gleich"

JG:
Jump if greater
"Springe wenn grsser"

JNG:
Jump if not greater
"Springer wenn nicht grsser"

LEA:
z.B. LEA SI, EinByte
LEA speichert in dem als ersten Operanden bergebenen Register den Offsetanteil der Variablen, der als zweiter Operand bergeben wird.
LEA ist dem Befehl MOV sehr hnlich. So knnte man z.B. den Befehl LEA DI, EinByte genauso gut mit mov DI, OFFSET EinByte ausdrcken. 

MOV:
z.B. MOV EAX, EBX
MOV kopiert den Inhalt des zweiten Operanden (Quelle, EBX) in den ersten Operanden (Ziel, EAX). 

NOP:
Es wird eine leere Prozessoranweisung ausgefhrt, also nichts. 

OR:
z.B. OR AH, BL
OR fhrt eine logische oder  Verknpfung durch. Hierbei wird bitweise der erste Operand (AH) mit dem zweiten Operanden (BL) oder  Verknpft, das Resultat wird dann in den ersten Operanden eingetragen. Der zweite Operand bleibt unverndert.

POP, PUSH:
PUSH kopiert einen Wert auf einen Stack, und POP holt ihn wieder runter. Was ist ein Stack? Hierzu nehm ich den Bierbchsenvergleich von Lord Mysitc (er ist gut ;)). Also als einen Stack kann man sich einen eine Turm aus Bierbchsen vorstellen. Wir nehmen eine Bchse Erdinger Weissbier, eine Bchse Warsteiner und eine Bchse Lwenbru. Mit 
PUSH Erdinger Weissbier
PUSH Warsteiner
PUSH Lwenbru 
haben wir uns jetzt einen schnen Turm (Stack) aus Bchsen gebaut. Die unterste Bchse ist Erdinger Weissbier, die Mittlere ist Warsteiner und die oberste ist Lwenbru. Wichtig Beim POP Befehl ist jetzt dass wir nicht zuerst die unterste Bchse (Erdinger Weissbier) rausnehmen, denn da wrde der Turm ja umfallen.
Wir mssen zuerst die oberste runternehmen. Also wird mit
POP Lwenbru
POP Warsteiner 
POP Erdinger Weissbier 
Der Turm wieder abgebaut. Falsch wre
POP Erdinger Weissbier
POP Warsteiner
POP Lwenbru
Denn da wrde schon beim untenrausziehen des Erdinger Weissbiers der Turm umfallen.

RET:
RET springt aus dem Unterprogramm dass mit CALL aufgerufen wurde wieder ins Hauptprogramm zurck. EIN Unterprogamm muss IMMER mit einem RET beendet werden.

SET:
Wie beim JUMP gibt es beim SET verschiedene Arten. Ich hier nur die zwei wichtigsten auf, da die anderen fast nie gebraucht werden.
SET ist im Prinzip wie ein Sprung, nur dass er nicht Springt. Es wird immer dann wenn eine Bedingung erfllt ist eine 1 an dem zu spezifizierenden Byte gespeichert, wenn die Bedingung nicht erfllt ist wird eine 0 gespeichert.

	SETE:
	Set if equal
	"Speichere 1 an das Byte wenn die Bedingung erfllt ist, wenn nicht dann
speichere eine 0"
	
	SETNE:
	Set if not equal
	"Speichere 1 an das Byte wenn die Bedingung nicht erfllt ist, wenn sie 
erfllt ist dann speichere 0"

SUB:
z.B. SUB AH, BL
SUB subtrahiert den Wert des zweiten Operanden (BL) vom Wert des ersten Operanden (AH) und legt das Ergebnis im ersten Operanden ab.

TEST:
z.B. TEST EBX, EAX
TEST vergleicht zwei Operanden ber eine logische UND  Verknpfung miteinander.
Hierbei werden die in den beiden Operanden bergebenen Werte wie bei AND bitweise Verknpft. Das Ergebnis selbst wird dann Verworfen, der Inhalt der Operanden ndert sich also nicht.

XOR:
z.B. XOR EAX, EAX
XOR fhrt eine logische ODER  Verknpfung durch. Hierbei werden bitweise der erste Operand mit dem zweiten Operand ODER  Verknpft, das Resultat wird dann in den ersten Operanden eingetragen. Der zweite Operand bleibt unverndert.

4. OUTRO
So, das wars schon wieder, alles klar ;) ? 
Wenn ihr Anfnger seit und nicht gleich alles Versteht dann lasst euch nicht abschrecken, das ist ganz normal. Man lernt dann nach und nach mit der bung und irgendwann versteht man alles und fragt sich wieso das alles so leicht ist ;).
Wenn ihr Fragen habt oder Fehler entdeckt habt knnt ihr mich im efnet im #TbC und #eGC finden. 
Oder mailt mir einfach an tbc_adenozin@gmx.net
Viel Spass beim cracken,

aDENOZiN (Germany, June 1999)



Quellen: 
Das Assembler Buch von Trutz Eike Podschun erschienen im Addison Wesley Verlag
Lord Mystic's short ASM references (Das mit den Bchsen)
Mein Gehirn

Greetz fly out to:

The whole TbC (eGC) crew, CrossOver, 4110, EVC, LAXiTY, DCD
PeeGee, RAHOWA, ZiKARiUZ, Leech, prof_x, BerSerkA, snOOpee, RaIDeR, tonello, fLAIEr, SoDoM, GolGoTha, rubor, LoKI, ConfusePC, viny, MvD, FatMike, Jak, MooLoK, oXidizer, StrOke, BlindAngel, CRACKMAGIC, Cheekey, R@ptor

I BLAME:
CRACKFORCE, THE MOD, Tey Skyman, und alle die meinen sie mssten cracks klauen und Streit anfangen.

MY SiTE:  HttP://adenozin.tsx.org
MY GROUP: HttP://tuberculosis.cjb.net

