29.第二阶段x86游戏实战2-遍历周围-花指令与二叉树数据结构(有如何阅读vm代码混淆代码)

news2024/10/16 23:59:52

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:28.第二阶段x86游戏实战2-遍历周围-通过附近NPC怪物血量的方式(初识vm代码)

上一个内容里写了通过打附近怪物找基址,最终到了一个看着像乱码的地方,代码被进行了vm(现在理解为代码混淆,用来让逆向人员无法正常分析),本次就开始写如何看这种被混淆的代码

首先来到下图位置,也就是上一个内容中通过打附近怪物追来的地方

然后给上图红框位置打断点,然后取消断点按CTRL+F9来到下图位置,也就是被混淆代码的位置,这种代码被称为花指令

然后可以看到下图红框,它们的内容是三个问号,这里可以把问号当成开始混淆代码的标记

然后关键点来了,混淆代码只是静态看着混淆,通过断点是可以看到正常的代码的,在下图红框位置打断点,也就是问号的前一行

断点住之后取消断点,然后按F8

通过F8执行了问号之后,会发现代码正常了,如下图红框,正常了之后不能使用鼠标滚轮上下翻不然还会乱,正常了就可以分析代码了

现在回顾一下上一个内容里得到的公式,[ecx+0x10]+0x8 是血量,然后现在找ecx的值,通过恢复的混淆代码可以看出ecx的值来自于esi,所以接下来再找esi

往上翻了很久发现了esi,如下图通过断点确定了它会执行,现在的公式[[ebx+0x148]+0x10]+0x8,然后再找ebx的值哪来的

如下图ebx的值来自于eax,如下图红框,给ebx赋值之前有一个call,所以eax的值来自于这个call的返回值,所以接下来需要进入call dword ptr[eax+0x48]里面

在下图红框位置打断点

它的参数好像是一个序号,然后取消断点按F7进入函数

然后会来到下图位置,通过下图红框可以得出这里是个循环,因为它把代码往上进行了跳转执行,这里应该就是遍历附近怪物的算法了,接下来开始更细致的分析

分析的代码

通过分析代码发现这里是二叉树的数据结构,所以接下来要介绍一下二叉树数据结构,首先现在有如下图1-30个数据,这30个数据(注意是30个数据不是30个数字,数据可以是内存地址、数字、文字等)使用二叉树常用存放法

如下图30个数据使用二叉树数据结构时存放的样子,数字的顺序放在什么位置是基于实现的算法来的,所以有些顺序会跟下图不一样,它也可能是无序的,一般高性能二叉树都会从小到大的顺序来存放数据(这里的高性能是指查询快插入慢)

现在假设要找第30个数据使用常规数据,也就是下图样子的方式来存放数据,那就会从1到30挨个对比要找30次才能找到第30个数据(别说从后往前找)

如果使用二叉树来找第30个数据,如下图只需要查询7次就可以找到第30个数据,如果要是上千上万的数据二叉树查询快的特性就会体现的很明显,下方的排序方式还只是一个简单是用脑子算出来的,如果真正要用的二叉树排序会比下图中的更合理,可能会达到三四次就能找到,然后现在带入代码

带入代码,如下图,这个函数有一个入参(或者说二叉树的序号),这个算法就是根据入参去二叉树里找一个数据,它用来确定找没找的条件是判断eax+0xD位置是不是非0,不是通过入参判断

然后看它的返回值,如下图它有两个retn,所以现在的公式 [[[eax+0x14]+0x148]+0x10]+0x8

然后eax的值最终来自于esi+0x4,现在的公式[[[[esi+0x4]+0x14]+0x148]+0x10]+0x8,然后再找esi的值

esi的值来自于ecx+0x54,现在的公式[[[[[ecx+0x54]+0x4]+0x14]+0x148]+0x10]+0x8,然后接下来返回到上一层继续找ecx的值来源

然后ecx来自于0xCEEFA4,现在的公式[[[[[[0xCEEFA4]+0x54]+0x4]+0x14]+0x148]+0x10]+0x8

通过公式测试,3F800000就是1.0

使用浮点数的方式显示内存

1.000000这意思是附近某npc是满血的

然后现在找一下基址,现在模块基址是0x750000

代码的位置0x9E0A12,0x9E0A12-0x750000

0x290A12

然后是附近npc列表的偏移,0x59EFA4


img

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

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

相关文章

到底是微服务,还是SOA?

引言:大概正式工作有5年了,换了三个大厂【也是真特么世道艰难,中国互联网人才饱和了】。基本上每个公司有的架构都不太相同,干过TOC和TOB的业务,但是大家用的架构都不太相同。有坚持ALL in one的SB,最后服务…

windows下安装、配置neo4j并服务化启动

第一步:下载Neo4j压缩包 官网下载地址:https://neo4j.com/download-center/ (官网下载真的非常慢,而且会自己中断,建议从以下链接下载) 百度网盘下载地址:链接:https://pan.baid…

李生——2024年特别推荐中国品牌艺术家

李生北京人,字玄鹤、云鹤,号墨湖斋,玄鹤楼,中国共产党党员。主要成就:中国著名书法家、国家高级书法师、中国当代正能量文艺工作者:时代标杆等荣誉称号,现为中国东方文化研究会科教文化艺术专业委员会副研究员。自幼喜…

基于Python的博客系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

JavaSE——泛型

目录 一、泛型的引入 二、泛型的好处 三、泛型介绍 四、泛型的语法 (一)泛型的声明 (二)泛型的实例化 五、泛型使用的注意事项和细节 六、泛型练习题1 七、自定义泛型 (一)自定义泛型类 (二)自定义泛型接口 (三)自定义泛型方法 八、泛型练习题2 九、泛型的继承和…

【Linux-进程间通信】vscode使用通信引入匿名管道引入

一、新系统,新软件 1.新系统 哈喽宝子们,从今以后我们不再使用风靡一时的CentOS系统了,因为CentOS已经不在维护了,各大公司几乎也都从CentOS转入其他操作系统了;我们现在由原来的CentOS系统切换到最新的Ubuntu系统&a…

向日葵下载教程以及三款远程控制工具推荐!!!

向日葵远程控制下载教程!! 亲爱的朋友们,如果你对远程控制软件有所需求,那么向日葵绝对是一个不错的选择。现在我将带你走一遍向日葵的下载流程。 1. 打开你的浏览器,输入“向日葵官方网站”,进入官方网站…

力扣之1398.购买了产品A和产品B却没有购买产品C顾客

题目: Sql 建表语句: Create table If Not Exists Customers (customer_id int, customer_name varchar(30)) Create table If Not Exists Orders (order_id int, customer_id int, product_name varchar(30)) Truncate table Customers insert in…

前端求职简历-待补充

当然可以,针对大厂的前端岗位,一个吸引人的简历应该突出你的技术能力、项目经验、教育背景以及任何能体现你学习能力和团队协作能力的证明。以下是一个简历大纲示例,你可以根据自己的实际情况进行调整: 个人信息 姓名联系方式&a…

如何在算家云搭建SadTalker(数字人)

一、SadTalker简介 SadTalker 是一个基于深度学习的AI 数字人制作工具,可以通过对照片中的人物进行动态化处理,生成具有头部运动和面部表情的数字人。该模型通过接收一张图片和一段音频文件,能够自动生成包含人脸动作(如张嘴、眨眼、移动头部…

comfyui工作流保姆级教程来啦(附整合包)!从入门到精通一文解决

一、SD主流 UI Stable Diffusion(SD)因为其开源特性,有着较高的受欢迎程度,并且基于SD的开源社区及教程、插件等,都是所有工具里最多的。基于SD,有不同的操作界面,可以理解为一个工具的不同客户…

网络编程(21)——通过beast库快速实现http服务器

目录 二十一、day21 1. 头文件和作用域重命名 2. reponse时调用的一些函数 3. http_connection a. 构造函数 b. start() c. process_request() d. create_response() e. create_post_response() f. write_response() 4. Server 5. 主函数 6. 测试 1)测…

AOP 面向切面编程

1.准备工作&#xff0c;创建maven项目 1. pom.xml 加入依赖 <dependencies><!--spring核心坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.6</version&…

【Python入门】提升 Python 水平的高级指南

如果你正在学习Python&#xff0c;那么你需要的话可以&#xff0c;点击这里&#x1f449;Python重磅福利&#xff1a;入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享&#xff01; Python是一种功能强大且灵活的编程语言&#xff0c;深受开发者喜爱。尽管Py…

番外篇 | 史上最全的关于CV的一些经典注意力机制代码汇总

前言:Hello大家好,我是小哥谈。注意力是人类认知系统的核心部分,它允许我们在各种感官输入中筛选和专注于特定信息。这一能力帮助我们处理海量的信息,关注重要的事物,而不会被次要的事物淹没。受到人类认知系统的启发,计算机科学家开发了注意力机制,这种机制模仿人类的这…

H5 Canvas 举牌小人

之前看到这种的举牌小人的图片觉得很有意思&#xff0c;最近有时间所以就尝试写写看。 在线链接 https://linyisonger.github.io/H5.Examples/?name./080.Canvas%20%E4%B8%BE%E7%89%8C%E5%B0%8F%E4%BA%BA.html 生成效果 实现代码 <!DOCTYPE html> <html lang"…

Spring Boot在医疗信息交互系统中的应用

第1章绪论 计算机已经从科研院所&#xff0c;大中型企业&#xff0c;走进了平常百姓家&#xff0c;Internet遍及世界各地&#xff0c;在网上能够用计算机进行文字草拟、修改、打印清样、文件登陆、检索、综合统计、分类、数据库管理等&#xff0c;用科学的方法将无序的信息进行…

运行第一个Java程序

准备条件&#xff1a;已经安装了Java环境 1.在桌面上的空白处单击右键&#xff0c;然后在“新建&#xff08;W&#xff09;”下拉列表中选择“文本文档”&#xff08;即左键单击“文本文档”&#xff09;# 2. 打开文本文档&#xff0c;左键单击“新建文本文档.txt - 记事本” …

Idea序列图插件-SequenceDiagram Core

&#x1f496;简介 SequenceDiagram Core 是一个 IntelliJ IDEA 插件&#xff0c;它允许开发者直接在 IDE中创建和编辑序列图&#xff08;Sequence Diagrams&#xff09;。序列图是 UML&#xff08;统一建模语言&#xff09;中的一种图表类型&#xff0c;用于描述对象之间如何…

FFmpeg的简单使用【Windows】--- 指定视频的时长

目录 功能描述 效果展示 代码实现 前端代码 后端代码 routers 》users.js routers 》 index.js app.js 功能描述 此案例是在上一个案例【FFmpeg的简单使用【Windows】--- 视频混剪添加背景音乐-CSDN博客】的基础上的进一步完善&#xff0c;可以先去看上一个案例然后再…