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

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

文章目录

一、查找动态地址

二、静态地址查找技巧

1、地址访问调试

2、指令选择技巧

3、MOV 汇编指令含义

4、基址值搜索





一、查找动态地址


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


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


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






二、静态地址查找技巧


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



1、地址访问调试


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


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

image.png



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


image.png



2、指令选择技巧


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


优先选择


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


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


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


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


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



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

image.png




指针基址可能是 =05A59478
05C1C0ED - mov eax,[esi+000000CC]


EAX=00000050
EBX=0E1DBB70
ECX=00000000
EDX=00000001
ESI=05A59478
EDI=00000001
EBP=00000000
ESP=0019F2F0
EIP=05C1C0F3
指针基址可能是 =05A59478
05C1C0E6 - 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 Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
1896 1
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
872 20
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
368 6
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
690 4
|
数据库 数据安全/隐私保护 Windows
Windows远程桌面出现CredSSP加密数据修正问题解决方案
【10月更文挑战第30天】本文介绍了两种解决Windows系统凭据分配问题的方法。方案一是通过组策略编辑器(gpedit.msc)启用“加密数据库修正”并将其保护级别设为“易受攻击”。方案二是通过注册表编辑器(regedit)在指定路径下创建或修改名为“AllowEncryptionOracle”的DWORD值,并将其数值设为2。
10792 3
|
缓存 算法 数据处理
如何选择合适的内存访问模式
【10月更文挑战第20天】如何选择合适的内存访问模式
438 1
|
存储 容器
内存越界访问(Out-of-Bounds Access)
【10月更文挑战第12天】
1594 2
|
Rust 编译器
|
存储 缓存 数据安全/隐私保护
DMA(Direct Memory Access):直接内存访问
DMA(Direct Memory Access)是一种允许外设直接与内存进行数据传输的技术,无需 CPU 干预。它通过减轻 CPU 负担、提高数据传输效率来提升系统性能。DMA 的工作模式包括直接模式和 FIFO 模式,数据传输方式有单字传送和块传送,寻址模式有增量寻址和非增量寻址。通过缓存一致性协议、同步机制、数据校验和合理的内存管理,DMA 确保了数据在内存中的一致性和完整性。
|
存储 网络协议 大数据
一文读懂RDMA: Remote Direct Memory Access(远程直接内存访问)
该文档详细介绍了RDMA(远程直接内存访问)技术的基本原理、主要特点及其编程接口。RDMA通过硬件直接在应用程序间搬移数据,绕过操作系统协议栈,显著提升网络通信效率,尤其适用于高性能计算和大数据处理等场景。文档还提供了RDMA编程接口的概述及示例代码,帮助开发者更好地理解和应用这一技术。