recv

某网络监视器完整逆向

自作多情 提交于 2019-12-01 19:26:48
✎引子:   早些时候想去研究 Windows Filter Platform (WFP) ,参考资料少且不齐全。贴吧、论坛搜集一些关于网络过滤、网络监听的工具。开始琢磨别人是怎样写,怎样实现的。然而没有去研究驱动层(很多原理性的东西需要时间),自己写用户层前一直琢磨,三环如何去实现这些网络监听?用什么API可以实现对数据包的捕获呢?怎样把这些数据进行处理?   当我看到其中的项目的时候,单纯的.exe文件,运行后也没有释放dll之类的动态资源, 脑海中出现一个念头shellCode (这里就先叫shellCode了,其实准确说是机器码)。这个程序是好多年前的,比较单一,注入任意进程,捕获网络响应数据,兼容性也还不错,用360浏览器做测试,windows7~windwos10网络响应捕获正常。  这是给大家提供 一些逆向的思路 ,并不是教程系列,有一定逆向基础才可以(对汇编、网络编程、OD等工具了解)。当遇到类似的程序或者问题,对他们的实现原理做到心中有度。 如下图所示:                    图片一:网络监控exe ✎逆向分析目录: 1、注入代码分析 2、shellCode调试方法 3、shellCode动态分析 --------★ ★ ★------- -----------------★ ★ ★------------------- -----------★

Tcp数据传输server/client

点点圈 提交于 2019-12-01 19:19:32
server主要的步骤: 1、创建套接字-->2、绑定服务器的信息—>3、默认的套接字由主动变为被动 listen-->4、等待客户端的链接 # 如果recv解堵塞,那么有2种方式:# 1. 客户端发送过来数据# 2. 客户端调用close导致而了 这里 recv解堵塞 def main(): # 1. 买个手机(创建套接字 socket) tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 插入手机卡(绑定本地信息 bind) tcp_server_socket.bind(("", 7890)) # 3. 将手机设置为正常的 响铃模式(让默认的套接字由主动变为被动 listen) tcp_server_socket.listen(128) # 循环目的:调用多次accept,从而为多个客户端服务 while True: print("等待一个新的客户端的到来...") # 4. 等待别人的电话到来(等待客户端的链接 accept) new_client_socket, client_addr = tcp_server_socket.accept() print("一个新的客户端已经到来%s" % str(client_addr)) # 循环目的: 为同一个客户端 服务多次 while

day 26小结

 ̄綄美尐妖づ 提交于 2019-12-01 17:23:32
软件开发架构 ​ 软件开发架构,必须要开发一套客户端与服务端 客户端与服务端的作用 ​ 服务端: 24小时不间断提供服务 ​ 客户端: 如果想要找服务,就去寻找服务并享受 软件开发架构分为两种: C/S架构: ​ Client: 客户端 ​ Server: 服务端 ​ 优点: 软件的使用稳定,并且可以节省网络资源 ​ 缺点: 1. 若用户想在同一个设备上使用多个软件,必须下载多个客户端 ​ 2. 软件的每一次更新,客户端也必须更新下载 C/S架构的软件: ​ 例如: 电脑上的QQ,Pycharm等...手机端(移动端)微信,王者 B/S架构: ​ Browser: 浏览器(客户端) ​ Server: 服务端 ​ 优点: 以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本,直接在浏览器上访问使用的软件 ​ 缺点: 消耗网络资源过大,当网络不稳定时,软件的使用也会不稳定 B/S架构的软件: ​ 例如: 在浏览器(客户端)输入某个软件的域名( http://xxxxxx.com/ ) 网络编程 ​ -- 网络编程发展历史 ​ 所有先进的计数都源自于军事,希望通过远程获取数据,所以出现了"网络编程" ​ 早期如何实现远程通信: -- 打电话---> 电话线 ​ -- 纯平电脑 --> 网线,有线网卡 ​ -- 笔记本电脑 --> 无线网卡 ​ 要实现远程通信必须具备:

开发架构+osi七层协议+socket(day26)

痞子三分冷 提交于 2019-12-01 17:13:34
目录 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议/OSI七层协议 传输层 网络层 数据链路层 物理连接层 socket 什么是socket 为什么用socket 如何使用 软件开发架构 客户端+服务端 服务端:24小时提供服务 客户端:寻找服务 C/S架构 Client:客户端 server:服务端 优点:软件的使用稳定,可以节省网络资源 缺点: 若用户想在同一个设备上使用多个软件,必须下载多个客户端 软件的每一次更新,客户端也必须重新下载更新 C/S架构的软件 例如:电脑上的QQ,pycharm,手机端的微信,王者荣耀等 B/S架构 Browser:浏览器(客户端) Server:服务器 优点 以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本,直接在浏览器访问需要使用的软件 缺点 消耗网络资源过大,当网络不稳定时,软件使用也会不稳定 B/S架构的软件 例如在浏览器上输入某个域名的地址 网络编程、并发编程、数据库开发可以开发C/S架构的软件(仿优酷系统) 前端html、css、js、web框架(网络编程、并发编程)可以开发B/S架构的软件(BBS系统) 网络编程 要实现远程通信必须具备: 物理连接介质:比如网卡 互联网协议:计算机沟通的介质,就好比人类交流的语言 互联网协议/OSI七层协议 互联网协议又称为网络七层协议/OSI七层协议

网络编程 基础一

倾然丶 夕夏残阳落幕 提交于 2019-12-01 16:20:50
1.软件开发架构: 开发软件,必须要开发一套 客户端 与 服务端。 ​ 客户端与服务端的作用: ​ 服务端: 24小时不间断提供服务 ​ 客户端: 如果想要找服务,就去寻找服务并享受 软件开发架构分为两种: C/S架构: Client:客户端 Server:服务端 优点: 软件使用稳定,并且可以节省网络资源。 缺点: 1、用户若想在同一个设备上用多个软件,必须下载多个客户端 2、软件每次更新,客户端也必须更新 C/S架构的软件: 电脑QQ、Pycharm、手机端的微信、王者荣耀等 B/S架构: Browser:浏览器 Server:服务端 优点: 以浏览器充当客户端,无需下载多个软件,也无需用户下载更新软件版本 直接在浏览器上访问需要使用的软件 缺点: 消耗网络资源过大,当网络不稳时,软件的使用也会不稳定 B/S架构的软件: 在浏览器上输入某软件的域名 2、网络编程 网络编程发展历史: 所有先进的技术都源自于军事,希望通过远程获取数据,所以有了网络编程 早期如何实现远程通信: - 打电话-->电话线 - 纯平电脑 --> 网线,有线网卡 - 笔记本电脑 --> 有线网卡,无线网卡 要实现远程通信必须具备: 1、物理连接介质 --> 网卡 2、互联网协议 - 人与人之间沟通的介质:中文、英文 - 计算机之间沟通的介质:‘互联网协议’ 3、互联网协议 互联网协议又称之为网络七层协议

C++ Functions According to TCP

半腔热情 提交于 2019-12-01 14:32:46
I'm using recv function (C++) in order to get indication about network problem (it return negative value in this case) Looking here: http://tools.ietf.org/html/rfc1122#page-100 at TCP Connection Failures, I see that there are R1 and R2. R1 is when TCP informs application that there is a problem. R2 is when the connection is closed. “The value of R1 SHOULD correspond to at least 3 retransmissions, at the current RTO. The value of R2 SHOULD correspond to at least 100 seconds.” RTO (Retransmission Timeout) typically starts at 3 seconds, so for R1, it might be after about 10 seconds. as far as I

python_网络编程socket

不羁的心 提交于 2019-12-01 13:40:21
服务端: import socket sk = socket.socket() #创建对象 sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #避免服务器重启时报address already in use错误 sk.bind(('127.0.0.1',8877)) #把地址绑定到套接字(ip地址,端口号) sk.listen() #监听链接 conn,addr = sk.accept() #接受客户端链接 ret = conn.recv(1024) #接受客服端信息(数据长度) print(ret) #打印客户端信息 conn.send(b'hi') #向客户端发送星系(必须是bytes类型) conn.close() #关闭客户端连接 sk.close() #关闭服务器套接字 客户端: import socket sk = socket.socket() #创建对象 sk.connect(('127.0.0.1',8877)) #连接服务器(ip地址,端口号) sk.send(b'hello') #向服务器发送信息(必须是bytes类型) ret = sk.recv(1024) #接收信息(数据大小) print(ret) #打印信息 sk.close() #关闭对象   有收必有发,收发必相等

Read ICMP payload from a recvmsg with MSG_ERRQUEUE flag

懵懂的女人 提交于 2019-12-01 12:36:10
问题 I'm using BSD sockets to build an advanced traceroute program that doesn't need root privileges (like tracepath). Using UDP and a bound socket, I call: recvmsg(socket, header, MSG_ERRQUEUE) I receive info about the supposed ICMP notification that a previously sent packet has triggered. Do you know if it's possible to access the ICMP payload (which should be the previously-sent packet)? I read from recvmsg man page: [..] The payload of the original packet that caused the error is passed as

C++ Functions According to TCP

半城伤御伤魂 提交于 2019-12-01 12:14:46
问题 I'm using recv function (C++) in order to get indication about network problem (it return negative value in this case) Looking here: http://tools.ietf.org/html/rfc1122#page-100 at TCP Connection Failures, I see that there are R1 and R2. R1 is when TCP informs application that there is a problem. R2 is when the connection is closed. “The value of R1 SHOULD correspond to at least 3 retransmissions, at the current RTO. The value of R2 SHOULD correspond to at least 100 seconds.” RTO

Linux网络编程三、 IO操作

人盡茶涼 提交于 2019-12-01 07:13:32
  当从一个文件描述符进行读写操作时,accept、read、write这些函数会阻塞I/O。在这种会阻塞I/O的操作好处是不会占用cpu宝贵的时间片,但是如果需要对多个描述符操作时,阻塞会使同一时刻只能处理一个操作,从而使程序的执行效率大大降低。一种解决办法是使用多线程或多进程操作,但是这浪费大量的资源。另一种解决办法是采用非阻塞、忙轮询,这种办法提高了程序的执行效率,缺点是需要占用更多的cpu和系统资源。所以,最终的解决办法是采用IO多路转接技术。   IO多路转接是先构造一个关于文件描述符的列表,将要监听的描述符添加到这个列表中。然后调用一个阻塞函数用来监听这个表中的文件描述符,直到这个表中有描述符要进行IO操作时,这个函数返回给进程有哪些描述符要进行操作。从而使一个进程能完成对多个描述符的操作。而函数对描述符的检测操作都是由系统内核完成的。   linux下常用的IO转接技术有:select、poll和epoll。 select:   头文件:#include <sys/select.h>、#include <sys/time.h>、#include <sys/types.h>、#include <unistd.h>   函数:     int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set