Main » 2009 » August » 29 » Pengenalan Basic ASM + convert to shell Code C (targa 21)
Pengenalan Basic ASM + convert to shell Code C (targa 21)
5:59 Am
oke langsung aja ya?
instruksi dasar yg sering dipake: -------------------------------------
-mov artinya move (pindahkan) contoh dg asm 32 bit: misal mov ah,09h = pindahkah ke register ah nilai 9 hexadesimal -> syarat salah 1 syscall misal kita mao panggil int 21 h fungsi 9 hexa untuk menampilkan teks di layar.
-jmp artinya jump (loncat) bisa dipakai untuk loncat misal ke macro (macro atau prosedur cuma ada di asm 32 bit di 64 bit gak ada macro)
-push -> dorong (untuk menyimpan) misal untuk menyimpan data ke stack pointer
- pop -> ambil ( untuk mengambil data dari stack)
- jne -> jump if not equal (lompat jika tidak sama)
- jnz -> jump if not zero (lompat jika bukan zero)
- jnc -> jump if not carry (lompat jika tidak ada sisa)
- lea -> load effective address
- and -> logika and
untuk lebih lengkapnya silahkan cari di google dg keyword: "assembly language instruction"
Model Pemrograman
perbedaan menonjol antara model pemrograman asm bisa dilihat dari register2 yang banyak dia pakai.
- model asm 8 bit mengunakan register: AH,AL,BH,BL,CH,CL,DH,DL
-model 16 bit menggunakan register : AX,BX,CX,DX,SP,BP,DI,SI,IP,FLAGS,CS,DS,ES,SS,FS,GS
- model 32 bit menggunakan
regi: EAX, EBX,ECX,EDX,ESP,EBP,EDI,EIP (return address -> ini dia
yang banyak dimanfaatkan hacker pada saat nilai kembali berusaha
dioverwrite utk point ke instruksi yang ilegal)
contoh syscall dg asm:
karena yg ngetrend adalah yg 32 bit maka kita akan coba langsung aja prakteknya di bawah ini:
dalam
kasus ini kita akan memanggil 2 syscall nomer 1 (sys_exit) dan syscall
nomer 4 (sys_write) berikut ini contoh basic asm yg menggunakan 2
syscall tadi: (btw ni asm 32 bit di linux tar kita kompile pake nasm (netwide assembler) kita jadikan elf binary file name: contoh.asm
section .data tes db 'mywisdom',10;db artinya define byte di mana var tes diisi string mywisdom
section .text global _start
_start: mov edx,8 ;panjang string mywisdom mov ecx,tes ; ecx diisi data tadi mov ebx, 1 ; ebx diisi 1 syarat sycall no 4 mov eax, 4 ; mo mangil syscall no 4 yaitu write int 80h ;interup 80 hexa utk eksekusi syscall
mov ebx,0 mov eax,1 ; int 80h ;keluar program
untuk lebih jelasnya ini gw sengaja upload daftar table syscall bisa diliat di sini:
ok template utk eksekusi shellcode yg kali ini akan kita pakai adl: #include <stdio.h> int main() { char shellcode[]="bagian yang diapit ini akan kita sisipkan shellcode kita"; (*(void (*)()) shellcode)(); }
di mana bagian yang ada tulisan: "bagian yang diapit ini akan kita sisipkan shellcode kita" tadi akan kita sisipkan shellcode hasil konvert sehingga menjadi shellc0de kita di bawah ini: