Windows 逆向使用 CE 工具挖掘关键数据内存真实地址 ( CE 找出子弹数据内存地址是临时地址 | 挖掘真实的子弹数据内存地址 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows 逆向使用 CE 工具挖掘关键数据内存真实地址 ( CE 找出子弹数据内存地址是临时地址 | 挖掘真实的子弹数据内存地址 )相关的知识,希望对你有一定的参考价值。
文章目录
一、CE 找出子弹数据内存地址是临时地址
在上一篇博客 【Windows 逆向】使用 CE 分析内存地址 ( 运行游戏 | 使用 CE 工具分析游戏内子弹数量对应的内存地址 | 内存地址初步查找 | 使用二分法定位最终的内存地址 ) 中 , 分析到子弹的数据对应的地址是 019FFB48
地址 ;
上述 019FFB48
地址是一个临时地址 , 这个临时地址每次启动都会改变 ; 再次启动 , 中广核个地址又变成了 21160114
地址 ;
二、挖掘真实的子弹数据内存地址
使用 CE 定位出了子弹数据的地址是 0x21160114 地址 ; 可以找到一个最终的子弹数据地址 , 查找方式如下 :
目的是为了计算 0x21160114
地址值 , 是由哪些值计算出来的 ;
1、找出哪些指令访问了子弹数据地址 0x21160114
右键点击找出的 子弹数据 临时内存地址 , 在弹出的菜单栏中选择 " 找出是什么访问了这个地址 " , 或者使用 F5 快捷键 ;
弹出提示对话框 , 选择 " 是 " ;
弹出如下对话框 , 点击 " 停止按钮 " ,
调试就会暂停 ;
下图中 , 左侧的计数 , 表示该指令被访问的次数 ,
下面的这些指令 , 访问了 0x21160114
地址 ;
这些指令 , 都有一些规律 , 这些指令都是 esi 寄存器的值 加上 000000CC
十六进制数值 ;
esi+000000CC
2、查看 0x21160114 地址是如何计算出来的 ( ESI 寄存器的值 0x21160048 + 000000CC 立即数 相加得到 )
双击第一条指令 16B2C0ED - mov eax,[esi+000000CC]
, 得到如下数据 , 其中得到 EAX 和 ESI 两个寄存器值 :
EAX=00000061
ESI=21160048
其中 ESI 寄存器的值 ( 0x21160048 ) + 000000CC 立即数 , 计算结果如下 :
0 x 21160048 + 0 x 000000 C C = 0 x 21160114 \\rm 0x21160048 + 0x000000CC = 0x21160114 0x21160048+0x000000CC=0x21160114
0x21160114 地址就是子弹数据的真实地址 , 这个地址是 ESI 寄存器的值 加上 0xCC 立即数 , 得到的地址 ;
具体的数据如下 :
EAX=00000061
EBX=0799BB70
ECX=00000000
EDX=00000001
ESI=21160048 ★
EDI=00000001
EBP=00000000
ESP=0019F2F0
EIP=16B2C0F3
指针基址可能是 =21160048
16B2C0E6 - je mp.CBasePlayerItem::DestroyItem+20D
16B2C0E8 - mov ecx,00000001
16B2C0ED - mov eax,[esi+000000CC] ★
16B2C0F3 - mov edx,[esi+000000D0]
16B2C0F9 - cmp eax,edx
查询另外 3 个数据 , 这 4 条指令 , 都是同样的值 ;
3、查询指针基址 21160048
ESI 寄存器 中有个值 0x21160048 , 这个值不知道是怎么来的 , 这里就需要在整个内存中搜索该值 , 查找哪些内存地址中保存了来值 ;
进而查找 , 是哪条指令 , 计算出了该值 , 或者说是 访问了该值 ;
勾选 " 十六进制 " , 拷贝 21160048
值到搜索框中 , 左侧搜索出来的就是存在 0x21160048 值的地址 ;
选择查找结果的第一个 , 复制到下方地址列表 , 按 F5 查看哪些指令访问了 0x21160048 地址 , 这里的访问指的是 读取 , 写出 操作 ;
开枪 , 没有任何反应 ;
直到选择查找结果的第二个 , 复制到下方地址列表 , 按 F5 查看哪些指令访问了 0x21160048 地址 , 这里的访问指的是 读取 , 写出 操作 ;
开枪 , 才有反应 ;
指针基址可能是 =0799C144 ★
EAX=00000000
EBX=00000005
ECX=21160048
EDX=00000000
ESI=0799BB70
EDI=0799C144
EBP=00000000
ESP=0019F304
EIP=16B100F0
指针基址可能是 =0799C144 ★
16B100E3 - lea edi,[esi+000005D0]
16B100E9 - mov ebx,00000006
16B100EE - mov ecx,[edi]
16B100F0 - cmp ecx,ebp
16B100F2 - je mp.CBasePlayer::PlayerDeathThink+617D
选择查找结果的第三个 , 复制到下方地址列表 , 按 F5 查看哪些指令访问了 0x21160048 地址 , 这里的访问指的是 读取 , 写出 操作 ;
开枪 , 才有反应 ;
指针基址可能是 =0799BB70 ★
拷贝的数据如下 :
EAX=00000001
EBX=00000001
ECX=21160048
EDX=16B463F8
ESI=0799BB70
EDI=16D40640
EBP=0000000E
ESP=0019F320
EIP=16AFB378
指针基址可能是 =0799BB70 ★
16AFB36A - jne mp.info_map_parameters+4E42
16AFB36C - mov [esi+00000384],bl
16AFB372 - mov ecx,[esi+000005E8]
16AFB378 - test ecx,ecx
16AFB37A - je mp.info_map_parameters+4E76
调试第 4 个内存地址 , 得到的指针基址是 : 指针基址可能是 =0799BB70 ★
EAX=21160048
EBX=0799BB70
ECX=00000000
EDX=00000001
ESI=21160048
EDI=00000001
EBP=00000000
ESP=0019F2F0
EIP=16B2C0E6
指针基址可能是 =0799BB70 ★
16B2C0D8 - cmp esi,[ebx+000005EC]
16B2C0DE - jne mp.CBasePlayerItem::DestroyItem+20D
16B2C0E0 - cmp eax,[ebx+000005EC]
16B2C0E6 - je mp.CBasePlayerItem::DestroyItem+20D
16B2C0E8 - mov ecx,00000001
调试第 5 个内存地址 , 得到的指针基址是 : 指针基址可能是 =103508BC ★
EAX=103508BC
EBX=15A3C194
ECX=21160048
EDX=00000002
ESI=00000000
EDI=16ACE3C0
EBP=00000014
ESP=0019FAD0
EIP=16ACE3CB
指针基址可能是 =103508BC ★
16ACE3C4 - test eax,eax
16ACE3C6 - je mp.GetNewDLLFunctions+8A4
16ACE3C8 - mov ecx,[eax+7C]
16ACE3CB - test ecx,ecx
16ACE3CD - je mp.GetNewDLLFunctions+8A4
以上是关于Windows 逆向使用 CE 工具挖掘关键数据内存真实地址 ( CE 找出子弹数据内存地址是临时地址 | 挖掘真实的子弹数据内存地址 )的主要内容,如果未能解决你的问题,请参考以下文章
Windows 逆向使用 CE 工具挖掘关键数据内存真实地址 ( CE 找出子弹数据内存地址是临时地址 | 挖掘真实的子弹数据内存地址 )
Windows 逆向使用 Cheat Engine 工具进行指针扫描挖掘关键数据内存真实地址 ( 指针扫描 )
Windows 逆向使用 CE 工具挖掘关键数据内存真实地址 ( 逐层分析分析 静态地址 到 动态地址 的寻址 + 偏移 过程 ) ★
Windows 逆向使用 CE 工具挖掘关键数据内存真实地址 ( 查找子弹数据的动态地址 | 查找子弹数据的静态地址 | 静态地址分析 | 完整流程 ) ★
Windows 逆向OD 调试器工具 ( CE 工具通过查找访问的方式找到子弹数据基地址 | 使用 OD 工具附加游戏进程 | 在 OD 工具中查看 05869544 地址数据 | 仅做参考 )(代码