专栏首页离别歌 - 信息安全与代码审计gh0st源码分析与远控的编写(一)

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

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文件,点击打开后是一个主控端的样子:

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

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

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

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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 知乎某处XSS+刷粉超详细漏洞技术分析

    首先看一个XSS漏洞,这个点是老问题了, http://www.wooyun.org/bugs/wooyun-2016-0171240 知乎按照洞主提供的方法...

    phith0n
  • phpcms上传导致getshell详解及案例

    这篇文章好几天前写了,给协会里新成员普及知识,看大家也都玩的差不多了,就发表到博客里,增加一点噱头和访问量,哈哈~

    phith0n
  • 绕过安全狗上传asp一句话

    绕过安全狗有朋友整理过的,我也读过一些文章,很有收获。所以先在这里把文章给大家分享一下:

    phith0n
  • Java示例演示Functor 和monad

    This article was initially an appendix in our Reactive Programming with RxJavabo...

    Dylan Liu
  • 【AI头条&优质资源】深度学习近期和未来有哪些突破?Yann LeCun的Quora解答

    《What are some recent and potentially upcoming breakthroughs in deep learning?》

    fishexpert
  • 59条令人捧腹但真实的程序员编程语录

    我收集了很多关于软件开发者的编程语录。这些语录和软件开发维护、调试、软件bug、软件设计和文档、代码质量、测试和管理等相关。下面这59条编程语录虽然令人捧腹但也...

    哲洛不闹
  • 59条令人捧腹但真实的程序员编程语录

    我收集了很多关于软件开发者的编程语录。这些语录和软件开发维护、调试、软件bug、软件设计和文档、代码质量、测试和管理等相关。下面这59条编程语录虽然令人捧腹但也...

    用户1667431
  • Mysql索引和优化

    1、选择索引的数据类型 MySQL支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响。通常来说,可以遵循以下一些指导原则: (1)越小的数据类型通常...

    wangxl
  • python 中面向切面编程AOP和装饰器

    简言之、这种在运行时,编译时,类和方法加载时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

    黑白格
  • 腾讯云大禹高防IP之客户端获取真实IP

    腾讯云大禹高防IP产品可用来对客户的4/7层业务进行ddos攻击的防护,其中一个很常见的诉求是如何获取真实的客户端ip。本文章会就云上常见的各高防IP部署场景下...

    安轲

扫码关注云+社区

领取腾讯云代金券