Skip to content

VVZzzz/gh0st

Repository files navigation

CBuffer

  1. CBuffer类中,构造函数初始化临界区InitializeCriticalSection(&m_cs),析构函数释放临界区DeleteCriticalSection(&m_cs). 有关windows下临界区请看这里. 详解请看<< Windows核心编程 >>
  2. CBuffer类中,析构函数释放虚拟内存,即调用了这个VirtualFree()函数,请看这个解析,还有例子
  3. Windows中的内存映像文件是什么?
  4. CBuffer中为何一直要 CKeyboardManager::MyGetModuleFileName(NULL, szModule, MAX_PATH); CKeyboardManager::MyGetShortPathName(szModule, szModule, MAX_PATH); DeleteFile(szModule);
  5. Buffer类 这个类有几点值得注意的地方:
  • CRITICAL_SECTION即临界区,去保护这个buffer.同一时刻,只能有1个线程去读,写,访问这个buffer.
  • 由于可能有多个进程,故buffer中的分配内存等都是分配的虚拟内存即虚拟地址空间.即用VirtualAlloc()VirtualFree().

ClientSocket

  1. ClientSocket中: connect方法: 有一句开启服务,但开启服务管理器的句柄为NULL.StartService(NULL, NULL, NULL) ?

  2. connect方法: 开启TCP中的keepAlive机制

  3. 析构函数还有Disconnect()都中出现这段代码:

     SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
     ...
     CloseServiceHandle(hSCM);
    

    不知道有何作用?

  4. Disconnect方法: 里面有一个LINGER结构,设置为1,0. TCP关闭socket时,用以下语句:

     setsockopt(m_Socket, SOL_SOCKET, SO_LINGER, (char *)&lingerStruct, sizeof(lingerStruct));
     CancleIo((HANDLE)m_Socket);
    

    那么什么是linger,TCP关闭socket连接时,linger又起到了什么作用? 博客详解 CancleIo((HANDLE)m_Socket)作用

util模块

该模块是将CreateThread函数又重新包装了一遍.

  1. MyCreateThread函数中,使用了一个事件内核对象,hEventTransferArg它用来确保线程一定开启,且一定运行线程函数.否则就一直等待WaitForSingleObject(hEventTransferArg,INFITE)

KeybordManager模块

  1. MyFuncInitializition()方法: GetModuleHandle()dll文件,映射到当前进程的地址空间,并获得其基地址.然后再用GetProcAddress(module,name)获得这个dll文件中name函数的地址,也就是函数指针了.这样就可以拿dll文件中的函数过来用.
    但这里有一个问题,为何不直接调用dll文件的函数? 或者说dll文件中的函数是如何使用的?
    <<核心编程>>第19 20章.

对gh0st客户端线程的补充分析

客户端

对gh0st服务器初始化流程

服务器

对于服务器发数据注意的事项: Send()都是将应答数据解包写入writebuffer(CBuffer类,动态数组),写入后就等待发送. 而在OnClientWriting()中,将wsaoutbuffer指向writebuffer并发送,这样就解决发送动态大小的数据的问题.
writebuffer中没有发完(此处应该是用writebuffer.Delete(dwIosize)判断),则继续投递WSASend发.
这里注意,DoRecv()后,投递完Send请求后,立即又PostRecv,我之前一直写的都是收到数据后,发送完回应数据再投递Recv请求.这样效率不高.

但对于无法一次性收完数据时,gh0st没有交代,gh0st服务器认为收来的数据压缩后都可以放在一个8K的inbuffer中.默认一次就可以接收完.

About

Learn gh0st

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors