专栏首页FreeBuf打造一款属于自己的远程控制软件(二)

打造一款属于自己的远程控制软件(二)

前一篇文章介绍了软件的整体架构,接下来对被控端进行详细讲解,主要介绍被控端各个功能模块的关键技术以及开发过程中遇到的坑,希望对各位读者有借鉴作用。

被控端工作流程

应用程序初始化阶段初始化工作界面、从地址文件读取反向连接的ip地址和端口作为MyClientThread线程的启动参数。MyClientThread启动后执行GetClientSystemInfo函数获取本机信息并传至控制端显示。而后进入while(1)循环等待接收控制端传来的控制命令。进入switch_case结构解析命令,执行相应函数。将执行结果发送到控制端,继续进入循环等待。

获取计算机信息

GetClientSystemInfo传入一个SYSTEMINIT结构的引用,对该结构的定义在common.h文件中,该结构定义如下:

调用GetComputerName、GetUserName、GetVersionEx、GlobalMemoryStatus来分别获取计算机名、当前用户名、操作系统版本、内存信息。CPU的信息通过查询注册表来获取,通过打开不同的注释(3个中只能打开一个)获取CPU的不同信息,这里我们选择获取CPU的频率信息。

这里专门定义了一个CGetHDSerial类来封装序列号读取相关的操作。CGetHDSerial的成员函数如下:

函数调用关系为:

获取服务

参数为存放SERVICEINFO指针类型的容器。SERVICE数据结构定义为:

这里用到OpenSCManager函数,该函数建立了一个到服务控制管理器的连接,并打开指定的数据库。第一个参数为计算机名,若为NULL则指向本地计算机。第二个参数指定将要打开的服务控制管理数据库的名称,这里为NULL,表示指向本地默认。第三个参数为服务访问控制管理器的权限。执行成功返回一个服务控制管理器数据库的句柄ScManager。

由返回的句柄调用EnumServicesStatus函数枚举当前系统服务

获取进程列表

GetProcessList参数为PROCESSINFO指针类型的容器。PROCESSINFO数据结构在common.h中定义。

首先调用CreateToolhelpSnapshot获得当前系统中所有进程的快照,返回快照句柄。第二步调用Process32First获得第一个进程快照信息info,得到进程PID和进程名称。为了得到当前进程加载模块的完整路径,需要调用OpenProcess来打开对应进程对象。然而通过几次打开失败后发现,原来在默认的情况下进程的一些访问权限是没有被启用的,即使你是Administrator,所以很重要的一步就是提升当前进程的权限(启用这些权限),所以先调用OpenProcessToken打开相关进程的访问令牌(参数自己百度),而后调用EnablePrivilege提升当前进程权限,这样就可以打开进程对象了。第三步,通过while循环获得其他进程的信息。

CGetScreenToBitmap类用来获取当前屏幕画面转化成位图信息。

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-13

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 全勤矿工systemdMiner最新变种利用暗网代理下载恶意模块

    近日,深信服安全团队捕获到一款新型的Linux挖矿木马,该木马通过bash命令下载执行多个功能模块,通过SSH暴力破解、SSH免密登录利用、Hadoop Yar...

    FB客服
  • 利用驱动人生升级通道传播的木马手工查杀记

    驱动人生木马在1月24日的基础上再次更新,将攻击组件安装为计划任务、服务并启动。本次手工查杀主要针对该木马。

    FB客服
  • 短小精干的Unix类后门Tiny shell的使用与分析

    0x00. 简介 Tiny Shell 是一款开源的Unix类后门shell工具,由C语言编写,体积小(在kali系统上编译后只有55K大小) ? 分为客户端和...

    FB客服
  • 进程概念

    任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

    海盗船长
  • Linux的进程线程及调度

    操作系统中的经典定义: 进程:资源分配单位。 线程:调度单位。 操作系统中用PCB(Process Control Block, 进程控制块)来描述进程。...

    用户4940323
  • 如何创建多进程程序?(文末福利)

    在《对进程和线程的一些总结》已经介绍了进程和线程的区别,但是在C/C++中如何创建进程呢?或者说如何编写多进程的程序呢?

    编程珠玑
  • Python多进程并行编程实践:以multiprocessing模块为例

    專 欄 ❈Pytlab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,...

    Python中文社区
  • 进程与线程的区别?

    进程是什么? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是...

    老九君
  • Oracle中的PGA监控报警分析二(r12笔记第87天)

    今天又收到了一条报警的信息,看起来很常规,但是后面的故事如果你做了分析就会发现其实本身并不平常,我觉得我得出手了。之前的分析可以参考 Oracle中的PGA监控...

    jeanron100
  • react实战:umi问卷发布系统

    技术团队中,保持技术分享和持续的学习是完全必要的。企业主会说:"公司不是培训机构。"这固然正确。但一个公司,总会遇到这种或那种需要攻关的难题。当你不愿意分享解决...

    一粒小麦

扫码关注云+社区

领取腾讯云代金券