pengenenalan asm iug sekolah
DESCRIPTION
Pengenalan bagi yang ingin belajar Reverse enginering tanpa ingin belajar ASM.TRANSCRIPT
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
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)
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
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
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
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
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
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
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
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