*请教仿WPE模拟封包发送的实现方法*

qq544464298 2011-05-16 11:50:23
这个问题从去年到今年一直困扰着我. 期间也查过一次资料,请教过一些CSDN上的朋友. 可惜还是没弄明白,也许是我太菜了.

希望懂的朋友,不吝赐教,和我一样想弄懂的朋友,大家探讨探讨.

由于水平有限,不会逆向WPE进行分析,只能用一些笨办法去猜想,但始终没有成功.

WPE在拦截目标进程和服务端交流的封包数据后,只要SOCKET没有断开连接,就可以重复的模拟发送封包.不管是Send或是Recv都可以模拟. 本人比较菜,对TCP/IP协议的底层运作也是一知半解的. 大脑里只知道想模拟Send,只需要获取到SOCKET句柄,然后自己执

行Send函数就可以了,但是Recv的模拟一直困扰着我.
...全文
773 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jewelry_s 2011-05-21
  • 打赏
  • 举报
回复
用raw socket发送TCP包.
qq544464298 2011-05-18
  • 打赏
  • 举报
回复
你这样说是模拟Client发送给Server的包吧.
xiaopoy 2011-05-18
  • 打赏
  • 举报
回复
/:^)
哈哈,已经拦截到了socket的句柄,当然可以send过去了啊
简单的实现,用getnameinfo得到socket使用的IP和端口,然后在自己的程序里send过去。
xiaopoy 2011-05-18
  • 打赏
  • 举报
回复
我想了一下。
TCP协议的话,简单的方法有二个方向:
1. 用winpcap从驱动级模拟封包到达网卡的情况,根据截取到的client的socket句柄中的IP和端口,直接让网卡得到这IP和端口的封包。
2. hook目标client的recv函数。在入口的地方进行处理,当需要给这个给这个client发包的时候,在recv开头的处理里判断到是对应的socket句柄,于是不进入原始recv流程直接返回,但缓冲区和返回值里填写成自己的数据。当然能维护一份自己的真正recv得到的数据最好,可以直接在这份数据里插入到对应的位置,再在客户端需要recv的时候从自己的缓冲区里返回给客户端。

UDP就直接根据截取到的socket句柄,获得了IP和端口后,在自己的程序里创建了socket send给它。不过recvfrom,还有程序判断peer Ip和端口的时候,UDP就也得和TCP一样的处理。
qq544464298 2011-05-17
  • 打赏
  • 举报
回复
目标程序是本地的Client,没有绑定监听端口, 好像没办法这样send给它. :)
xiaopoy 2011-05-17
  • 打赏
  • 举报
回复
想要目标程序recv到什么东西,就设置好IP和端口然后send一个给它啊。 /:^]!

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧