gh0st源码分析与远控的编写(一)

    再过几天期末考试了,还有好多要复习。。蛋都快碎了。最近在看老狼的gh0st内核编程,想了很久要不要写文章,最后还是觉得很有必要,原因过一会讲。

    先送上老狼的gh0st无加密(lxe格式)视频下载地址:

    http://phith0n.400gb.com/u/29415/3193732

    其中包含的gh0st源码(乱七八糟的被我的卡巴斯基杀过一遍,仅仅是源码):http://www.400gb.com/file/23820009

    在写东西前我要说一下,我虽然说研究远控的源码,但我告诉你我以前包括以后从未也从不想使用远控来控制中国人的电脑。我希望你们大家也一样,仅仅只是对编程感兴趣,而不是为了违法的目的去使用代码。


    好了,进入主题。老狼的gh0st内核编程教程,我认为是国内绝无仅有的一套比较全的远控编写的教程,它很详细,基本上就是教你重新打造一款远控,使用gh0st内核。

    但是为什么我还要写这一套文章,既然教程都有了。我认为这套教程有一些很致命的问题:

    1.不想吐槽老狼英语口语水平

    2.老狼在教程伊始没有系统地给大家介绍远控的概念。什么是服务端,什么是客户端之类的问题。(好像老狼在他之前其他教程里讲过,但在网上传的最多的只有这个教程,所以很多朋友看教程的时候还是一知半解)

    3.主控端代码在vs2010中编写,但被控端代码却在古老的VC6下创建。不知道老狼为什么这么做,使用VC6还得下载sdk。所以我在编写的时候,是将主控端、被控端这些工程放在VS2010下同一个解决方案中,方便代码的管理。

    4.老狼的代码与教程有一些错误,而且他遇到问题、解决问题的方法不太符合面向对象的思想,还有些问题的解决只是解决了表面的问题,并没有真正找到问题的根源。这也是很多软件漏洞多发的关键,一个漏洞如果不从根源上修复,可能在其他代码中存在一个新的漏洞。

    5.教程中很多地方(可以说大部分地方)只是复制的gh0st代码,并没有详细的讲解。

    当然这只是我的见解,不是说我可以做的更好,只是我在学习过程中发现的问题。我的能力不可能做出这样一套完善的教程,我写文章的目的只是像一个批注,在大家观看教程的过程中给大家一点帮助。我的文章不能替代老狼的教程。

    

    在这里,先给大家一个大局观:gh0st是什么,大概原理是什么。

    gh0st是一款基于C/S架构的远程管理软件(我只是就事论事,不想讨论C/S架构过时或不过时)。所谓远程管理,就是我在我的电脑上通过一些手段,可以操作其他电脑。什么是C/S架构,C表示Client,S表示Server,也就是客户端和服务端的意思。可以这样理解C/S,现在有两台电脑,一台是Server,一台是Client,server电脑就会开启一个端口,并一直监听这个端口中的信息。client来连接这个端口,连接成功后,两台机器就能互相发送信息了。(具体的原理建议大家去看socket通信)

    gh0st用的是C/S架构中的反向连接。我用主控端和被控端来称呼黑客的电脑和肉鸡的电脑。反向连接的意思就是我主控端作为server,被控端作为client,主控端监听一个固定的端口,并有一个固定的IP。然后被控端来连接这个IP的该端口,这就是所谓的上线。

    在实际情况中,黑客的电脑并不是都有固定的IP,我在我们寝室使用的是一个路由器,于是我的IP只是内网IP,192.168.x.x。而且,如果我换一个地方上网,IP也会变。这样我的被控端是找不到我的IP的。所以很多远控对待该问题,有两个解决方案:

    1.DNS上线

    花生壳、3322提供了免费的动态域名服务,其实就是提供了DNS服务。我们把自己的IP绑定到DNS服务器上,被控端通过对DNS的解析,找到主控端的IP,再连接。下次换地方上网了,只需要更改自己绑定到DNS上的IP即可。

    2.FTP(HTTP)上线

    我们把自己的IP写入一个文本文件1.txt,放在ftp(http)服务器上,比如ftp://leavesongs.com/1.txt。被控端去下载该txt,在其中找到主控端的IP。再连接。

    当然gh0st对他们都是支持的。

    再讲讲gh0st这个软件的组成。老狼给的gh0st最终编译好就是一个exe文件,点击打开后是一个主控端的样子:

    20130510_173103.jpg

    在build选项卡中,填好相关信息,可以生成一个exe文件,这就是所谓的被控端。

    但是我们打开源码看,其实它是主要由三个部分组成,一是带界面的主控端,一个是动态链接库dll,一个是加载dll的exe。我们被控端的所有功能都是写在dll当中的。而并不是写在exe文件中。


    大局观大概就是这些。再说一下gh0st核心内容。

    在传输数据方面,主控端使用IOCP模型,关于该模型请google。在主控端中,由CIOCPServer类实现。在被控端中,数据传输使用CClientSocket类实现。数据传输是远控的核心,所以这两个类也就成了gh0st的核心类。当然,在传输过程中,gh0st使用zlib进行压缩,减小数据包的大小。

    在被控端管理方面,gh0st使用了一个很好的方案。先做了一个CManager类,作为所有管理功能的基类,其他的比如系统管理类CSystenManager就继承了CManager。大大地增加了代码的重用性。

    在主控端方面,有这样一个回调函数NotifyProc,所有被控端发来的消息,都会经过此函数,在该函数中使用switch语句,处理各个消息。使得代码看起来井井有条。

    在稳定性方面,被控端宿主为svchost以系统服务启动,并有守护线程,用心跳包机制防止以外掉线。


    说了半天了……西安这又是一个炎热的下午。希望你能看懂我的文章,并对远控有一个更深的理解。下次我会开始写一些gh0st的源码,和老狼视频里一些难以理解的地方。再次强调,本文不能替代老狼的视频,想学习的同学务必认真地看老狼的教程,你会受益良多。

赞赏

喜欢这篇文章?打赏1元

评论

Mr li 回复

厉害👍

JmNkS 回复

博主,gh0st源码的链接失效了,网上的怕有病毒,能重发一遍吗

AngryCPU 回复

请问博主,gh0st现在下哪个版本的源码来玩呢?

k3nt 回复

博主,请问gh0st的作者是谁呢?非常好奇。老狼就是之前红狼小组的吧。

loveGH0ST 回复

@k3nt
大名鼎鼎的COOLDIYER,开创了远控开源的先河,具有划时代的意义!继GHOST之后,pcshare(作者:无可非议)的源码也由20CN发布,且遵守开源规范。都是精品木马!

哎呦8喂 回复

兄弟 我想进入网络安全行业看到了你写的文章,想下载老狼的视频看一下可是下不了。你能重新给我发个链接吗?麻烦你了兄弟

phithon 回复

@哎呦8喂 这个我现在也找不到了

k3nt 回复

@phithon 我找到了,正在下载,贴一下吧:链接: http://pan.baidu.com/s/1dEBCCeP 密码: p5rs,另外请问下在你的城通网盘里面的资料还能下载吗?

phithon 回复

@k3nt 不能了,好像都被和谐了吧

8080 回复

@k3nt 请问解压密码是多少

k3nt 回复

@8080 密码好像是www.xiaoqi7.com

Haowu Ge 回复

找点啥玩玩好。。。哈哈

jiu 回复

最近也在看老狼的教程,写到dll哪里卡住了,我只想加两个功能,但是遇到很多问题,Google搜索,就将博主的网站搜索出来了。


问题任然没有解决,希望有兴趣的朋友可以一起研究下。

灿烂阳光 回复

老狼的gh0st的视频我分享一下吧
上部http://yun.baidu.com/s/1ntBMlEL
下部http://yun.baidu.com/s/1eQGemCa

phithon 回复

@灿烂阳光:感谢分享!

格陵兰的苦寒 回复

@灿烂阳光:求解压密码

痞子 回复

@灿烂阳光:www.hegouvip.com 这是密码

小白 回复

博主网盘能再共享一下吗,网上找的都要密码。

phithon 回复

@小白:非常时期,城通网盘暂时没法共享了。

小白 回复

@phithon:好吧,现在确实对文件管理比较严,博主能告诉我你的教程有多大吗,或者是在哪下载的,我去网上找找看。

phithon 回复

@小白:名字叫“老狼GHOST内核编程全套无KEY第1部分.rar”,一共4部分。压缩包大小分别是222、905、785、385M。
当时也是在城通下载的。

小白 回复

@phithon:thanks.我去找找看。

GPRBOY 回复

大大的吹一牛,我要一直在线等老大把教程一直出完!!!!!!!

im帥 回复

坐等博主更新,最喜欢看这种技术文了。虽然我是个没学过什么C++的工科工程类搬砖工。

另外,不支持中文域名邮箱,验证码有点变态了。

phithon 回复

@im帥:感谢支持~验证码再变态。。。也还是有人刷评论……

im帥 回复

@phithon:博主网盘不分享了?正好想下载来看看呢

phithon 回复

@im帥:那网盘太坑了,改天换个百度盘

im帥 回复

@phithon:貌似问题是现在净网行动,需要重新确认分享。

骷髅 回复

没有(一)的附件下载?

phithon 回复

@骷髅:一是一个大概的概论,还没真正开始写,所以没有附件。

captcha