Pcshare远控源码偏重分析(一)

0x00背景


enter image description here

PcShare是一款功能强大的远程管理软件,可以在内网、外网任意位置随意管理需要的远程主机,该软件是由国内安全爱好者无可非议开发。在当时这款远控在大家应该比较熟悉了,VC编译器调出来的的小体积全功能木马。相比Delphi的灰鸽子真是碉堡了!

下面我们使用具有通用性的会员版本为例,进行源码分析。其他企业版本和2011版应该大同小异,有兴趣的可以自行研究。由于篇幅限制,我们主要关注一些关键代码流程,核心代码、及加密解密部分。

0x01 代码结构


作者开源的源码包大致目录结构:

文件大致作用:

PcLKey键盘记录插件

PcStart可执行安装主程序

PcMake 连接型DLL小马

PcMain 主功能控制插件

PcShare 主控程序带界面

我们先看下会员版本配置界面,然后在开始分析。你可以发现会员版本和早期拿到的版本不一样,有一个捆绑文件功能,而这个功能有一个亮点“压缩编码”。想知道?继续看

enter image description here

PcLKey键盘记录插件 编译文件名:PcLkey.dll
这款键盘记录插件的特色就是可以记录中文英文等,而且可以尝试记录系统登录密码。服务启动SYSTEM权限的,登陆系统密码记录应该是支持XP/2003的,具体大家测测看。

以下是启动监控中文和英文及登录窗口输入记录,处理流程代码。
离线键盘记录数据文件以*.dll.txt存储,和dll一个目录。

英文记录核心代码:WH_GETMESSAGE全局钩子,大家的代码应该都差不多,这里主要是处理回车符和删除符

中文记录核心代码:主要用到WH_CALLWNDPROC全局钩子处理WM_IME_COMPOSITION消息,通过ImmGetCompositionStringW函数获取字符。

系统登录记录核心代码:这个和英文记录查不多主要涉及就是用户桌面切换,这里不需要处理回车因为按回车就等于点确定登陆了。


PcStart可执行安装主程序 编译文件名:PcInit.exe

这个程序主要作用就是从EXE中释放DLL和SYS文件等,安装服务并调用执行主要功能DLL木马上线。早期这款远控特色就是有驱动,可以隐藏连接和注册表等。可惜这种泛滥Rootkit代码维持没多久就被杀毒列入监控范围,然后就没有然后了。

用户配置生成数据结构体,和配置器的需要定义的内容差不多。

 

0x02 多功能的详解


下面看看作者的debug版本调试用的代码,更形象一些。主要数据就是上线地址、端口、安装服务名称、服务显示名称、服务描述、上线分组、备注、重连超时、软件版本、上线密码等等

enter image description here

下面这段代码可以看得出会员版本和普通版本区别,

1、使用的DLL不一样,会员版是完整版的DLL、普通版本是精简版的DLL。

2、主函数名的区别,会员版本是Vip20101125,免费版本是ServiceMain。

3、会员版本直接带完整控制插件DLL,免费版会先建立TCP连接传输控制插件(就是小马带大马减小体积),这个后续在提到。

enter image description here

PcStart还有三处值得注意的亮点:

1 DLL和SYS文件数据加密存储,捆绑合并文件使用LZW编码压缩。避免被杀毒软件轻易的识别出捆绑(内置)PE文件,对躲避查杀有一定效果。但是有些强悍的杀毒还是能通过虚拟机脱壳或算法识别解码后将其藏匿的文件进行查杀。攻防最头痛莫过于对手太强大,所以现在手段不高明基本没有生存空间了。

2 修改利用PE文件标志来识别文件类型,分析过程中我发现一处不错的思路。修改PE文件的标识“This program cannot be run in DOS mode.”中的“This”位置来标注这是一个什么类型文件,方便后期文件处理和执行。这是固定码可以将此处加入查杀特征库就可以识别了,快速扫描有点用,准确识别还是另外在找一处吧。

定义:

验证:

enter image description here

3 运行成功后加密配置数据修改DLL 文件,生成一段随机作为Key。数据和Key异或加密存储,放在PE空区段里面。Pcshare多次利用空区段存放数据,用的时候在找标记“PS_VER_ULONGLONG”找大小在读取出来,避免“资源文件存文件”、“附加数据存文件”等传统捆绑打包和携带配置文件的方式,被杀毒启发式扫描检测出来。

AddDataToPe代码片段:


PcMake 连接型DLL小马 编译文件名:PcMake.dll

通过源码分析Pcshare共有3个插件1、控制插件(即:PcMain.dll) 2、键盘记录插件(PcLkey.dll) 3、Sock5代理插件 后两个插件是会员版本专享。

PcMake这个插件初始化连接是使用TCP连接到控制端,然后下载控制插件。会员版本采用直接捆绑打包PcMain.dll控制插件方式,所以体积上会大一些。

这个小马插件特色不多,下面我主要分析的解密配置信息部分代码和上线代码。

定义:

运行后,查找存储配置的标志“0x1234567812345678”(PcStart成功执行后写入的配置信息),找到后将密钥和配置读取出来,循环所有配置加密数据和密钥进行异或Xor解密。

验证方法:16进制编辑工具搜索16进制“7856341278563412”

enter image description here

Ollydbg调试印证:

enter image description here

enter image description here

连接控制端成功后发送软件版本和上线密码(传输的数据使用异或F7加密,有点弱爆的感觉。),然后从主控端下载控制插件。

enter image description here

校验插件文件完整性使用MD5算法,判断是否与控制端最新版本相符。相同则不在传输,貌似MD5算法目前不是太安全了吧。

0x03 文章小结


Pcshare这款远控的代码规范方面还是比较工整的,代码缩进而且还有大量注释。非常适合初学入门和二次开发。据说早期有HTTP协议的版本但是现在代码丢失了,可惜了这款2010款是TCP版本对企业防火墙穿墙能力有限。比较有特色的思路:1、LZW编码压缩 2、改PE的DOS头“This”给文件做标记 3、利用空区段存放数据,看得出作者对安装用的EXE处理上花了不少功夫。

PcMain 主功能控制插件、PcShare 主控程序带界面将在第2篇中在分析,预知后事如何,请听下回分解。