【游戏逆向】探索可靠的线程检查方法

news2024/11/15 17:57:51

一、关键的线程检查

在对抗外挂和木马的方案中,不可能将所有的检查操作放在主线程中,因此,在方案中总有一个扫描线程或者环境检查线程必须保持工作,而它们也就成了外挂和木马的重要攻击目标,外挂和木马只要搞定了它们,就能很方便地在客户端肆虐。

在客户端反木马方案SafeLogin和TEdit中,就经历过很长一段时间线程保护的对抗,通过了解客户端反外挂系统以及壳和Sanlix中的线程保护,现在在对抗线程保护方面,木马的对抗手段相对外挂跑在了前面,这和木马本身的特性关系很大,如果不搞定扫描线程和环境检查线程,那么它们在特征扫描、键盘钩子和窗口行为等检查过程下将无法遁形。

二、外挂和木马常用的攻击手段

外挂和木马对线程的攻击不外乎这样的几种手段:

1)最简单的,篡改线程函数代码,很容易被通过特征检查扫描到;

2)简单阻止线程创建,通过hook线程创建相关函数,也很容易被发现;

3)这种办法相对隐蔽,通过hook ntdll!CsrNewThread函数,替换线程函数地址,这样绕过了壳中通过GetExitCodeThread和ResumeThread的检查方法;

4)更为隐蔽,通过hook kernel32!Sleep, 当线程内调用Sleep的时候,通过篡改参数,让这个Sleep永远进行下去,不过在SafeLogin的根据数据的线程检查方法可以发现它;

5)非常隐蔽,通过hook ntdll!ZwDelayExecution, 并不是让线程永远Sleep下去(Sleep函数最终会调用这个native API),而是让线程Sleep的时间更长一些,而在这个间隙,木马一则掌握了检查线程的活动规律(相当于一个潜入者掌握了流动岗哨的活动规律)二则可以让检查线程的循环执行缓慢(相当于一个潜入者控制流动岗哨巡查变慢),为自己做坏事争取了时间。

其实这些手段也是我们在和木马对抗的过程中,木马不断进化出来的,尤其最后一种,其实在实际中,木马对ntdll!ZwDelayExecution的hook也不是长时间存在的,而是hook一下,如果拦截到了,则拦截,如果没拦截到,则赶紧恢复,以避开扫描线程的hook检查,整个过程更加隐蔽。

三、结合线程上下文切换和数据变化检测的方法

熟悉了外挂和木马的对抗手段,我们可以看出,如果仅对线程的代码,或者线程句柄进行检查,都将是不可靠的,我们需要有一种办法,让线程活动即对线程检查数据进行更新(对抗木马的手段4和5),如果发现线程长时间不活动,或者线程活动但是每没有更新线程检查数据,则可以判断这个线程有问题了。

简单介绍了背景,多余的内容不再赘述,直接描述方法。

我们知道在Windows系统的内核,会对所有的线程进行调度执行,当一个线程被切换到时,就会把它的上下文信息换入到CPU寄存器等环境中,而这时,内核中有一线程上下文切换次数(thread context switch count)会被自增1, 而一个线程在两个时刻这个数据的差值(下文简称delta值),即thread context switch delta, 反映了它在这两个时刻之间被切换的次数。

在sysinternals的process explorer工具中,对这个数据进行的显示,并可以看到它在不断更新。
在这里插入图片描述
通过对process explorer的研究,它以5号功能调用了系统函数NtQuerySystemInformation, 通过查阅第三方文档,线程切换记数存在与这个结构中(见图1),通过以5号功能调用NtQuerySystemInformation即可获取它(见图2)

图一
在这里插入图片描述
图二
通过检查线程在两个时刻的delta值,结合对线程活动更新数据的检查(见图3),就能有效发现木马手段4和5。另外,在检查过程中,如果通过delta值和更新数据都没有发现线程的活动,是否是线程始终没有被系统调度呢,通过Sleep或者SwitchToThread的方法,就可以主动触发线程调度(见图4),如果被检查的线程被“变慢”了,那么主线程也会跟着罢工。这样,一个比较可靠的线程检查方法就实现了。
在这里插入图片描述
图三
在这里插入图片描述
图四

四、小结

这种检查方法也是在对抗过程中进化出来的,当然现在它很可能继续被对抗,总之,在线程的对抗、防御和检查中,这样的思路是贯穿始终的,也就是对线程的代码、活动性同时进行多线程交叉检查,让一个线程不正常工作,其他线程全罢工。

作为积累和分享,将这种其实很简单的办法描述了一下,后续的对抗中,如果有更好的办法,也会接着分享出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【高可用架构】聊聊故障和高可用架构设计

在架构设计中,高性能、高可用、可拓展以及安全等等有多种维度去判断架构的设计纬度,但是一般来说我们需要考虑具体的业务场景,去判断采用那种合适的架构方案,但是对于大多数的设计来说,都需要满足高性能、高可用。所以…

专科学历,有机会转行程序员吗?

你好,我是程序员晚枫,昨晚又1对1沟通了一位想转行程序员的朋友。 这位朋友是专科毕业,在电子厂干了2年多,感觉看不到希望,来找我咨询一下有没有转行程序员的可能性 学习计划。 我觉得他的情况和提问很有代表性&…

软件测试综述

概述 在不短不长的7年多研发生涯中,听过无数个软件测试概念:单元测试、功能测试、白盒测试、黑盒测试、自动化测试、契约测试、基准测试、性能测试、集成测试、渗透测试、接口测试、UI测试、端到端测试、E2E测试…… 恰逢在准备系统架构设计师软考高级…

我的创作纪念日-256天

机缘: 没有在csdn进行写作,我就不会认识更多对应领域的博主,并且也认识到了很多不同领域的博主这令我感到非常荣幸,能够加入到csdn。在分享交流的过程种我获得了: 实战项目中的经验分享日常学习过程中的记录通过文章进…

Ubuntu20.04安装arm-linux-gcc 4.3.2 (提供安装包)

⁡​​⁢‬‌​⁢‌⁡‍⁣⁤‬‌⁡⁢⁢‍⁡⁤​⁣‬‌‬‍⁤​⁤‌⁣⁤​⁤⁢‍⁢⁤‬⁣‬​‌Ubuntu20.04安装arm-linux-gcc 4.3.2 - 飞书云文档 (feishu.cn) CSDN编辑太丑了 转移阵地了

Google Colab:云端的Python编程神器

Google Colab,全名Google Colaboratory,是Google Research团队开发的一款云端编程工具,它允许任何人通过浏览器编写和执行Python代码。Colab尤其适合机器学习、数据分析和教育目的。它是一种托管式Jupyter笔记本服务,用户无需设置…

SQL-每日一题【185.部门工资前三高的员工】

题目 表: Employee 表: Department 公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。 编写一个SQL查询,找出每个部门中 收入高的员工 。 以 任意顺序 返回结果表。 查询结果格式如…

Python基础语法第二章、变量和运算符

目录 一、常量和表达式 二、变量和类型 2.1变量是什么 2.2变量的语法 2.2.1定义变量 2.2.2使用变量 2.3变量的类型 2.3.1整数 2.3.2浮点数(小数) 2.3.3字符串 2.3.4布尔 2.3.5其他 2.4动态类型 4.1为什么要有这么多类型? 2.4.2动态类型特性 三、注释 3.1注释…

IT人,别人公司与自家差距到底有多大?

年底,是IT人最心酸的时候。辛辛苦苦了一年,别人家的公司员工人手一台 iPhone14Pro,自家可能连个年会都不开!想想就气人 不能笑饱就气饱,省下一顿当赚到 - 1 - 形象 别人公司的IT男帅气又有(发)型 然,我们…

7.3 SpringBoot整合MyBatis分页插件github.pageHelper:实现图书列表API

文章目录 前言一、自己实现分页第一步,count 查询 总记录数(totalCount),计算总页数(totalPages)第二步,limit 查询 指定页数据 二、不考虑分页的查询图书列表MapperBookServiceImplBookListPar…

Redis缓存穿透击穿以及雪崩

5、Reids缓存问题与解决 5.1、背景 Redis作为一种内存性数据库,当查询的数据在redis缓存中时就不需要在到真实的数据库中去查,加快了查询速度和保护了真实数据库的安全,但是同时也引入了一些新的问题,比如查询的数据不在内存和数…

一个人也可以是【大厂】,三年程序员的生活规划心路分享!

自从工作之后,我就经常思考以下这些问题: 还有多久退休?明天可以退休吗?地球什么时候爆炸?我什么时候可以暴富辞职?我真的需要这份工作吗? 要问是从什么时候开始有这些问题的,大概…

Linux环境搭建(一)— 实现ssh连接

Linux环境搭建 一 安装虚拟机1.账号记录,密码root2.权限问题 二 安装ssh1.出错2.误删文件3.安装ifconfig4.安装ssh5.重装ssh6.VI环境不好用7.开放端口8.ssh文件下没有密钥文件9.无法安装ssh 三 连接ssh 写在前面: 使用的是VMware,Ubuntu环境 …

利用这个css属性,你也能轻松实现一个新手引导库

相信大家或多或少都在各种网站上使用过新手引导,当网站提供的功能有点复杂时,这是一个对新手非常友好的功能,可以跟随新手引导一步一步了解网站的各种功能,我们要做的只是点击下一步或者上一步,网站就能滚动到指定位置…

被中文乱码折磨的我在此总结一下编码相关知识

本文大致介绍了三个问题: 常见的字符编码以及他们是如何编码从而被计算机识别的?为什么会有这些字符编码和他们被创建的背景和顺序?常见的乱码问题应该如何防止以及如何解决? 常见的字符编码 ASCII,GB2312&#xff…

(小程序)按钮切换对应展示区域

(小程序)按钮切换对应展示区域 需求&#xff1a;点击按钮切换表格和图表两种展示方式 html <u-button type"primary" size"mini" text"图表" v-if"form.curType table"click"showEcharts"></u-button> <u…

同一个分支maven构建出来的包不一样?

现象 最近发布spring boot项目时遇到了一个奇怪的问题&#xff0c;日志异常信息如下&#xff1a; Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing …

Image Watch 的使用

目录 1、下载地址 2、安装完成 3、调试 1、下载地址 Image Watch - Visual Studio Marketplace 2、安装完成 打开VS&#xff0c;在项目->其他窗口中有image watch选项 3、调试 一直放大图像可以查看详细的色彩值&#xff0c;通道数为3

各省绿色创新效率原始数据+测算(2020-2021)

采用了考虑非期望产出的超效率SBM模型来测量中国各省的绿色创新效率。该数据包括原始数据测算结果&#xff0c;包括人力资本、资本、能源投入&#xff0c;以及技术、经济、生态效益等多个维度的数据。可以帮助研究人员了解中国各省的绿色创新效率情况&#xff0c;揭示不同省份在…

搜索引擎概念解析

搜索引擎概念解析 什么是搜索引擎 MySQL搜索引擎举例 搜索引擎是一种用于在互联网上搜索并呈现相关信息的工具。它通过自动扫描和索引大量网页内容&#xff0c;并根据用户提供的关键词或查询条件&#xff0c;返回与之相关的网页链接和摘要。 当用户在搜索引擎中输入关键词或…