随笔分类 - 二阶段
day5 - udp模拟tcp
摘要: udp模仿tcp类似于socket实现tcp的功能(单方向),比如三次握手,四次挥手,超时重传快速重传等等。 模拟TCP的功能 三次握手 四次挥手 发送端要带有计时器,要实现RTT估计和RTO(重传计时器)估计。RTT如下 SampleRTT某报文段被发出到对该报文段的确认被收到之间的时间量 E
阅读全文
day4 - udp和tcp的区别
摘要:序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序
阅读全文
day3 – 心跳包和TCP
摘要:心跳包的实现思路: 客户端连接上服务端后,在服务端会维护一个在线客户端列表。客户端每隔一段时间,向服务端发送一个心跳包,服务端受收到包以后,会更新客户端最近一次在线时间。一旦服务端超过规定时间没有接收到客户端发来的包,则视为掉线。 代码: 客户端每隔一段时间,发送一个心跳包: var timer =
阅读全文
day2 – udp聊天室
摘要:UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机
阅读全文
day1 – upd
摘要:1. 什么是TCP/IP、UDP? \2. Socket在哪里呢? \3. Socket是什么呢? \4. 你会使用它们吗? 什么是TCP/IP**、UDP****?** TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议
阅读全文
day13 – 钩子和服务
摘要:远程线程注入dll卸载 FreeLibraryAndExitThread 将已加载的动态链接库(DLL)的引用计数减一,然后调用 ExitThread终止调用线程。该函数不返回。 void FreeLibraryAndExitThread( HMODULE hLibModule, DWORD dwE
阅读全文
day12 – 补课
摘要:MFC DLL 规则DLL 规则DLL也叫常规DLL - 导出的接口是标准的,可以给SDK,MFC使用 共享规则DLL 在DLL里任何使用MFC函数的第一行代码都需要加入如下代码: // 切换资源的模块句柄 AFX_MANAGE_STATE(AfxGetStaticModuleState()); 静
阅读全文
day11 – c线程和mfc线程
摘要:1 为什么要使用ini或者其它(例如xml,json)配置文件? 如果我们程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序发布后还能根据需要进行必要的配置;配置文件有很多如INI配置文件,XML配置文件,
阅读全文
day10 – 远程线程注入
摘要:CreateRemoteThread VirtualAllocEX 做的这个例子首先是创建了一个MFC 对话框程序,然后自己创建了一个 带有导出函数 (简单的减法) 的DLL , 这个Calc按键就是调用自己DLL里面的减法函数 计算1 – 1, 其次创建一个拥有能够修改进程中某函数的入口代码功能的
阅读全文
day9 – 同步
摘要:windows支持4种类型的同步对象,可以用来同步由并发运行的线程所执行的操作: 临界区 互斥量 事件 信号量 MFC在名为CCriticalSection、CMutex、CEvent和CSemaphore的类中封装了这些对象。下面分别对这些同步对象进行介绍。 临界区 最简单类型的线程同步对象就是临
阅读全文
day8 – 线程的创建和退出
摘要:概念区分 程序 – 磁盘上的可执行文件 进程 – 程序执行代码所需资源的集合, 不活泼的,懒惰的 线程 – 程序执行代码的最小单位, 活泼的,勤奋的 线程的运行(调度)原理 cpu时间切片 线程的创建 createThread ExitThread 第一种AfxBeginThread() 用AfxB
阅读全文
day7 – 补课
摘要:以下简单的控制台应用程序获取正在运行的进程列表。首先,该GetProcessList函数使用CreateToolhelp32Snapshot获取系统中当前正在执行的进程的快照,然后使用Process32First和Process32Next遍历快照中记录的列表。为依次在每个过程中,GetProces
阅读全文
day6 – 管道和进程遍历
摘要:createpipe 创建一个匿名管道,并将句柄返回到该管道的读取和写入端。 BOOL CreatePipe( PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize );
阅读全文
day5 – 进程间通信
摘要:进程间通信 WM_COPYDATA 数据流向是单向的,不推荐携带大量数据。效率低下,因为他需要通过高2g物理内存进行两次拷贝。 SendMessage(hwnd,WM_COPYDATA,wParam,lParam); 其中,WM_COPYDATA对应的十六进制数为0x004A wParam设置为包含
阅读全文
day4 – 跨进程使用句柄和进程间操作内存
摘要:openprocess getwindowthreadprocessid findwindow getcurrentprocess 0xffffffff 伪句柄 duplicatehandle writeprocessmemery virtualprotectex 内存分页 跨进程使用句柄 获取进程
阅读全文
day3 – 进程的创建和退出
摘要:创建进程 •Winexec UINT WinExec( LPCSTR lpCmdLine, UINT uCmdShow ); lpCmdLine 要执行的应用程序的命令行(文件名加上可选参数)。如果lpCmdLine参数中的可执行文件名称不包含目录路径,则系统按以下顺序搜索可执行文件: 1.应用程序
阅读全文
day2 – def导出,dllmain和dll劫持
摘要:模块定义 (.def) 文件是包含一个或多个描述 DLL 各种属性的 Module 语句的文本文件。如果不使用 __declspec(dllexport) 关键字导出 DLL 的函数,则 DLL 需要 .def 文件。 .def 文件必须至少包含下列模块定义语句: 文件中的第一个语句必须是 LIBR
阅读全文
day1 – 静态库和动态库
摘要:静态库 使用功能但是不提供源码的方式一:提供头文件和obj文件 obj文件的使用方式: 1) 直接拖到VS工程 2) 在 链接器->输入->附加依赖项 中添加 使用obj,同时兼容c和c++的做法 #ifdef __cplusplus extern "C" { #endif int Add(int
阅读全文
day13 – 补课
摘要:概要: 对话框: App – 负责整个程序的初始化,包括对话框的创建,InitInstance Dialog – 对话框 单文档: App – 负责整个程序的初始化,包括主窗口的创建,doc的创建,InitInstance MainFrame – 负责非客户区(菜单,状态栏,工具栏,快捷键, 视
阅读全文
day12 – 滚动截图
摘要:CPoint ptWnd; GetCursorPos(&ptWnd); CWnd* pWnd = WindowFromPoint(ptWnd); pWnd->SetForegroundWindow(); CDC* pDc = pWnd->GetDC(); int nBpp = pDc->GetDev
阅读全文