pengenenalan asm iug sekolah

10
 Selamat datang bagi teman t eman yang ingin bergabung untuk mengikuti sekolah-IUG. Yang khusus belajar tentang “Reverse-Engineering ” . Untuk memulai suatu “Reverse- Engineering” perlu adanya penguasaan materi baik dari tools nya maupun logika dari bahasa mesin itu sendiri “Assembly”. Modul ini berguna bagi siapa saja yang ingin mengetahui tentang “Reverse-Engineering”. Pernah kah anda berpikir ;” Saya tidak ingin be lajar asm, tetapi , tetapi Saya ingin “Reverse-  Engineering [cracking]” suatu aplikasi sehingga full registered”  Jika anda tidak mengetahui bahasa dasar asm maka sia-saia usaha anda. Kita perlu mengetahui bahasa asm karena untuk setiap tindakan kita melakukan reverse pasti kita menghadapi bahasa mesin yaitu assembl y . Mari kita mulai ada 6 bagian yang perlu kita ketahui 1. REGISTERS - Apakah ini? , dan bagaimana mempergunakannya? 2. STACK  - Apakah ini? , dan bagaimana mempergunakannya?  3. COMMON INSTRUCTIONS Siap - siap mimpi buruk kawan ! 4. CONDITIONAL JUMPS - Loncat dan Loncat ! . 5. BITMANIPULATION INSTRUCTIONS – ready buat bina ry  6. EXTRA – tambahan istilah dan pengertian lainnya “flag” 1. REGISTERS Registers dapat dibandingkan den gan variable pada bahasa mesin tingkat tinggi (high level language) [C, Pascal, Visual Basic, Delphi]. Dimana nilai dari register tersebut tersimpan dalam cpu dan dapat di manipulasi. Ada 4 macam registers, yaitu  general purpose  registers , stack registers ,  segment reg isters dan index re gisters. General purpose regi sters: Bes arny a nil ai regis ter s adalah 16 bits , dan ter dapa t 4 mac am AX,BX,CX and DX. Lalu dibag i lagi menj adi berni lai 8 bits , AX dibagi menj adi AL (low by te) dan AH (high byte) , dan BX di bagi menjadi BL dan BH dan se terusnya. Con tohnya Misalkan nilai AX=1234. maka AL=34 (the low by tes) dan AH=12 (th e high bytes). Di dala m 386 dan yang l ebih atas sepe rt 486 , ada juga reg ister yan g bernil ai 32 bits, yait u EAX,EBX,ECX, dan EDX. Saya yakin anda sering menemukannya sekarang. Berikut singkatannya : EAX: Extended Accumulator Register EBX: Extended Base Register ECX: Extended Counter Register EDX: Extended Data Register ESI: Extended Source Index EDI: Extended Destination Index EBP: Extended Base Pointer ESP: Extended Stack Pointer EIP: Extended Instruction Pointer

Upload: yang-mulia-iatngicu

Post on 30-Oct-2015

14 views

Category:

Documents


0 download

DESCRIPTION

Pengenalan bagi yang ingin belajar Reverse enginering tanpa ingin belajar ASM.

TRANSCRIPT

Page 1: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 1/10

 

Selamat datang bagi teman teman yang ingin bergabung untuk mengikuti sekolah-IUG. Yang

khusus belajar tentang “Reverse-Engineering” . Untuk memulai suatu “Reverse-Engineering” perlu adanya penguasaan materi baik dari tools nya maupun logika dari bahasa

mesin itu sendiri “Assembly”.

Modul ini berguna bagi siapa saja yang ingin mengetahui tentang “Reverse-Engineering”.Pernah kah anda berpikir ;” Saya tidak ingin belajar asm, tetapi , tetapi Saya ingin “Reverse-

 Engineering [cracking]” suatu aplikasi sehingga full registered” Jika anda tidak 

mengetahui bahasa dasar asm maka sia-saia usaha anda. Kita perlu mengetahui bahasa asm

karena untuk setiap tindakan kita melakukan reverse pasti kita menghadapi bahasa mesin

yaitu assembly.

Mari kita mulai ada 6 bagian yang perlu kita ketahui

1.  REGISTERS - Apakah ini? , dan bagaimana mempergunakannya?2.  STACK - Apakah ini? , dan bagaimana mempergunakannya? 

3.  COMMON INSTRUCTIONS – Siap - siap mimpi buruk kawan !

4.  CONDITIONAL JUMPS - Loncat dan Loncat !.

5.  BITMANIPULATION INSTRUCTIONS – ready buat binary 

6.  EXTRA – tambahan istilah dan pengertian lainnya “flag”

1.  REGISTERS

Registers dapat dibandingkan dengan variable pada bahasa mesin tingkat tinggi (high levellanguage) [C, Pascal, Visual Basic, Delphi]. Dimana nilai dari register tersebut tersimpandalam cpu dan dapat di manipulasi. Ada 4 macam registers, yaitu  general purpose

 registers, stack registers, segment registers dan index registers.

General purpose registers:

Besarnya nilai registers adalah 16 bits , dan terdapat 4 macam AX,BX,CX and DX. Lalu

dibagi lagi menjadi bernilai 8 bits , AX dibagi menjadi AL (low byte) dan AH (high byte),

dan BX di bagi menjadi BL dan BH dan seterusnya. Contohnya

Misalkan nilai AX=1234. maka AL=34 (the low bytes) dan AH=12 (the high bytes).

Di dalam 386 dan yang lebih atas sepert 486 , ada juga register yang bernilai 32 bits, yaitu

EAX,EBX,ECX, dan EDX.

Saya yakin anda sering

menemukannya sekarang.Berikut singkatannya :

EAX: Extended Accumulator RegisterEBX: Extended Base RegisterECX: Extended Counter Register

EDX: Extended Data RegisterESI: Extended Source IndexEDI: Extended Destination Index

EBP: Extended Base Pointer

ESP: Extended Stack PointerEIP: Extended Instruction Pointer

Page 2: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 2/10

 

Stack registers:

BP dan SP adalah stack registers. Apakah stack register itu ? Stack register adalah tempat

dimana register menyimpan datanya secara sementara. Anda dapat menyimpan data dengan

instruksi “push” dan dapat di aksens dengan instruksi “pop”. Stack ini memiliki ketentuan

yang akhir masuk yang harus keluar duluan 

Contoh

Jadi tidak ada kata antri, yang telat datang yang duluan pulang……(aneh kan? Itulah logika

computer).

Segment registers:

Ada 4 segmen (6 on the 386 and above):

CS - Code segment. Block di mana lokasi data beradaDS - Data segment. Disini lokasi data dapat di access. Jika berhubungan dengan “ “string”

ES - Extra segment. Tempat extra bisa sebagai data segment.FS – segment lain saja (only 386+), jarang di gunakan pada reverse

GS – segement lain nya saja (only 386+), jarang di gunakan pada reverse

 Index registers:

Merupakan "pointer registers" sering digunakan pada instruksi yang melibatkan “string”. Ada

2 perbedaaan , dan bernilai 16 bits large (Pada 386+ terdapat “E” di depannya jadi bernilai

32 bit):

SI – [ESI] Source Index. Digunakan pada string operations sebagai sumber “source” (input).

DI - Destination Index. Digunakan pada string operations sebagai hasil “destination”.(output)

push ax (EAX)push bx (EBX)

push cx (ECX)  Akhir masuk ...

pop cx (ECX)  Awal keluar

pop bx (EBX)

pop ax (EAX) 

Page 3: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 3/10

BX (EBX) juga dapat di gunakan sebagai index register. Register digunakan bersamaandengan segment registers sebagai “offset”.

Lalu apa artinya “ DS:SI”? Simple saja DS ke datasegment dan SI adalah offset didalan

datasegment..

2.  STACK

Lihat atas untuk STACK atau

3.  COMMON INSTRUCTION

Saya akan menjelaskan instruksi yang harus anda ketahui untuk mengerti logika dari bahasa

asm ini. Yang akan di bahas hanya dasarnya saja dan jika anda ingin menjadi reverser yangserius coba belajar dari sumber lain. ( mudah – mudahan niat )

MOV dest, source

Instruksinya simple memindahkan (move) value ke lokasi yang terdapat dalam memory(register atau variable).

CONTOH : MOV AX, 1234h ; AX = 1234h 

MOV BX, AX ; BX = AX

Jadi seluruh data 1234 hex (4660 dec) di pindah ke AX . Kemudian value dari AX (1234h)

akan dipindahkan kembali ke BX.

ADD dest, value

Instruksinya simple menambahkan value dan disimpan di dest.

Contoh : MOV AX, 10h ; Ax adalah 10h

ADD AX, 10h ; Ax adalah 20h

ADD AX, 5h ; Ax adalah 25h

ADMINYohukm, Y’TO, NickPalingCool (NPC),Gokou, Vi2doubleyu +M0eN, Apakekdah

Page 4: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 4/10

SUB dest, valueInstruksinya simple mengurangi value dan disimpan di dest.

Contoh : MOV AX, 10h ; AX adalah 10h 

SUB AX, 2h ; Ax adalah 8h

INC destMenambah value tertentu (register, variable atau apa saja).

Contoh : MOV AX, 10h ; AX adalah 10h

INC AX ; Ax adalah 11h

DEC destMengurangi value tertentu (register, variable atau apa

saja).

Contoh : MOV AX, 10h ; AX adalah 10h 

DEC AX ; Ax adalah Fh

CMP source, destMembandingkan isi dari source dengan dest.

Contoh : MOV AX, 10h ; AX adalah 10h

MOV BX, 11h ; BX adalah 11h

CMP AX, BX ; Compares AX adalah BX

Baris setelah CMP AX,BX biasanya instruksi “jump”. Jika kita ingin “jump” jika AX=BX,maka gunakanlah JE (Jump if equal) lalu “location” (alamat) (location dapat berupa offset)

setelah instruksi CMP. Jika kita ingin “jump” jika AX “tidak atau sama dengan BX,

gunakanlah JNE (Jump if not equal) lalu “location: setelah instruksi CMP instruction. Ada

 beberapa kondisi “jump” yang akan di bahas di topik selanjutnya. 

JMP location“JUMPS (loncat) ke lokasi XXX

Contoh : JMP 200h jump ke offset 200h

MOVSB atau MOVSW

“Move” (memindahkan, meng-copy isi) byte (MOVSB) atau word (MOVSW) dari DS:SI ke

ES:DI yang di ditambah dari value SI.

Contoh : Misal DS:SI points memiliki 5h byte

MOVSB ; ambil byte DS:SI points copy adan simpan di ES:DI

Maka byte ES:DI points memiliki value of 5h

Page 5: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 5/10

Kondisi ini sering di temukan , ketika string dicopy-kan ke lokasi lain . instruksi inidigunakan bersamaan dengan REP.

LODSB atau LODSW

Load nilai byte atau word dari DS:SI dan simpan di AL (LODSB) atau AX (LODSW).

Akan ditambahkan ke SI.

Contoh : Misal DS:SI points word ber- value EBh

LODSW ; Copy value word DS:SI points dan simpan di AX

AX sekarang bernilai EBh

Kondisi ini sering di temukan , ketika string dicopy-kan ke lokasi lain . instruksi ini

digunakan bersamaan dengan REP.

STOSB atau STOSW

Mengambil value dari AL (STDSB) atau AX (STDSW) dan tempatkan di DS:SI. Akanditambkan ke SI.

Contoh : Misalkan nilai AX EBh

STOSW ; copy nilai AX dan simpan di DS:SI points

; DS:SI points word bernilai (value) EBh

Kondisi ini sering di temukan , ketika string dicopy-kan ke lokasi lain . instruksi ini

digunakan bersamaan dengan REP.

REP

Ulang instruksi sesuai nilai CX (ECX jika 32 bit) register. REP disimpan didepan

MOVSB,LODSB atau STOSB (atau didepan intruski ds:si jika word value) hal ini akan

membuat program mengulang secara automatis

Contoh: MOV AL,Bh ; AL adalah bh

MOV CX,5h ; CX adalah 5h

REP STOSB ;

Maka value AL (bh) di copy-kan ke DS:SI points sebanyak 5 kali. (nilai CX)

; dan nilai SI akan ikut bertambah.

CALL procedure

Memanggil prosedur suatu algoritma/ instruksi yang diakhir oleh Ret (return)

Contoh : CALL 4020

; Jumps ke offset 4020 dan melanjutkan instruksi sampai beres

; setelah mencapai RET. Akan berlanjut ke line di bawah call .

Ada istilah “near call”. Hanya meloncat ke offset yang berbeda . Ada juga “ far calls”.

Meloncat ke segmen dan offset yang bereda

Contoh : CALL 013f:2310 ; Jumps ke segment 013f, dan offset points ke 2310.

ADMIN

Yohukm, Y’TO, NickPalingCool (NPC),

Gokou, Vi2doubleyu +M0eN, Apakekdah

Page 6: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 6/10

4.  Conditional Jumps

Gimana sudah mulai pusing? Saya harap tidak, karena kita masuk ke bagian yang seru yaitu

“conditional jumps”. Sengaja saya buat bahasanya campuran karena ada beberapa bagian

yang enak sesuai bahasa aslinya. Kondisi “jumps” dibagi 2 macam yaitu

unsigned dan signed (conditional jumps).

Coba anda tebak apakah perbedaan antara Unsigned dan signed ?? bahas di forum yah

 Nah yang bawah ini pasti anda sering menemukannya , tapi yang harus di cermati adalah JZ,JNZ, JA and JB

Tergantung instruksi sebelumnya (dalam hal ini instruksi CMP) value dari “zero flag”.

Maka pada JE (or JZ) nilai “zero flag” pasti di cari . jika di set (zeroflag=1) makaakan “jumps”, jika bukan tidak loncat. Ini sangat penting dalam reverse karena kita

dapat memodifikasi “zero flag”.

Unsigned conditional jumpsJA Jump if above

JAE Jump if above or equalJB Jump if below

JBE Jump is below or equal

JNA Jump if not above (same as JBE)

JNAE Jump if not above or equal (same as JB)

JNB Jump if not below (Same as JBE)

JNBE Jump if not below or equal (same as JA)

Signed conditional jumpsJG Jump if greater

JGE Jump if greater of equalJL Jump if less

JLE Jump if less or equal

JNG Jump if not greater (same as JLE)

JNGE Jump if not greater or equal (same as JGE)

JNL Jump if not lower (same as JGE)

JNLE Jump if not lower or equal (same as JG)

Conditional jump (dont matter if it's signed or not) 

JZ Jump if zero

JE Jump if equal (same as JZ)

JNZ Jump if not zero

JNE Jump is equal (same as JNZ)

http://iug-re.org/forum

ADMIN

Yohukm, Y’TO, NickPalingCool (NPC),

Gokou, Vi2doubleyu +M0eN, Apakekdah

ADMIN

Yohukm, Y’TO, NickPalingCool (NPC),Gokou, Vi2doubleyu+M0eN, Apakekdah

Page 7: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 7/10

 

5.  Bitmanipulation Instructions

Pernah anda melihat dan bertanya apakah instruksi XOR itu? Apa gunanya? .

Pertama tama kita harus membahas tentang byte tapi jika bingung silahkan skip aja ,

sebuat byte yang konsisten terdiri dari 8 bits yang ber –value jika bukan 0 yah 1. Sebagai

contoh kita ambil “X” dan kita ubah ke bentuk binary:

X - 01011000

Bagaiman kita bisa tahu? Gampang buka tabel aja atau pake kalkulator, dari hec atau decubah ke binary

Kembali ke bitmanipulation instructions……….

Ada beberapa instruksi yang sering kita temukan dalam melakukan reverse suatu aplikasi

Antara lain

·XOR·Instruksi ini sangat penting, dan anda harus mengetahuinya

Saya akan coba jelaskan, kembali kecontoh “X”

Tahukah anda arti dari "XOR 88,65" dan bagaimana prosesnya . Angka 88 adalah nilai dec

dari huruf 'X' dan 65 nilai dec dari huruf 'A' (coba biasakan dari sekarang, tabel hex dan

dec akan saya sisipkan ke rar pack). Lihat tabel di bawah:

Ayo konsentrasi . Apa yang sebenarnya dilakukan oleh instruksi “xor”

Jika nilainya sama , maka menjadi 0, jika nilai berbeda nilai 1Contoh jelasnya :

00110101

------0110

Saya harap anda mulai ada sedikit pencerahan, lalu muncul pertanya jadi buat apa nih “ xor”itu ? Instruksi XOR sangat bermanfaat pada proses “encrytion”

Lihat ini

XOR 88,65 = 25

XOR 25,88 = 65

XOR 25,65 = 88

Mudahnya kita mendapat value original kembali.

Instruksi “xor” juga bermanfaat untuk merubah sesuatu menjadi nilai nol....Contohnya bagai

mana kita mengosongkan memory ? bisa dengan instruksi ini

Character Dec Binary

X 88 01011000

A 65 01000001

Hasil setelah di XOR 88,65:25 00011001

http://iug-re.org/forumADMIN

Yohukm, Y’TO, NickPalingCool (NPC),

Gokou, Vi2doubleyu +M0eN, Apakekdah

Page 8: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 8/10

:SUB EAX,EAX

MOV EAX,0

Bisa saja kita memakainya tapi kenapa harus mengunakan XOR 

XOR EAX,EAX

Instruksi diatas juga akan merobah value EAX menjadi “nol. Perbedaannya adalah

mempercepat kerja CPU dan merupak instruksi yang biasa dilakukan..Jadi sekarang jika anda

melakukan Reverse anda tahu harus berbuat apa . Instruksi lainnya adalah

·AND·Jika anda sudah paham akan insrtuksi “XOR”, Maka akan mudah untuk memahami instruksi

“AND” . Contoh

Instruksi “and” akan membandingkan bit satu satu..

Jika keduanya 1, maka akan bernilai 1, selain itu maka bernilai 0. 

Instruksi lebih lanjut adalah

·OR·Lansung contoh

Seperti instruksi sebelumnya di bandingkan satu- satu

Jika keduanya  bernilai 0, maka bernilai 0, jika nilai lain set value jadi 1.

Character Dec Binary

X 88 01011000

A 65 01000001

Hasil di AND 88,65:

64 01000000

Character Dec value Binary

X 88 01011000

A 65 01000001

Hasil di OR 88,65:

89 01011001

http://iug-re.org/forum ADMIN

Yohukm, Y’TO, NickPalingCool (NPC),

Gokou, Vi2doubleyu +M0eN, Apakekdah

Page 9: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 9/10

 

6. EXTRAPieces, bits dan bytes: artinya 

  BIT – data terkecil . bernilai “0” atau “1, jika di gabung menjadi bentuk

binary

Contoh :. 00000001 = 1 00000010 = 2 00000011 = 3 etc.

  BYTE – terdiri dari 8 bits. Bernilai maksimal 255 (0-255). Agar mudahmenbaca binary sistem di gunakan lah 'hexadecimal number system'. Hec

adalah 'base-16 system', sedangkan binary adalah 'base-2 system'

  WORD – 2 byte yang di jadikan 1 atau 16 bits. Word bernilai max 0FFFFh

(atau 65535d).

  DOUBLE WORD – 2 word di jadikan 1 atau 32 bits. Nilai max = 0FFFFFFFF 

(atau 4294967295d).

  KILOBYTE - 1000 bytes? bukan, tetapi 1024 (32*32) bytes.

  MEGABYTE – Juga bukan 1 juta tapi 1024*1024 atau 1,048,578 bytes.

32bit Register 16bit Register 8bit Register

EAX AX AH/ALEBX BX BH/BL

ECX CX CH/CLEDX DX DH/DL

ESI SI -----

EDI DI -----

EBP BP -----ESP SP -----

-----

http://iug-re.org/forum 

ADMINYohukm, Y’TO, NickPalingCool (NPC),Gokou, Vi2doubleyu +M0eN, Apakekdah

Page 10: Pengenenalan Asm Iug Sekolah

7/16/2019 Pengenenalan Asm Iug Sekolah

http://slidepdf.com/reader/full/pengenenalan-asm-iug-sekolah 10/10

 The flags:

Flags ber-value single bits yang berindikasi status . flag register pada 32bitCPUs adalah 32bit. Ada 32 flags, yang berbeda tetapi jangan khawatir. Yang

anda perlukan hanya 3 dalam reversing. Z-Flag, O-Flag dan C-Flag. Flaghanya pentanda saja seperti layaknya lampu lalu lintas. Hijau artinya : 'ok' dan

merah artinya 'not ok'. flag hanya bernilai '0' dan '1', berarti 'not set' atau'set'.

  Z-Flag:o  Z-Flag (zero flag) paling sering digunakan pada

cracking.hampir 90% penggunaannya . Dapat di set 0

atau 1  O-Flag:

o  O-Flag (overflow flag) hanya 4% digunakan dalam

cracking .

  C-Flag:o  C- Fl ag ( Carr y f l ag) hanya di gunakan 1% dal amcr acki ng.

Bitmanipulation Instructions table

Sekian

Pengenalan Assembler dari saya mudah mudahan menambah wawasan anda .

Sumber

A newbie guide to Assembler programming · © 1997 by Cruehead / MiB semi –translateAssembler : The Basics In Reversing (tutor lena 1) semi translate

Asmintro.chm, MASM32 help file some pic

Januari 09, Yohukm, iug-re.org / IUG - sekolah

Reference Table

operation src dest result

 AND 1 1 11 0 0

0 1 00 0 0

OR 1 1 1

1 0 10 1 1

0 0 0XOR 1 1 0

1 0 10 1 1

0 0 0

 NOT 0 N/A 11 N/A  0

http://iug-re.org/forum 

ADMINYohukm, Y’TO, NickPalingCool (NPC),

Gokou, Vi2doubleyu +M0eN, Apakekdah