Monday, June 24, 2013

Perlindungan Server terhadap teknik Brute Force dan Dictionary Matching

Pendahuluan
Teknik brute atau pencocokan kamus adalah jenis serangan yang paling lazim digunakan pada sebuah server.

Tutorial kali ini, saya ingin menjelaskan mengenai bagaimana melindungi server dari serangan brute force maupun dictionary matching pada layanan ssh menggunakan fail2ban.

Teknik serangan
Software yang digunakan untuk menyerang adalah THC-Hydra (http://www.thc.org/thc-hydra/).


Jangan selalu berkonotasi negatif setiap mendengar atau memperoleh software hacking karena semuanya kembali pada masing-masing individu.

White Hacker dapat memanfaatkan software ini untuk menguji password dari user-user yang mereka kelola. Seandainya ada user yang menggunakan weak password, administrator dapat memberikan user tersebut sebuah peringatan untuk mengganti password mereka dengan password yang lebih kuat.

Hydra adalah sebuah perangkat lunak untuk melakukan proses login secara looping dengan memasukkan kombinasi username dan password dari sebuah file yang telah berisi daftar. Software ini sebenarnya hanya memudahkan hacker "mencoba-coba" login dari sebuah layanan.
Layanan yang dapat di handle oleh software hydra ini cukup banyak: cisco cisco-enable cvs firebird ftp[s] http[s]-{head|get} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap irc ldap2 ldap3[-{cram|digest}md5] mssql mysql ncp nntp oracle-listener oracle-sid pcanywhere pcnfs pop3 postgres rdp rexec rlogin rsh sip smb smtp smtp-enum snmp socks5 ssh svn teamspeak telnet vmauthd vnc xmpp

Tutorial ini hanya membahas mengenai SSH saja.

Prerequisites
Instalasi hydra cukup mudah. Karena saya menggunakan sistem operasi ubuntu, perintah-perintah berikut mohon disesuaikan sendiri.

# sudo apt-get install hydra hydra-gtk

Oke setelah kita menginstall software hydra, kita perlu mempunyai daftar kata sandi atau password yang nanti akan kita "coba-coba"-kan untuk seorang user. Daftar kata sandi dapat diperoleh di: http://www.winedt.org/Dict/.
Untuk tutorial kali ini, saya ingin membuat dictionary saya sendiri. Biar lebih ringkas dan lebih cepat karena hanya sebagai contoh.

# nano pass.txt
football
flower
123
1234
12345
123456
654321
54321
4321
321

Oke. Sekarang kita telah memiliki software hydra dan file pass.txt. Berikutnya kita tentukan target serangan kita. Ingat! Jangan pernah menentukan target serangan tanpa alasan yang jelas! Tutorial ini hanya akan menyerang localhost.

Untuk menyerang sebuah host menggunakan hydra, kita gunakan perintah dan parameter berikut:

# hydra -l andi -P pass.txt localhost ssh

Keterangan:
-l : Menunjukkan bahwa kita sudah tahu bahwa username dari host yang akan kita serang adalah andi.
Jika kita belum tahu username dan akan kita coba-coba dari file user.txt (file yang berisi daftar username) yang telah kita miliki maka perintahnya:
# hydra -L user.txt -P pass.txt localhost ssh

Begitu juga kalau kita sudah tahu password yang digunakan tapi tidak tahu username pemilik password tersebut.

# hydra -L user.txt -p pass123 localhost ssh

Nah sudah tahu fungsi -l, -L, -p dan -P kan?

Output:
# hydra -l andi -P pass.txt localhost ssh
Hydra v7.1 (c)2011 by van Hauser/THC & David Maciejak - for legal purposes only

Hydra (http://www.thc.org/thc-hydra) starting at 2013-06-24 13:36:55
[DATA] 12 tasks, 1 server, 12 login tries (l:1/p:12), ~1 try per task
[DATA] attacking service ssh on port 22
[22][ssh] host: 127.0.0.1   login: andi   password: 54321
[STATUS] attack finished for localhost (waiting for children to finish)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2013-06-24 13:37:01

Bagian yang tercetak tebal adalah apa yang kita cari.

Cukup mudah bukan?


Bagaimana server mengetahui bahwa dia sedang diserang?

Sebenarnya server tahu dan mencatat (logging) apa yang terjadi di server. Tapi that's it. Hanya itu. Tidak ada aksi apa-apa yang dilakukan oleh server. Inilah tujuan dari tutorial kalo ini. Kita akan membuat aksi atas apa yang telah dicatat dalam berkas log.

Perhatikan berkas auth.log berikut:

Dari berkas log tersebut, terlihat ada banyak sekali kesalahan login untuk user "andi". Bukan itu sebenarnya yang kita kuatirkan. Tapi perhatikan pada 8 baris paling akhir:


Artinya. Password "andi" berhasil ditemukan!

Pencegahan:
Jika server sebenarnya "mencatat" kejadian abnormal yaitu login berulang tapi salah terus, terus So What? Useless jika tidak ada aksi apa-apa terhadap aktifitas tersebut. Tidak bijak juga "menunggu" administrator memperbaiki hal ini. Alangkah baiknya server "segera" melakukan tindakan untuk:
  1. Menutup akses ssh untuk host penyerang via firewall
  2. Mengganti password si andi secara sepihak menggunakan password generator
  3. Mengganti secara sementara shell andi supaya jika hacker berusaha masuk lewat pintu tersebut, dia akan "terpenjara" pada shell yang tidak bisa apa-apa.
  4. Mengaktifkan port knocking untuk melindungi port ssh.
  5. Atau tindakan apapun yang dapat menyelamatkan user andi secara khusus atau system secara keseluruhan
Tutorial kali ini saya ingin mencoba cara pertama yaitu menutup akses ssh untuk host penyerang via firewall.

Sebelum saya masuk pada bagaimana cara melindungi service ssh terhadap serangan brute force, saya ajak anda terlebih dulu untuk "membedakan" mana yang berusaha masuk lewat cara yang benar dan mana yang berusaha masuk melalui hydra. User normal (bukan robot) idealnya hanya akan melakukan kesalahan login satu kali login kedua seharusnya sudah bisa masuk. Beberapa system memberi toleransi kesalahan hingga 2x. Artinya jika user salah hingga ke 3x-nya, system akan HALT, LOCK Down, dsb.
Untuk tutorial kali ini, saya lebih toleran lagi yaitu 5x. :)

Oke ini yang perlu kita siapkan.
1. Bersihkan auth.log
Kita bersihkan dulu berkas auth.log yang tadi sudah ternodai (terkotori) dengan hydra. Mengapa? Hanya untuk memudahkan menjelaskan konsep fail2ban.
# cat /dev/null > /var/log/auth.log

2.  Install fail2ban
# sudo apt-get install fail2ban

3. Bersihkan dulu segala aturan firewall hanya untuk memudahkan penjelasan fail2ban.

# sudo iptables -F
# sudo iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         


4. Atur konfigurasi jail.conf
# sudo nano /etc/fail2ban/jail.conf
Perhatikan pada bagian:
ignoreip = 127.0.0.1/8 

// IP yang tidak akan diproses. Karena kita akan menyerang localhost, rubah menjadi (hapus IP 127.0.0.1) :
ignoreip =


Kemudian:

bantime  = 600
maxretry = 3

// Bagian ini menentukan berapa toleransi error yang anda "ijinkan". Karena saya akan mengijinkan kesalahan hingga 5x maka
bantime  = 600
maxretry = 5


Simpan konfigurasi ini.

5. Jalankan layanan fail2ban
# sudo /etc/init.d/fail2ban start

6. Perhatikan aturan firewall anda sekarang:
# sudo iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
fail2ban-ssh  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 22
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain fail2ban-ssh (1 references)
target     prot opt source               destination        
RETURN     all  --  0.0.0.0/0            0.0.0.0/0


Pada bagian yang tercetak tebal, adalah aturan tambahan dari fail2ban.

7. Coba serang kembali localhost anda menggunakan hydra
# hydra -l andi -P pass.txt localhost ssh
Hydra v7.1 (c)2011 by van Hauser/THC & David Maciejak - for legal purposes only

Hydra (http://www.thc.org/thc-hydra) starting at 2013-06-24 19:24:47
[DATA] 12 tasks, 1 server, 12 login tries (l:1/p:12), ~1 try per task
[DATA] attacking service ssh on port 22
[22][ssh] host: 127.0.0.1   login: andi   password: 54321
[STATUS] attack finished for localhost (waiting for children to finish)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2013-06-24 19:24:52


8. Aturan firewall yang baru
Lihat firewall anda sekarang
# sudo iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
fail2ban-ssh  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 22

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain fail2ban-ssh (1 references)
target     prot opt source               destination        
DROP       all  --  127.0.0.1            0.0.0.0/0           

RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Terdapat aturan banned pada chain fail2ban-ssh (tercetak tebal) yang menandakan bahwa IP 127.0.0.1 tidak bisa melakukan "INPUT" ke server.

9. Pengujian
Ujilah untuk login ke server menggunakan user andi via ssh dari localhost
# ssh andi@localhost
ssh: connect to host localhost port 22: Connection timed out

Permasalahan:
Jika anda perhatikan IP yang ter-banned adalah host yang diindikasi melakukan serangan brute force atau dict matching ke sebuah server. Akan tetapi hacker:
1. Tetap mendapatkan password yang digunakan oleh user andi
2. Hacker bisa saja berpindah IP (yang tidak di banned) untuk mencoba login dengan user andi dan password 54321

Ada solusi?

Wednesday, June 12, 2013

Memahami Peta Karnaugh (1)

Pendahuluan

Peta Karnaugh adalah sebuah metode untuk:
1. Menyederhanakan sebuah fungsi persamaan logika. Menyederhanakan fungsi persamaan logika sebenarnya bisa dilakukan dengan menggunakan aturan-aturan baku seperti:
  • Distributif. Misalnya (p ∧ q) ∨ (p ∧ r) ≡ p ∧ (q ∨ r)  atau (p ∨ q) ∧ (p ∨ r) ≡ p ∨ (q ∧ r). 
  • De Morgan seperti ~p ∨ ~q ≡ ~(p ∧ q) atau ~p ∧ ~q
  • Hukum penyerapan  seperti p ∧ (p ∨ q) ≡ p atau p ∨ (p ∧ q) ≡ p
  • dll (Keterangan lengkap bisa dibaca di: http://id.wikipedia.org/wiki/Logika_matematika)
2. Mencari fungsi persamaan logika dari sebuah tabel kebenaran. Terkadang, kita memiliki sebuah tabel kebenaran (yang diperoleh dari pengumpulan kasus atau kejadian) tetapi belum memiliki persamaan logikanya sehingga sulit membuat untai rangkaian logikanya.

Permasalahan-permasalahan diatas dapat diselesaikan dengan peta karnaugh.

Peta Karnaugh
Peta karnaugh (atau K-Map) diperkenalkan oleh Maurice Karnaugh tahun 1953 (wikipedia) adalah sebuah metode untuk menyederhanakan fungsi persamaan logika sehingga (Freddy Kurniawan: Sistem Digital):
  1. Menggunakan jumlah gerbang lebih sedikit sehingga waktu tunda total untai menjadi lebih kecil
  2. Kemungkinan resiko kegagalan fungsi lebih kecil karena penggunaan gerbang dan perkawatan yang lebih sedikit
  3. Daya total yang dikonsumsi untai logika juga akan lebih kecil.
  4. Hemat biaya
Peta Karnaugh di-"ilustrasikan" seperti matrik 2 dimensi (terdiri atas baris dan kolom) dimana komponen baris dan kolom adalah masukan (input) dari sistem. Input dari masukan inilah yang kemudian disebut variabel K-Map nya. Sehingga ada sebutan K-Map 2 Peubah, K-Map 3 Peubah, 4 peubah dst.

K-Map efektif digunakan hanya sampai 6 peubah saja. Untuk peubah lebih dari 6, tidak lagi di-rekomendasikan menggunakan K-Map karena komputasinya sangat tinggi sehingga disarankan menggunakan program komputer khusus. Tutorial kali ini, saya akan membahas K-Map hingga 4 Variabel. Untuk K-Map 5 dan 6 Peubah akan dibahas pada tutorial berikutnya.

Menggambar peta karnagh
Peta Karnaugh 2 Peubah:
Ilustrasi berikut adalah peta karnaugh 2 peubah (A dan B).

Kelompok Baris adalah masukan A dan Kelompok Kolom adalah masukan B. Tidak ada yang spesial dari aturan K-Map 2 Variabel. Anda bisa menulisnya 0 kemudian 1 (sesuai contoh) atau 1 kemudian 0.
Sekarang kita lihat tabel kebenaran dari fungsi yang akan kita buat. Asumsikan, kita tidak memiliki fungsi persamaan dari tabel kebenaran berikut dan kita akan membuatnya.

Setiap cell dari matrik (bagian tengah) akan kita isi dengan hasil atau result dari tabel kebenaran. Sebagai contoh:

Peta Karnaugh 3 Peubah:
Sedikit berbeda dengan peta karnaugh 2 peubah, K-Map 3 peubah menggunakan 2 peubah di satu rusuk dan 1 peubah di rusuk yang lain. Anda bisa membuat K-Map dengan 2 peubah di rusuk tegak, dan 1 peubah di rusuk mendatar atau sebaliknya. Perhatikan gambar:


Yang perlu diperhatikan di sini adalah penyusunan kombinasi masukan 2 peubah harus mengikuti kaidah "perubahan di satu tempat". Artinya transisi dari "0" ke "1" hanya di satu tempat saja. Sebagai contoh, kombinasi masukan dari "01" menjadi "11". Transisi yang terjadi pada kombinasi ini hanya pada masukan A (dari 0 menjadi 1) sedangkan masukan B tetap (1 tetap 1). Jadi anda tidak boleh menulis "01" kemudian "10" (seperti yang biasa anda lakukan di tabel kebenaran). Mengapa? karena jika susunan-nya "01" kemudian "10", berarti perubahan terjadi di 2 masukan, A berubah dari "0" menjadi "1" dan masukan B berubah dari "1" menjadi "0".

Seperti pada K-Map 2 peubah, isi Cell dari K-Map 3 peubah juga berisi result (hasil) dari tabel kebenaran. Sebagai contoh:

Anda boleh menggunakan K-Map yang atas atau yang bawah.

Peta Karnaugh 4 Peubah:
Untuk K-Map 4 peubah, anda dapat memasukkan 2 peubah di rusuk tegak dan 2 peubah di rusuk mendatar. Perhatikan gambar:
Daerah Minterm
Nah sekarang kita sudah bisa menggambar peta Karnaugh atau K-Map dengan 2, 3 dan 4 peubah. Proses berikutnya adalah menentukan daerah minterm. Daerah minterm adalah sebuah daerah di dalam K-Map yang berisi nilai 1 yang "bertetangga" (akan dijelaskan dalam contoh). Keanggotaan sebuah daerah minterm bisa berisi 2^n dimana n bernilai 0, 1, 2, 3, ... dst. Sehingga keanggotaan wilayah minterm bisa 1, 2, 4, 8, 16, dst.
Melukiskan daerah minterm, bisa secara vertikal (atas bawah) atau horisontal (kiri dan kanan) tetapi tidak bisa secara diagonal.
Contoh daerah minterm untuk K-Map 2 peubah adalah sebagai berikut:

Keterangan:
(A): Karena nilai "1" hanya ada satu, maka daerah mintermnya juga hanya 1.
(B): Nilai "1" ada di dua tempat (cell) tetapi mereka bertetangga secara diagonal, maka angka-angka "1" tersebut tidak bisa menjadi satu wilayah minterm.
(C): Terdapat 2 wilayah minterm dengan masing-masing memiliki 2 anggota angka "1".
(D): Mirip dengan kasus point (B).

Sedikit berbeda untuk K-Map dengan dimensi yang lebih besar(di atas dimensi 2x2), K-Map "dipandang sebagai sebuah bidang yang "bulat" seperti globe. Artinya daerah minterm bisa saja "menyatukan" angka 1 yang di sisi atas dan bawah atau kiri dan kanan secara berputar. Lihat contoh di bawah ini:


Ingat: Tidak bisa diagonal saja.

Membangun persamaan dari daerah minterm di K-Map
Setelah daerah minterm sudah kita tandai, proses berikutnya adalah menentukan persamaan dari daerah minterm tersebut. Kita bisa menggunakan asas "konsistensi" untuk memudahkan membangun persamaan daerah minterm tersebut. Konsistensi yang saya maksud adalah nilai masukan yang TIDAK BERUBAH di setiap sel daerah minterm. Sebagai contoh untuk daerah minterm yang hanya berisi satu anggota seperti pada gambar berikut:

Karena kita tidak bisa membuat daerah minterm secara diagonal maka K-Map di atas memiliki 2 daerah minterm. Untuk daerah mintem yang berisi satu anggota saja, membuat persamaannya cukup mudah. Cukup lihat masukan untuk setiap daerah minterm tersebut.

Daerah minterm 1: masukan dari sisi baris adalah A'B dan dari sisi kolom adalah C'. Nilai akses (') di sini mengacu pada nilai 0 pada masukan A dan C (sedangkan karena nilai B bernilai "1" maka tidak diberi aksen atau NOT).
Daerah minterm 2: masukan dari sisi baris adalah AB dan dari sisi kolom adalah C (semua nilai masukan "1" maka tidak ada aksen)

Sehingga fungsi persamaan dari K-Map tersebut adalah: A'BC + ABC.
Pembuktian dengan tabel kebenaran:


Untuk daerah minterm yang berisi lebih dari satu, asas konsistensi bisa kita gunakan. Perhatikan contoh:

Pada contoh di atas, daerah mintem yang terbentuk memiliki empat anggota dimana masukannya adalah:
  1. Sisi Baris (AB): 01 dan 11
  2. Sisi Kolom (CD): 01 dan 11
Nilai yang konsisten di sisi baris adalah B. (A tidak konsisten karena ada A yang bernilai "1" dan ada A yang bernilai "0". Sedangkan nilai yang konsisten di sisi kolom adalah D. (nilai C tidak konsisten).
Sehingga persamaan untuk K-Map di atas adalah BD. Lihat pada tabel kebenaran berikut:


Contoh lain:

Daerah minterm 1 (yang berwarna biru): Masukan yang konsisten di sisi baris (masukan AB) adalah B dan masukan yang konsisten di sisi kolom adalah C sehingga rumus fungsinya adalah BC
Daerah minterm 2 (yang berwarna merah): Masukan yang konsisten di sisi baris (masukan AB) tidak ada (semuanya (baik A dan B) tidak ada yang konsisten) sedangkan masukan yang konsisten di sisi kolom adalah CD'.

Sehingga persamaan fungsi dari K-Map di atas adalah F = BC + CD'. Perhatikan tabel kebenaran berikut:


Cukup mudah bukan? Semoga bermanfaat.

Monday, June 3, 2013

Tutorial Addressing pada Mikroprosesor x86

Pendahuluan

Pada tutorial sebelumnya, kita telah mempelajari bagaimana siklus instruksi (yang disederhanakan pada 4 tahap: Fetch Instruction, Decode Instruction, Execute dan Write Output) menggunakan simulator PEP7. Tutorial kali ini kita akan menggunakan program Debug (bawaan MS Windows XP atau Win 7) untuk menjelaskan mode pengalamatan beserta contoh studi kasus.


Mode Pengalamatan

Ada beberapa mode pengalamatan pada CPU antara lain:
  1. Immediate Addressing
  2. Direct Addressing
  3. Register Addressing
  4. Indirect Addressing
Immediate Addressing
Adalah sebuah bentuk pengalamatan paling sederhana. Tidak ada referensi kemana-mana. Operand (data yang akan diolah) benar-benar ada dalam instruksinya. Keuntungan dari mode pengalamatan ini adalah Menghemat siklus instruksi sehingga proses keseluruhan menjadi cepat (karena tidak memerlukan referensi memori). Contoh mode pengalamatan immediate adalah:
MOV ax, 200h. 
Keterangan:
Kita akan "memasukkan" data 200h (hexa) ke register AX, sehingga AX akan berisi data 0200.

Direct Addressing
Adalah sebuah mode pengalamatan sederhana karena hanya memerlukan satu referensi memory sebagai operandnya. Artinya operand (data yang akan diolah) diletakkan di memory sehingga lebih besar dari operand yang "hanya" tertulis di instruksinya. Contoh mode pengalamatan langsung (direct addressing) adalah sebagai berikut:
MOV ax,[200h]
Keterangan:
Kita akan "memasukkan" data yang berada di memori alamat 200h ke dalam register AX. Ingat.. yang kita masukkan adalah data yang berada di alamat 200h dan bukan angka 200h.



Register Addressing.
Adalah sebuah bentuk "pengcopyan" isi register ke register yang lain. Contoh pengalamatan register adalah sebagai berikut:
MOV ax,bx
Keterangan:
Kita akan memasukkan (mengcopy) isi dari register BX ke dalam register AX.


Indirect Addressing.
Adalah sebuah mode pengalamatan yang memerlukan lebih dari satu referensi (baik memory atau register) untuk mengambil operand-nya.
Contoh mode pengalamatan tidak langsung adalah:
MOV [bx],ax
Keterangan:
Kita akan memasukkan nilai yang berada di dalam alamat memory yang ditunjukkan pada register BX. Jadi kita harus melihat dulu berapa nilai BX (misal 200h) kemudian kita harus menengok isi memory di alamat 200h tersebut baru kita pindahkan isinya ke register AX.


Dasar Arsitektur Prosesor x86.
Sebelum kita masuk pada implementasi mode pengalamatan pada arsitektur x86 menggunakan program DEBUG, ada baiknya kita mengenal terlebih dulu register pada prosesor x86.

CPU dengan Prosesor x86 memiliki beberapa register yaitu:

16 bit General Purpose Registers. Register yang biasanya digunakan untuk keperluan-keperluan khusus. Akan dibahas pada tutorial berikutnya.
AX, BX, CX, dan DX yang di-breakdown menjadi 8 bit AH, AL, BH, BL, CH, CL, DH, dan DL.

Segment registers. Biasanya digunakan untuk instruksi-instruksi spesial atau multi-segmen programming.
CS DS ES FS GS SS

Index and pointers. Biasanya digunakan bersamaan dengan segmen register untuk menunjuk pada alamat yang lebar (diatas 1MB)
SI, DI, BP, IP, dan SP

Keterangan lebih lengkap, dapat dibaca disini.

Implementasi:

1.Menjalankan program DEBUG
Sekarang kita akan mencoba mempelajari 4 mode pengalamatan di atas menggunakan program DEBUG. Untuk menjalankan program debug, kita tidak perlu menginstall secara khusus. Cukup buka start -> Run -> cmd kemudian ketik debug dan kita akan menjumpai prompt debug (biasanya cuma sebuah garis kecil)

2. Melihat perintah-perintah dalam program DEBUG
Untuk melihat perintah apa saja yang bisa kita gunakan dalam program debug, ketik tanda tanya (?) hingga muncul tampilan:
Pada tutorial ini, saya hanya akan menggunakan perintah a (assemble), d (dump), r (register) dan t (trace).

3. Melihat isi register awal
Sebelum kita mencoba macam-macam, kita lihat dulu isi data awal di setiap register. Ketik r kemudian enter.

Dari gambar di atas, kita bisa melihat isi register general purpose (ax, bx, cx dan dx) semua berisi 0000h sedangkan IP (pointer instruksi) berada pada alamat 0100h yang berarti instruksi berikutnya yang akan diproses ada di alamat 100h.

4. Membuat program untuk Immediate Addressing:
  • Seperti telah dijelaskan di atas, contoh immediate addressing adalah mov ax, 200
  • Ketik a cs:100 (assemble code segment 100) yang berarti kita akan menulis instruksi di alamat 100h (sesuai alamat Instruction Pointer).
  • Untuk mengakhiri penulisan kode program, cukup enter saja.
  • Untuk menjalankan program yang telah kita buat, ketik t (trace) seperti terlihat pada gambar di bawan ini
  • Dari output di atas, dapat kita lihat bahwa register ax telah berisi data 0200.
5. Membuat program untuk Direct Addressing
  • Seperti telah dijelaskan di atas, contoh Direct Addressing adalah mov ax, [200]
  • Seperti biasa, cek terlebih dulu isi register menggunakan r. Saya mereset seluruh isi register hanya untuk memudahkan tutorial ini saja.
  • Ketik kode dibawah ini:
  • Sebelum kita menjalankan program ini, kita cek terlebih dulu isi operand di alamat 200 menggunakan perintah d ds:200 (dump data segment 200).


  • Dari perintah dump di atas, kita dapat melihat bahwa isi dari alamat 200 adalah 81 CD. Data inilah yang nanti akan kita masukkan ke register ax.
  • Jalankan listing (instruksi) yang telah kita ketik tadi dengan t (trace)
  • Dari output di atas kita bisa melihat sekarang isi register ax adalah CD81. Ingat posisinya LSB (least significant bit) adalah bit kanan dan MSB (most significant bit) di bit kiri.
6. Register Addressing
  • Contoh register addressing adalah pen-copy-an data antar register. Misalnya mov bx, ax
  • Dengan menggunakan contoh sebelumnya dimana register ax telah berisi data CD81h akan kita copy ke register bx.
  • IP (instruction pointer) berada di alamat 103h yang berarti kita bisa menuliskan program di alamat tersebut.
  • Berikut contohnya:

  • Dari output di atas, kita bisa melihat bahwa register BX nilainya sama dengan register AX yaitu CD81h
7. Indirect Addressing.
  • Terakhir (untuk tutorial ini), kita akan mencoba mode pengalamatan tidak langsung
  • Contoh mode pengalamatan tidak langsung, kita akan memindahkan isi register AX ke memori yang alamatnya ditunjuk oleh isi register BX
  • Perintahnya adalah mov [bx],ax
  • Pertama, kita masukkan dulu nilai ABCDh di register AX
  • Kedua, kita masukkan nilai BBBBh pada register BX
  • Ketiga, kita lihat isi memori di alamat BBBBh
  • Keempat kita eksekusi
  • Berikut langkah lengkapnya:

Selamat mencoba..