【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 数据查找技巧 | 地址访问调试 | 指令选择技巧 | MOV 汇编指令含义 | 基址值搜索 ) ★

本文主要是介绍【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 数据查找技巧 | 地址访问调试 | 指令选择技巧 | MOV 汇编指令含义 | 基址值搜索 ) ★,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、查找动态地址
  • 二、静态地址查找技巧
    • 1、地址访问调试
    • 2、指令选择技巧
    • 3、MOV 汇编指令含义
    • 4、基址值搜索





一、查找动态地址



以查找子弹数量内存为例 , 参考 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 查找子弹数据的动态地址 | 查找子弹数据的静态地址 | 静态地址分析 | 完整流程 ) ★ 一、查找子弹数据临时内存地址 博客章节 ;

首先 , 查找到子弹数据的 动态地址 05A59544 , 该步骤很容易 , 多次扫描内存 , 最后使用二分法 , 逐步找到最终的内存地址 ;

然后 , 就是根据 动态地址 05A59544 , 查找到该动态地址是如何计算出来的 ;





二、静态地址查找技巧



根据动态地址 , 查找对应的静态地址 , 以及 寻址 , 偏移 过程 ;


1、地址访问调试


右键点击该地址 , 选择 " 找出是什么访问了这个地址 F5 " 选项 , 就可以对该地址进行调试 , 查询哪个指令为该地址进行了赋值操作 , 也就是 子弹的个数 int 类型数据 是怎么写进去的 ;

也可以左键点击 , 选中该地址 , 直接按 F5 快捷键 ,

在这里插入图片描述

此时 , 可以查询 , 哪些汇编指令 , 访问了 子弹数据的 动态地址 05A59544 ;

在这里插入图片描述


2、指令选择技巧


选择指令的技巧 : 选择指令时 , 不会任意选择的 , 而是有一定的技巧 ;

优先选择

MOV 寄存器 , [寄存器 + 立即数]

格式的指令 , 进行基址查询 ;

在上述类型的指令中 , 优先选择

MOV EAX , [寄存器 + 立即数]

样式的指令 , 大部分游戏中的寄存器都是使用的 EAX 寄存器 ;


第一条指令 , 就符合上述要求 , 那么展开分析第一条指令 ;

在这里插入图片描述

指针基址可能是 =05A59478
05C1C0ED - mov eax,[esi+000000CC]
EAX=00000050
EBX=0E1DBB70
ECX=00000000
EDX=00000001
ESI=05A59478
EDI=00000001
EBP=00000000
ESP=0019F2F0
EIP=05C1C0F3指针基址可能是 =05A5947805C1C0E6 - je mp.CBasePlayerItem::DestroyItem+20D
05C1C0E8 - mov ecx,00000001
05C1C0ED - mov eax,[esi+000000CC]
05C1C0F3 - mov edx,[esi+000000D0]
05C1C0F9 - cmp eax,edx

3、MOV 汇编指令含义


MOV 指令格式 : 将 SRC 数值,写入到 DST 位置 ;

MOV DST,SRC

mov eax,[esi+000000CC] 汇编代码和含义 :

[esi+000000CC] 是 基址变址寻址 , 取出 esi 寄存器的值 05A59478 , 与 CC 相加 , 得到一个地址 05A59544 , 这个地址就是子弹数据的地址 , 读取该地址中的值 , 写入到 EAX 寄存器中 ;

从上述汇编代码中 , 可以知道 , 子弹数据的动态地址 05A59544 , 是由 基址 05A59478 加上立即数 CC 得来的 ;


4、基址值搜索


那么基址 05A59478 又是如何得来的呢 ;

搜索 基址值 所在内存位置 : 那么后续在整个内存中 , 搜索这个基址 05A59478 值 , 查询该值所在的地址 ;

F5 调试 基址值 如何计算得到的 : 然后查询该地址的值是哪条汇编指令计算出来的 , 需要使用 F5 调试 , 选择一条汇编指令进行分析 , 汇编指令选择方法 : 优先选择 MOV EAX , [寄存器 + 立即数] 样式的汇编指令 ;

这篇关于【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 数据查找技巧 | 地址访问调试 | 指令选择技巧 | MOV 汇编指令含义 | 基址值搜索 ) ★的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806425

相关文章

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常