Mari belajar assembly

1,358 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,358
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
39
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Mari belajar assembly

  1. 1. Mari belajar Assembly (Dasar-dasarAssembly)POSTED BY K.GUSTI RANGGA SEPTEMBER - 23 - UNDEFINEDDalam mempelajari berbagai teknik - teknik Kraking yang ada, seorang Kraker - baik newbie maupunmaster - tak akan terlepas dari Assembly. Bahasa permrograman ini merupakan dasar yang pentingbagi seseorang untuk dapat mengKrak suatu program. Walaupun begitu, tidak semua hal yang ada didalam bahasa Assembly ini yang harus diketahui, bagi seorang newbie cukup dengan dapat mengertidasar - dasar Assembly serta logika yang baik sudah dapt mengKrak program - program denganSistem Proteksi yang sederhana.Di dalam tutorial ini, aku akan membahas beberapa perintah penting yang merupakan dasar - dasarAssembly, 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 menjelaskansedikit mengenai Register ( buat yang udah tau, bisa kamu lewati ).Apa itu Register ? Register adalah sebagian tempat di memory mikroprosesor yang dapat diaksesdengan cepat. Di dalam register ini disimpan nilai - nilai yang bagi kita para Kraker sangat pentinguntuk diperhatikan.Bagaimana melihat isi Register ? Dengan memakai SoftICE, kamu dapat melihat berbagai perubahanyang terjadi dengan isi Register. Untuk itu kamu perlu meng-aktif-kan "Register Window" yang ada diSoftICE dengan mengetikkan perintah WR di dalam lingkungan SoftICE. Di "Register Window" akanterlihat berbagai register beserta isinya. Register yang penting untuk diperhatikan dalam Krakingadalah 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 bitTerlihat bahwa AX terdiri dari AH dan AL, H menunjukkan High ( di bagian Kiri ) dan L berarti Low ( dibagian Kanan ).ESI dan EDI adalah "Index Register". Register ini digunakan sebagai penunjuk terhadap suatu lokasidi 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 untukmenunjuk alamat pada Stack sementara EBP ( Base Pointer ) akan berpasangan dengan Register
  2. 2. SS ( EBP : SS ) untuk menunjuk pada alamat memory tempat data.EIP adalah "Index Pointer Register" yang berpasangan dengan CS ( CS : EIP ) untuk menunjuk padaalamat memory tempat perintah selanjutnya yang akan di eksekusi.Oke setelah penjelasan singkat mengenai Register di atas, kita lanjutkan dengan penjelasanmengenai perintah - perintah dasar Assembly. Perintah - perintah di bawah ini, disusun secaraAlphabetical Order......1. ADD ( ADD Binary Number )Format ADD Operand1, Operand2Fungsi Menambahkan Operand1 dengan Operand2, hasilnya akan disimpan di dalam Operand1Kalimat Matematika Operand1 = Operand1 + Operand2Contoh MOV EAX, 00000001h ; Lihat perintah MOVADD EAX, 00000002h ; EAX = 00000001h + 00000002h = 00000003h2. AND ( Logical AND )Format AND Operand1, Operand2Fungsi Melakukan Operasi Logika AND pada Operand1 dan Operand2, hasilnya akan disimpan diOperand1Kalimat Matematika Operand1 = Operand1 AND Operand2Contoh MOV EAX, 00001111b ; Lihat perintah MOVAND EAX, 11110000b ; EAX = 00001111b AND 11110000b = 00000000b3. CALL ( CALL A Procedure )Format CALL LokasiProcedureFungsi Memanggil sebuah Procedure.Kalimat Matematika -Contoh CALL 12345678 ; Memanggil Procedure yang berada pada Offset 123456784. CDQ ( Convert Doubleword To Quadword )Format CDQFungsi Merubah nilai 32-bit dalam EAX menjadi 64-bit dalam EDX : EAX dengan cara mengosongkanisi EDXKalimat Matematika -Contoh MOV EAX, 12345678h ; EAX = 12345678hCDQ ; EDX : EAX = 00000000 : 12345678h5. CMP ( Compare )Format CMP Operand1, Operand2Fungsi Membandingkan Operand1 dengan Operand2, setelah perintah ini, biasanya akan diikutidengan sebuah Condtional Jump yang akan menentukan jalur program berikutnya.Kalimat Matematika -Contoh MOV ECX, 0Ah ; EAX = 0AhMOV EAX, 0Bh ; EBX = 0BhCMP EAX, ECX ; Pembandingan EAX dengan ECX.JE 12345678 ; Jika sama, lompat ke Offset 12345678. Jika tidak, lanjutkan ke bawah6. DEC ( Decrement )Format DEC OperandFungsi Mengurangi nilai Operand dengan 1Kalimat Matematika Operand1 = Operand1 - 1Contoh MOV EAX, 0Ah ; EAX = 0000000Ah
  3. 3. DEC EAX ; EAX = 0000000Ah - 00000001h = 00000009h7. DIV ( Unsigned Division )Format DIV OperandFungsi Membagi nilai yang ada di Register EAX dengan Operand2Kalimat Matematika EAX = EAX DIV OperandContoh MOV EAX, 0Ah ; EAX = 0000000AhMOV EBX, 05h ; EBX = 00000005hDIV EBX ; EAX = 0000000Ah DIV 00000005h = 00000002h8. IDIV ( Signed - Integer - Division )Format IDIV OperandFungsi Membagi nilai yang ada di Register EDX : EAX dengan Operand2, hasilnya akan disimpan diEAX sedang sisanya disimpan di EDXKalimat Matematika EDX : EAX = EDX : EAX IDIV OperandContoh MOV EDX, 00h ; EDX = 00000000hMOV EAX, 0Fh ; EAX = 0000000FhMOV EBX, 05h ; EBX = 00000005hIDIV EBX ; EDX : EAX = 00000000 : 0000000Fh IDIV 00000005h; EAX = 00000003h ( hasil ) EDX = 00000000h ( sisa )9. IMUL ( Signed - Integer - Multiplication )Format IMUL OperandFungsi Pada program 32 bit, IMUL ini digunakan untuk mengalikan antara nilai yang tersimpan didalam Register EDX : EAX dengan Operand. Hasilnya akan disimpan di dalam EAXKalimat Matematika EAX = EDX : EAX IMUL OperandContoh MOV EDX, 00h ; EDX = 00000000hMOV EAX, 05h ; EAX = 00000005hMOV EBX, 0Ah ; EBX = 0000000AhIMUL EBX ; EAX = 00000000 : 00000005 IMUL 0000000A = 00000032h10. Conditional JumpConditional Jump adalah perintah dalam Assembler yang digunakan untuk menentukan alur programberikutnya. Conditional Jump ini sebelumnya didahului oleh perintah CMP ( perhatikan contoh dipenjelasan no. 5).Ada berbagai macam Conditional Jump, di sini aku hanya membahas beberapa Conditional Jumpyang sering aku temui ketika mengKrak, untuk perintah - perintah Conditional Jump lainnya, bisakamu perdalam lagi di buku - buku yang membahas Assembly. Untuk semua penjelasan ConditionalJump di bawah ini, aku akan pake beberapa perintah yang ada sebelum perintah Conditional Jumptersebut dieksekusi.MOV EAX, 01h ; EAX = 00000001hMOV EBX, 02h ; EBX = 00000002hCMP EAX, EBX ; Membandingkan antara EAX dengan EBXFormat Conditional Jump
  4. 4. FungsiJA LokasiTujuan ( Jump If Above ) Lompat ke LokasiTujuan jika EAX lebih besar dari EBXJAE LokasiTujuan ( Jump If Above or Equal ) Lompat ke LokasiTujuan jika EAX lebih besar atausama dengan EBXJNA LokasiTujuan ( Jump If Not Above ) Lompat ke LokasiTujuan jika EAX tidak lebih besar dari EBXJNAE LokasiTujuan ( Jump If Not Above or Equal ) Lompat ke LokasiTujuan jika EAX tidak lebihbesar atau sama dengan EBXJB LokasiTujuan ( Jump If Below ) Lompat ke LokasiTujuan jika EAX lebih kecil dari EBXJBE LokasiTujuan ( Jump If Below or Equal ) Fungsinya sama dengan perintah JNAJNB LokasiTujuan ( Jump If Not Below ) Fungsinya sama dengan perintah JAEJNBE LokasiTujuan ( Jump If Not Below or Equal ) Fungsinya sama dengan perintah JAJE LokasiTujuan ( Jump If Equal ) Lompat ke LokasiTujuan jika EAX sama dengan EBXJNE LokasiTujuan ( Jump If Not Equal ) Lompat ke LokasiTujuan jika EAX tidak sama dengan EBXJG LokasiTujuan ( Jump If Greater ) Lompat ke LokasiTujuan jika EAX lebih besar dari EBXJGE LokasiTujuan ( Jump If Greater or Equal ) Lompat ke LokasiTujuan jika EAX lebih besar atausama dengan EBXJNG LokasiTujuan ( Jump If Not Greater ) Lompat ke LokasiTujuan jika EAX tidak lebih besar dariEBXJNGE LokasiTujuan ( Jump If Not Greater or Equal ) Lompat ke LokasiTujuan jika EAX tidak lebihbesar atau sama dengan EBXJL LokasiTujuan ( Jump If Less Than ) Fungsinya sama dengan perintah JNGEJLE LokasiTujuan ( Jump If Less or Equal ) Fungsinya sama dengan perintah JNGJNL LokasiTujuan ( Jump If Not Less Than ) Fungsinya sama dengan perintah JGEJNLE LokasiTujuan ( Jump If Not Less or Equal ) Fungsinya sama dengan perintah JGJZ LokasiTujuan ( Jump If Zero ) Fungsinya sama dengan JEJNZ LokasiTujuan ( Jump If Not Zero ) Fungsinya sama dengan JNE11. JMP LokasiTujuan ( Unconditional Jump )Format JMP LokasiTujuanFungsi Perintah JMP ini berbeda dengan perintah - perintah Conditional Jump karena ia tidakmemerlukan hasil perbandingan sebelum perintah ini dieksekusi.Kalimat Matematika -Contoh JMP 12345678 ; Lompat ke Offset 1234567812. LEA ( Load Effective Address )Format LEA Operand1, LokasiMemoryFungsi Untuk mengambil Offset dari LokasiMemory dan menyimpannya di dalam Operand1Kalimat Matematika -Contoh LEA EAX,13. MOV ( Move Data )Format MOV Operand1, Operand2Fungsi Menyalin isi dari Operand2 kedalam Operand1Kalimat Matematika Operand1 = Operand2Contoh MOV EAX, 0Ah ; EAX = 0000000Ah14. MUL ( Multiplication )Format MUL OperandFungsi Mengalikan isi EAX dengan Operand, hasilnya akan disimapn di dalam EDX : EAXKalimat Matematika EDX : EAX = EAX * OperandContoh MOV EAX, 0Ah ; EAX = 0000000AhMUL EAX, 05h ; EDX : EAX = 0000000Ah * 00000005h = 00000000 : 00000032h15. NOP ( No Operation )Format NOPFungsi Seperti namanya, NOP tidak melakukan Operasi apa - apa, walaupun begitu perintah inimemiliki peran yang cukup penting dalam Kraking. Seperti yang diketahui, salah satu teknikmengKrak sebuah Sistem Proteksi adalah Patching, dalam Patching ini, Kraker harus merubah
  5. 5. perintah yang ada di dalam Sistem Proteksi tersebut agar dapat mengKraknya.Contoh sederhananya yaitu ketika ada sebuah Conditional Jump yang akan menentukan apakah S/Nyang kita masukan valid atau tidak, salah satu cara yang mungkin untuk mengKraknya adalahdengan 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 palsuMOV EBX, 87654321 ; Offset 87654321 berisi S/N yang asli.CMP EAX, EBX ; Bandingkan EAX dengan EBXJNE 12344321 ; Jika tidak sama, lompat ke Offset 12344321Offset 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 dengansembarang S/N dapat dianggap sukses maka kita bisa me-NOP-kan Conditional Jump di atassehingga listing perintah di atas menjadi :MOV EAX, 12345678 ; Offset 12345678 berisi S/N palsuMOV EBX, 87654321 ; Offset 87654321 berisi S/N yang asli.CMP EAX, EBX ; Bandingkan EAX dengan EBXNOP ; Tidak melakukan pencabangan sehingga S/N apa saja yang dimasukan akan dianggap valid.16. OR ( Logical OR )Format OR Operand1, Operand2Fungsi Melakukan Operasi Logika OR terhadap Operand1 dan Operand2, hasilanya akan disimpan didalam Operand1Kalimat Matematika Operand1 = Operand1 OR Operand2Contoh OR EAX, EBX17. POP ( POP from Stack )Format POP OperandFungsi Mengambil isi dari Stack dan menyimpannya di dalam OperandKalimat Matematika -Contoh POP EAX18. PUSH ( PUSH onto Stack )Format PUSH OperandFungsi Memasukan nilai dari Operand ke dalam StackKalimat Matematika -Contoh PUSH EAX19. RET ( Return from Procedure )Format RETFungsi Kembali ke Rutin pemanggil Procedure yang sedang berlangsung.Kalimat Matematika -Contoh 1234 : 00000001 CALL 00001000 ;Memanggil Procedure yang ada di Offset 000010001234 : 00000002 ;Perintah Selanjutnya1234 : 00001000 RET ;Alur program akan kembali ke Offset 0000000220. SUB ( Subtract Binary Values )
  6. 6. Format SUB Operand1, Operand2Fungsi Mengurangkan nilai dari Operand1 dengan Operand2. Hasilnya kemudian disimpan di dalamOperand1Kalimat Matematika Operand1 = Operand1 - Operand2Contoh MOV EAX, 0Ah ;EAX = 0Ah ( = 10 decimal )MOV EBX, 01h ;EBX = 01h ( = 01 decimal )SUB EAX, EBX ;EAX = EAX - EBX = 0Ah - 01h = 09h21. TEST ( Test Bits )Format TEST Operand1, Operand2Fungsi 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, Operand2Fungsi Melakukan operasi logika Exlusive OR antara Operand1 dengan Operand2. Perintah XOR inijuga sering dipakai untuk me-nol-kan suatu register dengan cara XOR Operand1, Operand1Kalimat Matematika -Contoh XOR EAX, EAX ;Berfungsi untuk me-nol-kan nilai EAX ( EAX = 0 )

×