dasar2 assembler


Dasar – Dasar Assembly

Dasar – Dasar
Assembly


oleh


CHuPaCaBRa



Dalam mempelajari berbagai teknik – teknik Kraking yang
ada, seorang Kraker – baik newbie maupun master – tak akan terlepas dari
Assembly. Bahasa permrograman ini merupakan dasar yang penting bagi seseorang
untuk dapat mengKrak suatu program. Walaupun begitu, tidak semua hal yang ada di
dalam bahasa Assembly ini yang harus diketahui, bagi seorang newbie cukup dengan
dapat mengerti dasar – dasar Assembly serta logika yang baik sudah dapt mengKrak
program – program dengan Sistem Proteksi yang sederhana.


Di dalam tutorial ini, aku akan membahas beberapa
perintah penting yang merupakan dasar – dasar Assembly, perintah – perintah ini
akan sering ditemui ketika kamu mencoba mengKrak suatu program. Sebelum kita
melangkah lebih jauh ke bahasa Assembly, mungkin ada baiknya kalo aku
menjelaskan sedikit mengenai Register ( buat yang udah tau, bisa kamu lewati
).


Apa itu Register ? Register adalah sebagian tempat di
memory mikroprosesor yang dapat diakses dengan cepat. Di dalam register ini
disimpan nilai – nilai yang bagi kita para Kraker sangat penting untuk
diperhatikan.


Bagaimana melihat isi Register ? Dengan memakai SoftICE,
kamu dapat melihat berbagai perubahan yang terjadi dengan isi Register. Untuk
itu kamu perlu meng-aktif-kan “Register Window” yang ada di SoftICE dengan
mengetikkan perintah WR di dalam lingkungan SoftICE. Di “Register Window” akan
terlihat berbagai register beserta isinya. Register yang penting untuk
diperhatikan dalam Kraking adalah Register EAX, EBX, ECX, EDX, ESI, EDI, EBP,
ESP dam EIP.


EAX, EBX, ECX dan EDX disebut “General Purpose Register”.
Register ini merupakan Register 32-bit, jika kamu mengKrak program 16-bit maka
Register yang terlibat adalah AX, BX, CX dan DX. Register ini dapat dipecah –
pecah, seperti gambaran di bawah ini :


misalnya isi EAX adalah 00001234, maka


  • EAX = 00 00 12 34   ==> 32 bit

  • AX   =      12 34   ==> 16 bit

  • AH   =      12      ==> 8 bit

  • AL   =         34   ==> 8 bit

Terlihat bahwa AX terdiri dari AH dan AL, H menunjukkan
High ( di bagian Kiri ) dan L berarti Low ( di bagian Kanan ).


ESI dan EDI adalah “Index Register”. Register ini
digunakan sebagai penunjuk terhadap suatu lokasi di memory dan biasanya
digunakan untuk operasi – operasi String.


EBP dan ESP adalah “Pointer Register”. Kedua Register ini
berpasangan dengan Register SS. Apabila ESP ( Stack Pointer ) berpasangan dengan
Register SS ( ESP : SS ) maka digunakan untuk menunjuk alamat pada Stack
sementara EBP ( Base Pointer ) akan berpasangan dengan Register SS ( EBP : SS )
untuk menunjuk pada alamat memory tempat data.


EIP adalah “Index Pointer Register” yang berpasangan
dengan CS ( CS : EIP ) untuk menunjuk pada alamat memory tempat perintah
selanjutnya yang akan di eksekusi.


Oke setelah penjelasan singkat mengenai Register di atas,
kita lanjutkan dengan penjelasan mengenai perintah – perintah dasar Assembly.
Perintah – perintah di bawah ini, disusun secara Alphabetical Order……


1. ADD ( ADD Binary Number
)















Format ADD  Operand1,
Operand2
Fungsi Menambahkan Operand1 dengan Operand2, hasilnya akan
disimpan di dalam Operand1
Kalimat Matematika Operand1 = Operand1 + Operand2
Contoh MOV  EAX, 00000001h
       ; Lihat perintah MOV

ADD   EAX,
00000002h        ; EAX = 00000001h +
00000002h = 00000003h


2. AND ( Logical AND )















Format AND 
Operand1, Operand2
Fungsi Melakukan Operasi Logika AND pada Operand1 dan Operand2,
hasilnya akan disimpan di Operand1
Kalimat Matematika Operand1 = Operand1 AND Operand2
Contoh MOV  EAX,
00001111b        ; Lihat perintah MOV

AND   EAX, 11110000b        ;
EAX = 00001111b AND 11110000b = 00000000b


3. CALL ( CALL A Procedure
)















Format CALL 
LokasiProcedure
Fungsi Memanggil sebuah Procedure.
Kalimat Matematika
Contoh CALL  12345678
                
; Memanggil Procedure yang berada pada Offset 12345678

4. CDQ ( Convert Doubleword To Quadword
)















Format CDQ
Fungsi Merubah nilai 32-bit dalam EAX menjadi 64-bit dalam EDX :
EAX dengan cara mengosongkan isi EDX
Kalimat Matematika
Contoh MOV  EAX, 12345678h
        ; EAX = 12345678h

CDQ
                                      ;
EDX : EAX = 00000000 : 12345678h


5. CMP ( Compare )















Format CMP  Operand1,
Operand2
Fungsi Membandingkan Operand1 dengan Operand2, setelah perintah
ini, biasanya akan diikuti dengan sebuah Condtional Jump yang akan
menentukan jalur program berikutnya.
Kalimat Matematika
Contoh MOV  ECX, 0Ah
                   
; EAX = 0Ah

MOV   EAX, 0Bh
                   
; EBX  = 0Bh


CMP    EAX, ECX
                  ;
Pembandingan EAX dengan ECX.


JE   12345678
                         
; Jika sama, lompat ke Offset 12345678. Jika tidak, lanjutkan
                                                     ke
bawah


6. DEC ( Decrement )















Format DEC 
Operand
Fungsi Mengurangi nilai Operand dengan 1
Kalimat Matematika Operand1 = Operand1 – 1
Contoh MOV  EAX, 0Ah
                   
; EAX = 0000000Ah

DEC     EAX
                           
; EAX = 0000000Ah – 00000001h = 00000009h


7. DIV ( Unsigned Division
)















Format DIV 
Operand
Fungsi Membagi nilai yang ada di Register EAX dengan
Operand2
Kalimat Matematika EAX =  EAX   DIV   Operand
Contoh MOV  EAX, 0Ah
            ;
EAX = 0000000Ah

MOV  EBX, 05h
             ;
EBX = 00000005h


DIV     EBX
                    ;
EAX = 0000000Ah  DIV  00000005h =
00000002h


8. IDIV ( Signed – Integer –
Division )















Format IDIV  
Operand
Fungsi Membagi nilai yang ada di Register EDX : EAX dengan
Operand2, hasilnya akan disimpan di EAX sedang sisanya disimpan di
EDX
Kalimat Matematika EDX : EAX = EDX : EAX  IDIV Operand
Contoh MOV   EDX, 00h
              ;
EDX = 00000000h

MOV   EAX, 0Fh
              ;
EAX = 0000000Fh


MOV   EBX, 05h
              ;
EBX  = 00000005h


IDIV     EBX
                
     ; EDX : EAX = 00000000 : 0000000Fh IDIV
00000005h


                                         
;   EAX = 00000003h ( hasil )     EDX = 00000000h
( sisa )


9. IMUL ( Signed – Integer – Multiplication
)















Format IMUL
Operand
Fungsi Pada program 32 bit, IMUL ini digunakan untuk mengalikan
antara nilai yang tersimpan di dalam Register EDX : EAX dengan Operand.
Hasilnya akan disimpan di dalam EAX
Kalimat Matematika EAX = EDX : EAX   IMUL   Operand
Contoh MOV   EDX, 00h
           ;  EDX =
00000000h

MOV    EAX, 05h
            ; EAX =
00000005h


MOV   EBX, 0Ah
           ;  EBX =
0000000Ah


IMUL   EBX
                  
;   EAX = 00000000 : 00000005 IMUL 0000000A =
00000032h


10. Conditional Jump


Conditional Jump adalah perintah dalam Assembler yang
digunakan untuk menentukan alur program berikutnya. Conditional Jump ini
sebelumnya didahului oleh perintah CMP ( perhatikan contoh di penjelasan no.
5).


Ada berbagai macam Conditional Jump, di sini aku hanya
membahas beberapa Conditional Jump yang sering aku temui ketika mengKrak, untuk
perintah – perintah Conditional Jump lainnya, bisa kamu perdalam lagi di buku –
buku yang membahas Assembly. Untuk semua penjelasan Conditional Jump di bawah
ini, aku akan pake beberapa perintah yang ada sebelum perintah Conditional Jump
tersebut dieksekusi.


MOV  EAX, 01h
            ; EAX =
00000001h


MOV  EBX, 02h
            ; EBX =
00000002h


CMP   EAX,
EBX         ;   Membandingkan
antara EAX dengan EBX



































































Format Conditional Jump


Fungsi

JA     LokasiTujuan  (
Jump If Above )
Lompat ke LokasiTujuan jika EAX lebih besar dari EBX
JAE   LokasiTujuan  ( Jump If Above
or Equal )
Lompat ke LokasiTujuan jika EAX lebih besar atau sama
dengan EBX
JNA  LokasiTujuan  ( Jump If Not Above
)
Lompat ke LokasiTujuan jika EAX tidak lebih besar dari
EBX
JNAE  LokasiTujuan  ( Jump If Not Above
or Equal )
Lompat ke LokasiTujuan jika EAX tidak lebih besar atau
sama dengan EBX
JB     LokasiTujuan  (
Jump If  Below )
Lompat ke LokasiTujuan jika EAX lebih kecil dari EBX
JBE   LokasiTujuan  ( Jump If 
Below or Equal )
Fungsinya sama dengan perintah JNA
JNB  LokasiTujuan  ( Jump If Not Below
)
Fungsinya sama dengan perintah JAE
JNBE  LokasiTujuan  ( Jump If Not Below
or Equal )
Fungsinya sama dengan perintah JA
JE     LokasiTujuan  (
Jump If  Equal )
Lompat ke LokasiTujuan jika EAX sama dengan EBX
JNE  LokasiTujuan  ( Jump If  Not
Equal )
Lompat ke LokasiTujuan jika EAX tidak sama dengan
EBX
JG     LokasiTujuan  (
Jump If  Greater )
Lompat ke LokasiTujuan jika EAX lebih besar dari EBX
JGE   LokasiTujuan  ( Jump If
Greater or Equal )
Lompat ke LokasiTujuan jika EAX lebih besar atau sama
dengan EBX
JNG  LokasiTujuan  ( Jump If  Not
Greater )
Lompat ke LokasiTujuan jika EAX tidak lebih besar dari
EBX
JNGE  LokasiTujuan  ( Jump If Not
Greater or Equal )
Lompat ke LokasiTujuan jika EAX tidak lebih besar atau
sama dengan EBX
JL     LokasiTujuan  (
Jump If  Less Than )
Fungsinya sama dengan perintah JNGE
JLE   LokasiTujuan  ( Jump If Less
or Equal )
Fungsinya sama dengan perintah JNG
JNL  LokasiTujuan  ( Jump If  Not
Less Than )
Fungsinya sama dengan perintah JGE
JNLE   LokasiTujuan  ( Jump
If  Not Less or Equal )
Fungsinya sama dengan perintah JG
JZ     LokasiTujuan  (
Jump If  Zero )
Fungsinya sama dengan JE
JNZ  LokasiTujuan  ( Jump If  Not
Zero )
Fungsinya sama dengan
JNE

11. JMP  LokasiTujuan  (
Unconditional Jump )















Format JMP 
LokasiTujuan
Fungsi Perintah JMP ini berbeda dengan perintah – perintah
Conditional Jump karena ia tidak memerlukan hasil perbandingan sebelum
perintah ini dieksekusi.
Kalimat Matematika
Contoh JMP 
12345678        ; Lompat ke Offset
12345678

12. LEA ( Load Effective Address
)















Format LEA  Operand1,
LokasiMemory
Fungsi Untuk mengambil Offset dari LokasiMemory dan menyimpannya
di dalam Operand1
Kalimat Matematika
Contoh LEA  EAX,

13. MOV ( Move Data )















Format MOV  Operand1,
Operand2
Fungsi Menyalin isi dari Operand2 kedalam Operand1
Kalimat Matematika Operand1 = Operand2
Contoh MOV   EAX, 0Ah
             ;
EAX = 0000000Ah

14. MUL ( Multiplication
)















Format MUL 
Operand
Fungsi Mengalikan isi EAX dengan Operand, hasilnya akan disimapn
di dalam EDX : EAX
Kalimat Matematika EDX : EAX = EAX * Operand
Contoh MOV  EAX, 0Ah
           ; EAX =
0000000Ah

MUL    EAX, 05h
          ; EDX : EAX =
0000000Ah * 00000005h = 00000000 : 00000032h


15. NOP ( No Operation
)















Format NOP
Fungsi Seperti namanya, NOP tidak melakukan Operasi apa – apa,
walaupun begitu perintah ini memiliki peran yang cukup penting dalam
Kraking. Seperti yang diketahui, salah satu teknik mengKrak sebuah Sistem
Proteksi adalah Patching, dalam Patching ini, Kraker harus merubah
perintah yang ada di dalam Sistem Proteksi tersebut agar dapat
mengKraknya.

Contoh sederhananya yaitu ketika ada sebuah Conditional Jump yang akan
menentukan apakah S/N yang kita masukan valid atau tidak, salah satu cara
yang mungkin untuk mengKraknya adalah dengan me-NOP-kan perintah
Conditional Jump tersebut. Untuk lebih jealasnya, liat contoh di
bawah.

Kalimat Matematika
Contoh MOV   EAX, 12345678
         ; Offset 12345678 berisi
S/N palsu

MOV    EBX,
87654321         ; Offset 87654321
berisi S/N yang asli.


CMP    EAX, EBX
                
; Bandingkan EAX dengan EBX


JNE      12344321
                  
; Jika tidak sama, lompat ke Offset 12344321


Offset berikutnya menyatakan bahwa S/N yang dimasukan adalah S/N yang
valid.


Offset 12344321 menyatakan bahwa S/N yang kita masukan adalah S/N yang
salah..


Listing di atas menunjukkan dengan jelas bagaimana S/N kita
dibandingkan, jika kau ingin dengan sembarang S/N dapat dianggap sukses
maka kita bisa me-NOP-kan Conditional Jump di atas sehingga listing
perintah di atas menjadi :


MOV   EAX,
12345678         ; Offset 12345678
berisi S/N palsu


MOV   EBX,
87654321         ; Offset 87654321
berisi S/N yang asli.


CMP    EAX, EBX
                
; Bandingkan EAX dengan EBX


NOP
                                     
; Tidak melakukan pencabangan sehingga S/N apa saja yang
                                                   dimasukan
akan dianggap valid.


16. OR ( Logical OR )















Format OR  Operand1,
Operand2
Fungsi Melakukan Operasi Logika OR terhadap Operand1 dan
Operand2, hasilanya akan disimpan di dalam Operand1
Kalimat Matematika Operand1 = Operand1  OR  Operand2
Contoh OR    EAX, EBX

17. POP ( POP from Stack
)















Format POP 
Operand
Fungsi Mengambil isi dari Stack dan menyimpannya di dalam
Operand
Kalimat Matematika
Contoh POP   EAX

18. PUSH ( PUSH onto Stack
)















Format PUSH 
Operand
Fungsi Memasukan nilai dari Operand ke dalam Stack
Kalimat Matematika
Contoh PUSH  EAX

19. RET ( Return from Procedure
)















Format RET
Fungsi Kembali ke Rutin pemanggil Procedure yang sedang
berlangsung.
Kalimat Matematika
Contoh 1234 : 00000001  CALL   00001000
      ;Memanggil Procedure yang ada di
Offset  00001000

1234 : 00000002
                                    
;Perintah Selanjutnya


1234 : 00001000    RET
                         
;Alur program akan kembali ke Offset 00000002


20. SUB ( Subtract Binary Values
)















Format SUB Operand1,
Operand2
Fungsi Mengurangkan nilai dari Operand1 dengan Operand2. Hasilnya
kemudian disimpan di dalam Operand1
Kalimat Matematika Operand1 = Operand1 – Operand2
Contoh MOV  EAX, 0Ah ;EAX = 0Ah ( = 10 decimal )

MOV  EBX, 01h ;EBX = 01h ( = 01 decimal )


SUB  EAX, EBX ;EAX = EAX – EBX = 0Ah – 01h =
09h


21. TEST ( Test Bits )















Format TEST Operand1,
Operand2
Fungsi Memeriksa apakah Operand1 sama dengan Operand2 ???
Kalimat Matematika
Contoh MOV  EAX, 0Ah ;EAX = 0Ah ( = 10 decimal )

MOV  EBX, 01h ;EBX = 01h ( = 01 decimal )


TEST EAX, EBX ;Apakah EAX = EBX ???


JE   12344321        ;Jika
sama, lompat.


22. XOR ( Exclusive OR
)















Format XOR Operand1,
Operand2
Fungsi Melakukan operasi logika Exlusive OR antara Operand1
dengan Operand2. Perintah XOR ini juga sering dipakai untuk me-nol-kan
suatu register dengan cara XOR Operand1, Operand1
Kalimat Matematika
Contoh XOR EAX, EAX
           ;Berfungsi
untuk me-nol-kan nilai EAX ( EAX = 0 )

 

Published on October 9, 2007 at 3:56 am  Leave a Comment  

The URI to TrackBack this entry is: https://miqrosoft.wordpress.com/dasar2-assembler/trackback/

RSS feed for comments on this post.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: