吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12578|回复: 1
收起左侧

[其他转载] gh0st客户端分析

 关闭 [复制链接]
ttwmtz 发表于 2010-2-23 16:36
gh0st客户端分析
现在开始分析gh0st客户端程序框架。
首先我们知道,gh0st是单文档类型的程序框架。
文档类型的都是从theApp开始的。theApp是一个全局变量。
那我们就先看一下CGh0stApp这个类的初始化函数
BOOL CGh0stApp::InitInstance()
下面很大一部分是生成的框架。我给大家指出来,就没必要再看这些了

直到        if (!ProcessShellCommand(cmdInfo))
                return FALSE;
都是框架。不去看。分析下面的。
m_pMainWnd->SetMenu(NULL);去掉菜单栏,把这句注释掉就有菜单栏了。

        m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();

这两句是显示主界面的。

下面自带的注释大家都知道了,就是启动IOCP服务器,就是建立套接字并监听
只不过用的模型是IOCP完成端口的。
首先是获取配置文件信息。
m_IniFile.GetInt("Settings", "ListenPort");
获取端口号,最大连接数。

((CMainFrame*) m_pMainWnd)->Activate(nPort, nMaxConnection);
我们来看这句。
这句是调用CMainFrame类的Activate函数。
m_pMainWnd是单文档类的主界面指针,也是框架类指针。就是CMainFrame类

接下来我们就去Activate函数里面看看

我就在程序里面注释给大家看吧。

BOOL CGh0stApp::InitInstance() //第一步
{
        获取端口号();
        激活IOCP();///////                        m_pMainWnd)->Activate
}
((CMainFrame*) m_pMainWnd)->Activate(nPort, nMaxConnection)//第二步
{
        初始化变量;
        完成对象->初始化(传递回调函数,,,);//////  m_iocpServer->Initialize();
        设置状态栏状态();
}

bool CIOCPServer::Initialize(NOTIFYPROC pNotifyProc, CMainFrame* pFrame, int nMaxConnections, int nPort)// 第三步
{
        保存指针;
        创建监听套接字();
        设置FD_ACCEPT();
        绑定端口();
        监听端口();
        创建监听线程();////////////////////           ListenThreadProc//第四步
        如果(线程创建==成功)
        {
                初始化完成端口();/////            InitializeIOCP();第六步
        }
}

bool CIOCPServer::InitializeIOCP(void)//第六步
{
        创建完成端口();
        根据系统信息创建工作者线程();//////        ThreadPoolFunc//第七步
         
}
unsigned CIOCPServer::ListenThreadProc(LPVOID lParam)//第四步
{
        获取FD_ACCEPT事件();
        调用接收函数();/////                        pThis->OnAccept()第五步
}
void CIOCPServer::OnAccept()//第五步
{
        获取客户端套接字();
        创建客户端上下文变量();//保存客户端套接字
        关联完成端口();
        设置套接字状态();
        将客户端上下文添加至上下文列表();
        投递一个IO初始化到完成端口();
        调用回调函数,通知主对话框有客户连接();
        投递WSARecv()到完成端口,等待接收客户端数据();
}
unsigned CIOCPServer::ThreadPoolFunc (LPVOID thisContext) //第七步
{
        获取IO完成状态();
        出错处理();
        如果(结果==正确)
        {
                根据IO完成状态进行相应处理();//我们还要看一下相应处理函数。
        }
}

        BEGIN_IO_MSG_MAP()//这个就是他的相应处理消息表。去分析以下这些处理函数
                IO_MESSAGE_HANDLER(IORead, OnClientReading)
                IO_MESSAGE_HANDLER(IOWrite, OnClientWriting)
                IO_MESSAGE_HANDLER(IOInitialize, OnClientInitializing)
        END_IO_MSG_MAP()
//再把这些函数的框架写一下
bool CIOCPServer::OnClientReading(ClientContext* pContext, DWORD dwIoSize)
{
        判断(是否断开)
        {
         移除客户端();
        }
        判断(包格式是否不同)
        {
         重发();
        }
        写入接收数据到缓冲区();
        通知主框架处理NC_RECEIVE();
        判断(包数据是否正确)
        {
         不正确处理();
         正确->通知主框架处理NC_RECEIVE_COMPLETE();
        }
        投递接收();
}

其他的几个就不给大家分析了。或者放在下次分析。
这只是一个简单的框架分析。对理清程序处理结构有帮助,但对修改个人专版,没有多大帮助。
简单说一下界面美化。现在的美化,基本上都是添加一个工具栏。工具栏可以上网查CToolBar这个类
当然懂得MFC的自然知道了。
主要就是在CMainFrame类的OnCreate里面添加,创建一个工具栏
可以参考gh0st里面自带的程序段。给大家搜索一下吧。
要想添加工具条,现在资源的Toolbar中new一个工具栏
这些代码就是添加工具栏的。至于其他的美化,还是研究一下MFC吧。好了,先到这里吧


视频下载:http://www.rayfile.com/zh-cn/fil ... -b93a-0014221b798a/

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

8970665 发表于 2010-3-5 00:57
连接有问题
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 21:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表