2025年gmock使用案例(gmestock)

gmock使用案例(gmestock)p strong b 本文原创作者 Mr 极目楚天舒 本文属 FreeBuf 原创奖励计划 未经许可禁止转载 b br strong p p strong 前一篇文章介绍了软件的整体架构 接下来对被控端进行详细讲解 strong p

大家好,我是讯享网,很高兴认识大家。




讯享网

 <p><strong><b>*本文原创作者:Mr极目楚天舒,本文属FreeBuf原创奖励计划,未经许可禁止转载</b><br/></strong></p><p><strong>前一篇文章介绍了软件的整体架构,接下来对被控端进行详细讲解,主要介绍被控端各个功能模块的关键技术以及开发过程中遇到的坑,希望对各位读者有借鉴作用。</strong></p><p>被控端工作流程</p><p>应用程序初始化阶段初始化工作界面、从地址文件读取反向连接的ip地址和端口作为MyClientThread线程的启动参数。MyClientThread启动后执行GetClientSystemInfo函数获取本机信息并传至控制端显示。而后进入while(1)循环等待接收控制端传来的控制命令。进入switch_case结构解析命令,执行相应函数。将执行结果发送到控制端,继续进入循环等待。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fcrawl.ws.126.net%2Fimg%2F5b1d60bff4ddb7fd0276fd1b54.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fcrawl.ws.126.net%2Fimg%2F5b1d60bff4ddb7fd0276fd1b54.jpg&thumbnail=660x&quality=80&type=jpg"/><br/> 获取计算机信息<br/></p><p>GetClientSystemInfo传入一个SYSTEMINIT结构的引用,对该结构的定义在common.h文件中,该结构定义如下:</p><p></p><p>调用GetComputerName、GetUserName、GetVersionEx、GlobalMemoryStatus来分别获取计算机名、当前用户名、操作系统版本、内存信息。CPU的信息通过查询注册表来获取,通过打开不同的注释(3个中只能打开一个)获取CPU的不同信息,这里我们选择获取CPU的频率信息。</p><p> 获取硬盘序列号</p><p>这里专门定义了一个CGetHDSerial类来封装序列号读取相关的操作。CGetHDSerial的成员函数如下:</p><p></p><p>函数调用关系为:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fcrawl.ws.126.net%2Fimg%2F2135c4f3efdbb2bf7e9094.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fcrawl.ws.126.net%2Fimg%2F2135c4f3efdbb2bf7e9094.jpg&thumbnail=660x&quality=80&type=jpg"/><br/> 获取服务<br/></p><p>参数为存放SERVICEINFO指针类型的容器。SERVICE数据结构定义为:</p><p></p><p>这里用到OpenSCManager函数,该函数建立了一个到服务控制管理器的连接,并打开指定的数据库。第一个参数为计算机名,若为NULL则指向本地计算机。第二个参数指定将要打开的服务控制管理数据库的名称,这里为NULL,表示指向本地默认。第三个参数为服务访问控制管理器的权限。执行成功返回一个服务控制管理器数据库的句柄ScManager。</p><p>由返回的句柄调用EnumServicesStatus函数枚举当前系统服务</p><p> 获取进程列表</p><p>GetProcessList参数为PROCESSINFO指针类型的容器。PROCESSINFO数据结构在common.h中定义。</p><p></p><p>首先调用CreateToolhelpSnapshot获得当前系统中所有进程的快照,返回快照句柄。第二步调用Process32First获得第一个进程快照信息info,得到进程PID和进程名称。为了得到当前进程加载模块的完整路径,需要调用OpenProcess来打开对应进程对象。然而通过几次打开失败后发现,原来在<b>默认的情况下进程的一些访问权限是没有被启用的,即使你是Administrator</b>,所以很重要的一步就是提升当前进程的权限(启用这些权限),所以先调用OpenProcessToken打开相关进程的访问令牌(参数自己百度),而后调用EnablePrivilege提升当前进程权限,这样就可以打开进程对象了。第三步,通过while循环获得其他进程的信息。</p><p> 屏幕监视</p><p>CGetScreenToBitmap类用来获取当前屏幕画面转化成位图信息。</p><p></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fcrawl.ws.126.net%2Fimg%2F9ac280cf46308d4d108d321e7a36a44e.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fcrawl.ws.126.net%2Fimg%2F9ac280cf46308d4d108d321e7a36a44e.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p>代码传送门</p><p><b>*本文原创作者:Mr极目楚天舒,本文属FreeBuf原创奖励计划,未经许可禁止转载</b></p> 

讯享网
小讯
上一篇 2025-05-28 07:34
下一篇 2025-04-27 16:47

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/140654.html