如题,具体要求如下:
1、不使用“网卡混乱模式”,而是使用HOOK或者底层硬件驱动,截取指定进程的封包(包括进和出)当然如果使用底层驱动模式请提供封包过滤代码,以实现截取指定进程封包功能
2、提供伪封包发送功能
3、提供原封包内容显示,最好是BYTE和HEX对应,但至少应该有其中一个
4、有较为完整的注释内容,中英皆可,俄语也将就,其他语种就免了
5、以较为常见的网络应用程序为示例,例如联众游戏,QQ等,当然了,最好提供一个函数进行设置具体截获的进程
6、这个能否提供吃掉原封包的方法呢
测试通过给分,代码可以发到 [email protected]
发送后请在帖子里留言,我看到后会立即测试,通过即结贴给分
1、不使用“网卡混乱模式”,而是使用HOOK或者底层硬件驱动,截取指定进程的封包(包括进和出)当然如果使用底层驱动模式请提供封包过滤代码,以实现截取指定进程封包功能
2、提供伪封包发送功能
3、提供原封包内容显示,最好是BYTE和HEX对应,但至少应该有其中一个
4、有较为完整的注释内容,中英皆可,俄语也将就,其他语种就免了
5、以较为常见的网络应用程序为示例,例如联众游戏,QQ等,当然了,最好提供一个函数进行设置具体截获的进程
6、这个能否提供吃掉原封包的方法呢
测试通过给分,代码可以发到 [email protected]
发送后请在帖子里留言,我看到后会立即测试,通过即结贴给分
象你所描述的,修改接收或发送的封包当然最好,最基本的功能是截获指定进程的封包,然后我要对他们进行分析,如果能修改那就省了好多事了。我想这个做起来和HOOK消息差不很远了,使用DLL注入应该比底层实现来得容易,而且在VB中也可以用较少的代码实现控制。
http://www.studentblog.net/m/dijk/archives/2006/16936.shtml
http://dev.csdn.net/develop/article/22/22765.shtm应用层截包方案与实现
http://www.easyde.net/article/238/242/2006/2006060830651.html
楼主自己去找找吧。转帖:
伪造IP包,禁止TCP连接
大家是否想过在局域网内如何禁止别人访问web server,pop3,ftp等。那么如何禁止呢?大家都知道TCP是面向连接的,连接时有三次握手,之后才能确认连接成功。那么我们就应该能在第一次握手之后伪造一个服务方的握手返回,从而达到TCP连接不成功,无法访问某端口。程序如下:
void DeCodeIP(buf,iBufSize) //解析侦听到的IP数据包
{
IPHEADER * pIPhdr;
TCPHEADER * pTCPhdr;
pIPhdr=(IPHEADER * )buf;
//获得TCP header的起始位置
int iIphLen = sizeof(unsigned long) * (pIPhdr->h_lenver & 0xf);
pTCPhdr = (TCPHEADER* )(buf+iIphLen);
//判断是否为第一次握手IP数据包,pIPhdr->th_flag=2 即("-s----")
if (iBufSize==48) && (pIPhdr->iProtocol==IPPROTO_TCP) && (pIPhdr->th_flag==2)
sendTCP_SYNACK(szDestIP,szSourceIP,pTCPhdr->destPort,pTCPhdr->srcPort,pTCPhdr->seq);
}
void sendTCP_SYNACK(char * szSrcIP, char * szDestIP,unsigned short srcPort,unsigned short destPort,unsigned int iAck)
{
int iErrorCode;
SOCKET s;
IP_HEADER ip_header;
TCP_HEADER tcp_header;
PSD_HEADER psd_header;
struct sockaddr_in remote;
char * ptr=NULL;
//创建socket
s=socket(AF_INET, SOCK_RAW, IPPROTO_IP);
if (CheckSockError(s, "socket-tcp"))
return FALSE;
BOOL bOpt = TRUE;
iErrorCode = setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt, sizeof(bOpt));
if (CheckSockError(iErrorCode, "setsockopt-TCP"))
{
closesocket(s);
return FALSE;
}
//---end­
//伪装连接
unsigned short iTotalSize=44;
unsigned short iTCPSize=24;
char *sendBuf=new char[iTotalSize];
ip_header.h_lenver=(4<<4 | sizeof(ip_header)/sizeof(unsigned long));
//高四位版本号,低四位首部长度
ip_header.total_len=htons(iTotalSize); //16位总长度
ip_header.tos=0;
ip_header.ident=htons(17393); //16??±êê?
ip_header.frag_and_flags=0; //3??±ê????,13??offset
ip_header.ttl=57; //8??éú′?ê±??TTL
ip_header.proto=IPPROTO_TCP; //8??D­òé(TCP,UDP?­)
ip_header.checksum=0; //16位校验和
ip_header.sourceIP=inet_addr(szSrcIP); //32位远地址·
ip_header.destIP=inet_addr(szDestIP); //32位目的地址·
ip_header.checksum=checksum((USHORT *)&ip_header,20);
//填充TCP首部
tcp_header.th_sport=htons(srcPort); //源端口
tcp_header.th_dport=htons(destPort); //目的端口
tcp_header.th_seq=htonl(0x581A784D); //SYN序列号
tcp_header.th_ack=htonl(iAck+1); //应答序号
tcp_header.th_lenres=(iTCPSize/sizeof(unsigned long)<<4|0); //TCP长度和保留位
tcp_header.th_flag=0x12; //SYN 标志
tcp_header.th_win=htons(65535); //窗口大小
tcp_header.th_urp=0; //紧急指针
tcp_header.th_sum=0; //校验和
//填充TCP伪首部(只用于生成校验和)
psd_header.saddr=ip_header.sourceIP;
psd_header.daddr=ip_header.destIP;
psd_header.mbz=0;
psd_header.ptcl=IPPROTO_TCP;
psd_header.tcpl=htons(iTCPSize);
ZeroMemory(sendBuf,iTotalSize);
//计算tcp校验和,包含伪TCP header
memcpy(sendBuf,&psd_header,sizeof(psd_header));
ptr=sendBuf+sizeof(psd_header);
memcpy(ptr,&tcp_header,sizeof(tcp_header));
ptr=sendBuf+sizeof(psd_header)+sizeof(tcp_header);
*ptr=(char)0x02;*(ptr+1)=(char)0x04;*(ptr+2)=(char)0x05;*(ptr+3)=(char)0xb4;
tcp_header.th_sum=checksum((USHORT *)sendBuf,sizeof(psd_header)+24);
ZeroMemory(sendBuf,iTotalSize);
//填充发送缓冲区
memcpy(sendBuf,&ip_header,sizeof(ip_header));
ptr=sendBuf+sizeof(ip_header);
memcpy(ptr,&tcp_header,sizeof(tcp_header));
ptr=sendBuf+sizeof(ip_header)+sizeof(tcp_header);
*ptr=(char)0x02;*(ptr+1)=(char)0x04;*(ptr+2)=(char)0x05;*(ptr+3)=(char)0xb4;
remote.sin_family = AF_INET;
remote.sin_port = htons(destPort);
remote.sin_addr.s_addr = inet_addr(szDestIP);
iErrorCode = sendto(s, sendBuf, iTotalSize, 0, (SOCKADDR *)&remote, sizeof(remote));
CheckSockError(iErrorCode, "SYNACK sendto");
//伪装关闭连接
iTotalSize=40;
iTCPSize=20;
// end--------
closesocket(s);
delete[] sendBuf;
return TRUE;
}
可以下载到winpcap开发文档。http://blog.csdn.net/jyu1221
使用VB在WIN2000下截获IP数据包
使用VB截获WIN98系列下的IP数据包
拦截其它程序的网络数据封包
http://dev.csdn.net/develop/article/22/22765.shtm
这个文章我已经看过好多次了,手头没有DELPHI,所以没试,其实DELPHI也学过一些,早在软件公司上班的时候学过几个月,代码比较容易懂,但是由于没有编译工具没办法测试这个东东,再翻翻以前的光盘看看,如果能找到就编译这个DLL,测试通过就结了
这个代码http://blog.csdn.net/jyu1221
我机器上就有,测试的时候会停止响应,没有任何输出,不知道问题出现在哪了,我再去看看,另外我还有一个网卡混乱模式的代码,似乎只能截取到一些内网通讯包。没仔细看,我再测试一下http://blog.csdn.net/jyu1221里面的代码,看看和我机器上的是不是有什么不同
是最符合我的需要的,哪位有DELPHI编译一下给我发过来也好,谢谢
[email protected]
还是联系了一下http://dev.csdn.net/develop/article/22/22765.shtm的作者。。看是否能给出封包处理部分。。另外那个混乱模式的我也测试了,可以取到更多封包,需要修改地址,和上面一样,但是无法收到我所要的封包,不知道为什么。。
我看过很多vb截包的程序,还有C++的,自己写的没几个稳定的
还是去求HOOK吧
该死的网络程序不断的改变端口,愁死了,看了看网上关于进程与端口对应的文章,我直接疯掉了,他们说的API在各种VB资料里都没有声明,我是在自己写的任务管理器里面实现了PID对应端口,可是实现的很麻烦,而且连接的端口如果非常多,将慢很多,想讨教其他方法。WINPCAP的控件我用的时候没有使用混乱模式,而是使用的All Multicast模式,获取的封包用端口来区分的时候发现端口一直在变,疯了,而IP和MAC地址由于服务器很多,所以也不好逐个设定,所以给我区分造成了很大的麻烦。难于实现啊,虽然可以,但是太太太麻烦了,而且方法太土了,哈哈。所以还是怀念曾经看到的HOOK啊,真是好东西,不然去学学DELPHI。哎,痛苦中啊,大家继续帮帮忙啊
现在的问题先不讨论HOOK,那个HOOK程序我找朋友改一下好了现在就讨论讨论怎么用API把进程和端口对应起来吧~不用API的土办法我是实现了,不过很差劲的,大家来解决解决API的方法吧~~~不用API实现是这样的,取进程PID(这个都会啦)
使用TETSTAT -AO命令列表会得到PID对应端口
从而把进程和端口对应起来,但是我是把TETSTAT -AO的结果输出到文本文件然后再处理,前些帖子里面有人说用管道操作,没做过,大家能不能也给点指点啊
数据头:1 0 1 0 0 0 50 79 20 0 1 0 8 0 45 0 0
内容:3C 69 36 0 0 76 6 B5 18 DB 9C 7B F7 DE 86 F0 52 B D2 D E3 17 6B 60 27 66 B
内容:3C 20 14 0 0 76 6 FE 3A DB 9C 7B F7 DE 86 F0 52 B D2 D E3 17 6B 60 7F 66 B 3B F9 50 18 42 FC FB 4A 0 0 5 60 2 0 C 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0
内容:3C 3C F2 0 0 76 6 E1 5C DB 9C 7B F7 DE 86 F0 52 B D2 D E3 17 6B 60 93 66 B 3B F9 50 18 42 FC FE 36 0 0 5 60 2 0 C 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
内容:3C 87 47 0 0 76 6 97 7 DB 9C 7B F7 DE 86 F0 52 B D2 D E3 17 6B 60 A7 66 B 3B F9 50 18 42 FC FC 22 0 0 5 60 2 0 C 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0
内容:44 A4 EA 0 0 76 6 79 5C DB 9C 7B F7 DE 86 F0 52 B D2 D E3 17 6B 60 BB 66 B 3B F9 50 18 42 FC 51 6 0 0 5 60 2 0 14 0 0 0 2 0 0 0 3 0 0 0 2 0 0 0 2D 0 0 0 72 0 0 0 谁有封包分析的经验啊,回头去看API的那个了里面倒有封包分析。。头疼啊
还有没有更好的啊,,,,,
没太多要求了,谁能发一个能截获指定进程封包并显示出来的代码就给分了。。嘎嘎,HOOK最好啊
好东西啊,,,,,可惜VB调用不了呢,呵呵
着作者真是的,写代码居然不缩进,代码难看死了!其实他最关键就是
BOOL init()
函数
你看到他下面那些汇编了吗?_asm
{
lea eax,Mysend
mov ebx,pfsend
sub eax,ebx
sub eax,5
mov dword ptr [newsend+1],eax
}类似上面的
他其实先
hModule=LoadLibrary("wsock32.dll");
pfsend=GetProcAddress(hModule,"send");着两句先找到wsock32.dll(这个是干什么的不用我说了吧....)的send函数在内存里面的地址
然后用汇编做手脚
让执行send函数前先执行Mysend
提取出发送的内容
原理大概就这样至于怎么调用.....我再研究一下
他那个东西怎么用的,我用它hook我的IE,怎么什么也截不到,倒是挂了我IE好几次....
初始化的时候应该加入:
form0=null:
结束的时候也是
还有就是MYRECV函数也要这个判断,就可以了(是我看帖子里面别人说的,呵呵)他的程序可以HOOK,先点挂钩,然后进一个网络程序,然后按小键盘上的*就看见窗口了,再点开始就看见数据交换了VirtualDesktop(吴滂) 兄改好的代码可以发到我信箱吗?我不会用BCB,呵呵,只是下了一个安上然后打开原作的工程看了看代码,不知道什么东西放什么地方,发到我信箱吧:)
谢谢!!
E-MAIL:[email protected]
aspower_(论坛开通可用分捐赠!欢迎捐赠我以助csdn测试谢谢^_^)
自己要吧,呵呵,要不VirtualDesktop(吴滂) 兄写完发给我我发给你也行!看了前几天雪貂同志的代码了吗?MSGHOOK的那个,你试没试挂系统的时候会怎么样?
问题如果解决了马上结贴!
这个代码我看了2天了,呵呵,自己确实改不了,只是看了点端倪,因为没学过CB所以没办法了,自己改了一些,就编译不了了,哈哈。。我在CB版块写的要求就是根据我的分析写的,如果你改好了,测试通过,CB版块承诺的500分也一样在这里给你加,那边就把分散掉结帖了。
"他的程序可以HOOK,先点挂钩,然后进一个网络程序"
"进一个网络程序"什么意思?我进IE行么?
我详细说一下我弄的过程:
1、打开他的EXE文件,点“开始挂钩”
2、然后我进了联众大厅,进入保皇游戏(旁观或者打都行啦)
3、在保皇界面上按下NUM *
4、在弹出的界面上按下“开始”
就看见他的程序里面显示出取得的信息包内容了
http://www.gameres.com/hack/showthread.asp?threadid=6771
要求贴:
http://community.csdn.net/Expert/topic/4893/4893953.xml?temp=.8214685
那个exe我会用了
但是改不成.......................我都不知道怎么的,就是取不出那个Memo的内容...
死了...死了...这次...下了海口...结果做不出来.........
要不我捐分给你到C++版问问吧~~~
还是麻烦你!我已经联系好给分的人了,解决马上给,这个帖子的分散一部分,因为毕竟大家都出力了,等你改好了,我就开N个帖子给你加500分,我回头再看看我上面说给分没有,一概给你加上:)然后我去把CB区里的分一散,就OK了~~~~~
不用着急,你可以慢慢研究,我不着急的,因为不是给别人做工程,就是凭自己的爱好,业余么,就是有这点好处,已经快12点了,你早睡吧!!(虽然我知道程序员都熬,连我这个爱好者都熬,但是早睡明天才有精力!)
[Linker Error] Could not create G:\程序\sf_2004428951\green\main\hook.tds (error code 3)这是为什么啊,我看了看改过的代码。5555555555没有输出接口啊,即使便宜了也没办法在VB里面调用啊。VirtualDesktop(吴滂) 兄再努力努力麻~~~~~~~~~~~
因为它那个出内容的函数是用汇编跳转执行的,我怎么都弄不出个返回值来(明明是赋值了,调用的时候居然说没有).............这种东西最好还是不要用vb做...
我再给你发个能用的
继续看看吧,那个改了的加了4个函数,还有一些功能,使用方法和前面我说的相同,看看对你有帮助么,继续帮我做做吧!!
VirtualDesktop(吴滂)兄
不知道你改的怎么样了。
我联系了原帖49楼的兄,讨论了一点,他说是可以实现的,可是他现在有事走了,呵呵,我还在等,说了一下汇编跳转,他说和数据封包那里没什么关系,只是一个INSHOOK,刚说改成带参数的,他就有事走了,哎,我没描述清楚怎么回事。。
数据模型如下:
TYPE MDT
A AS LONG 'VB已经读到的编号
B AS STRING '数据的由来,是SEND还是什么
C() AS BYTE '数据
END TYPE
DIM M(4) AS MDT
把数据装入M中,而后根据VB已经读到的数据编号来返回。
这样可以实现了,但还是本末倒置的,呵呵...非常麻烦我先把这个帖子结了,再去开一个,登陆注销登陆注销的真的很烦。
M(0)=M(1)
M(1)=M(2)
…………
感觉最后的结果就是在DLL中放一个仓库,哈哈但仅仅是防止VB读的时候丢包。类似个先进先出的堆栈