二.《泽诺尼亚》明文CALL

news2024/12/28 12:21:20

了解发包函数

1.一款网络游戏,必定是会发包的,对于PC端而言,想要进行网络通讯,就拿最简单的CS架构而言势必会调用win32 API函数或底层函数

2.这里列举出常用的API如:send sendto wsasend wspsend

3.有一些正向开发经验的同学,肯定是见过这几个函数的

4.接下来我们来看看这款游戏到底是调用的那个API呢?或者说是哪几个呢?

确定发包函数

1.我们选中汇编窗口,按ctrl+g,输入send,回车跳转到该函数头部

2.来到函数头部,我们下F2断点,确定是否是send发包

3.发现下断就断,很明显可知很大可能性是send发包

确定包地址是否固定

1.确定了send发包,现在我们来看看该函数的函数类型,主要看参数

int send( SOCKET s, const char FAR *buf, int len, int flags );

2.注意看第二个参数是一个指针,指向一个缓存区地址,我们需要发送的数据就存放在这个缓冲区中,第三个参数是缓冲区大小,说白了就是需要发送数据有多少字节

3.现在我们断下看看这个CALL的第二个参数是否是固定地址

4.在不同操作下,我们发现rdx是固定的地址,由此可见是固定地址

确定是否线程发包

1.我们上面确定了是send发包的包地址是一个固定地址,接下来就好办了,只需要进一步确定是否是线程发包就可以找到明文CALL

2.首先我们要确定该游戏是否用到了线程发包

3.我们这里在send下断点,这里我们寻路触发,注意这里最好操作快点,因为有心跳包的影响

4.我们操作快一点,分别在寻路,喊话断下,按Ctrl+F9不断返回,看是否返回地址一样

5.经过分析不同的操作居然返回的地址几乎一样,由此可见在一个线程中循环执行发包

6.到这里就可以确定是线程发包

跳出线程发包

1.我们确定为线程发包,主要目的是为了跳出线程发包,找到明文CALL

2.现在我们看看如何跳出线程发包呢?其实说白了就是跳出线程

3.这里给大家画了一个正向代码的架构模型图,方便看看

4.正如大家看到的,我们在send流程断下的地方,都属于线程2的范畴,而需要找到明文CALL,则需要跳出(Ctrl+F9)线程2

5.为了跳出线程2,靠Ctrl+F9是不可能跳出去的,因为我们看到一个线程不停的在循环检索固定地址的数据

6.这时候就需要借助内存数据的访问写入断点,从而跨线程的寻找调用代码

7.这里明确要记住的是,你只有内存数据的访问写入才有跨线程的特性,而仅仅靠简单的Ctrl+F9执行到返回是不可能跨线程的

8.所以怎么跳出去呢?其实很简单,上面我们也确定了包地址是固定的,所以只需要在包地址下写入断点就会跳出线程啦

9.这里还需要说明下, 经过我们观察心跳包是8字节也就是只修改了包缓冲区前8字节,所以找好在那个包地址(首地址+偏移)下写入是尤其重要的!

10.当我们寻路的时候,发现修改的是超过8字节的缓冲区,这时候我们就可以利用这个特点,尽量在后8字节下写入

11.当下写入后,我们寻路,此时就断到了线程2以外的代码处啦

12.到这里,基本可以大概率确定跳出去了,但是我们还是需要确定一下!

确定是否跳出线程成功

1.其实确定是很简单的,那就是通过功能触发断下,多返回几层,找到分支的那个点就可以啦

2.正如上面模型图给大家画的那样,这里给大家再画一个流程图

3.通过几个功能的返回CALL分析,我们最终确定了再返回的第二层就是明文CALL,因为这个CALL是基本上所有关于发包的功能都会断下,而只要再返回一层,那就只有

在单独的功能才能断下啦

4.好啦,到此泽诺尼亚的明文CALL就找到了,是不是很简单!

5.最后感谢大家对迪大学院的支持!285530835

www.didacollege.com

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

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

相关文章

JavaEE——介绍并简单使用线程池

文章目录 一、 什么是线程池二、Java中线程池的运用1. 创建线程池中的问题2. 标准库中线程池的使用 三、自主实现一个简单的线程池 一、 什么是线程池 所谓线程池,其实和字符串常量池,数据库连接池十分相似,就是设定一块区域,提前…

打印机常见故障解决参考方法

1、首先检查打印机电源线连接是否可靠或电源指示灯是否点亮,然后再次打印文件,仍不能打印,请看下一步。 2、检查打印机与计算机之间的信号传输线是否可靠连接,检查并重新连接,如果打印机仍不能打印,请看下一…

Java线程Thread类常用方法

文章目录 1. start():启动线程,使其执行run()方法中的代码。2. run():线程的执行逻辑,需要在该方法中定义线程要执行的代码。3. sleep(long millis):使当前线程暂停指定的毫秒数,进入阻塞状态。4. join()&a…

【C++】红黑树封装map和set

文章目录 一、map和set源码剖析二、红黑树的迭代器1.begin()与end()2.operator()与operator--() 三、set的模拟实现四、map的模拟实现五、完整代码实现1.RBTree.h2.set.h3.map.h5.Test.cpp 一、map和set源码剖析 我们知道,map和set的底层是红黑树,但是我…

如何用Python快速搭建一个文件传输服务

当我的朋友需要把他电脑上面的文件从他的电脑传递到我电脑上的时候,我只需要启动服务 启动服务! 他打开web界面 就能把文件传递到我电脑上(还能够实时显示进度) 文件就已经在我电脑上的uploads文件夹里面了 项目结构如下 templat…

python浮点运算不准确

1.问题 1.12.2的最后结果并不等于3.3 2. 解决方法 错误示范 引入了Decimal计算,但是计算类型是float型,依然计算不准确 正确解决方法 把类型转化为字符串引入计算

动手实战 | 使用 Transformers 包进行概率时间序列预测

最近使用深度学习进行时间序列预测而不是经典方法涌现出诸多创新。本文将为大家演示一个基于 HuggingFace Transformers 包构建的概率时间序列预测的案例。 概率预测 通常,经典方法针对数据集中的每个时间序列单独拟合。然而,当处理大量时间序列时&…

spring中的扩展点解析以及实践使用

文章目录 1、ApplicationContextInitializer2、BeanDefinitionRegistryPostProcessor3、BeanFactoryPostProcessor4、InstantiationAwareBeanPostProcessor5、SmartInstantiationAwareBeanPostProcessor6、BeanFactoryAware7、ApplicationContextAwareProcessor8、BeanNameAwar…

查找文件所在的具体位置

Linux Command 命令: find – walk a file hierarchy (遍历文件层次结构) ;DESCRIPTION 描述: 在指定目录下查找文件和目录, 可以使用不同的选项来过滤和限制查找的结果 ; Grammar Format $ find <在哪个路径下查找> <可选参数…> 常用选项 -name <pattern>…

【javaEE面试题(四)线程不安全的原因】【1. 修改共享数据 2. 操作不是原子性 3. 内存可见性 4. 代码顺序性】

4. 多线程带来的的风险-线程安全 (重点) 4.1 观察线程不安全 static class Counter {public int count 0;void increase() {count;} } public static void main(String[] args) throws InterruptedException {final Counter counter new Counter();Thread t1 new Thread(()…

VMware16.0安装教程和创建

许可证&#xff1a; ZF3R0-FHED2-M80TY-8QYGC-NPKYFYF390-0HF8P-M81RQ-2DXQE-M2UT6ZF71R-DMX85-08DQY-8YMNC-PPHV8设置网络 添加镜像 下载centos7镜像网址https://mirrors.aliyun.com/centos/7/isos/x86_64/?spma2c6h.25603864.0.0.d7724511YPrZpg win10镜像地址https://ww…

Linux+Docker+Gitlab+Jenkins+虚拟内存

最近想研究一下怎么自动化发布项目,于是找到了gitlab+jenkins这个组合,正好借机也研究一下最近很火的docker技术。本篇共分为五部分,分别为安装要求,内存虚拟化,安装docker,安装gitlab,安装jenkins。 一、 安装要求 1 Docker安装要求: 1.1 操作系统 Docker只支持64…

unittest单元测试

java的单元测试框架Junit和TestNG&#xff0c;python里面也有单元测试框架-unittest,相当于是一个python版的junit。python里面的单元测试框架除了unittest,还有一个pytest框架&#xff0c;但是用的比较少 unittest注意点&#xff1a; 导入unittest模块 类名的第一个字母大写&…

代码随想录算法学习心得 40 | 139. 单词拆分、背包问题总结...

一、单词拆分 链接&#xff1a;力扣 描述&#xff1a;给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 思路如下&…

【Linux | Shell】Linux 安全系统 —— 用户、组、文件权限 - 阅读笔记

目录 一、Linux 的安全性1.1 /etc/passwd 文件1.2 /etc/shadow 文件1.3 添加新用户 —— useradd1.4 删除用户 —— userdel1.5 修改用户 —— usermod、passwd、chpasswd 二、使用 Linux 组2.1 /etc/group 文件2.2 创建新组 —— groupadd2.3 修改组 —— groupmod 三、理解文…

Jenkins可持续集成Python自动化脚本

目录 前言 一、Jenkins搭建在Windows上 二、Jenkins搭建在Linux上 &#x1f381;更多干货 完整版文档下载方式&#xff1a; 本文讲解Jenkins如何每次定时的从SVN服务器上拉取最新的代码并执行本地库里的脚本 前言 1、本地代码库目录F:\5i5jautest内有测试文件all_tests.…

Attention,注意力机制

在机器视觉任务中&#xff0c;每一张图片都有重点区域&#xff0c;而非每一个像素对模型理解图片都同等重要。 在自然语言处理任务中&#xff0c;每一段文字都有重点词语&#xff0c;而非每一个字对模型理解语句都同等重要。 如此&#xff0c;在神经网络模型中引入注意力&#…

做投票小程序线上投票制作制作图片投票链接如何做投票小程序

小程序投票活动如何做&#xff1f;很多企业在运营当中&#xff0c;都会通过投票活动来进行推广&#xff0c;从而达到吸粉、增加用户粘度等效果。而此类投票活动&#xff0c;通过小程序就可以实现&#xff0c;操作简单。 我们现在要以“时尚新态度”为主题进行一次投票活动&…

WiFi 时钟+本地温度

[ WiFi 时钟 ] [ WiFi 天气时钟 ] [ WiFi 时钟本地温度 ] 夏天到了&#xff0c;显示器上放一个时钟&#xff0c;顺便实时测量本地室温&#xff0c;看看空调工作是否正常也算是个实用制作。 用到零件共 4 个&#xff1a; 400孔面包板 &#xff08; 大号…

docker配置nacos

1 拉取nacos镜像并启动 docker pull nacos/nacos-server 2 启动nacos命令 docker run -d --name nacos -p 8848:8848 -e PREFER_HOST_MODEhostname -e MODEstandalone nacos/nacos-server 至此&#xff0c;我们已经可以使用nacos服务&#xff0c;UI地址:http://:8848/nacos …