【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( CE 找出子弹数据内存地址是临时地址 | 挖掘真实的子弹数据内存地址 )
文章目錄
- 一、CE 找出子彈數據內存地址是臨時地址
- 二、挖掘真實的子彈數據內存地址
- 1、找出哪些指令訪問了子彈數據地址 0x21160114
- 2、查看 0x21160114 地址是如何計算出來的 ( ESI 寄存器的值 0x21160048 + 000000CC 立即數 相加得到 )
- 3、查詢指針基址 21160048
一、CE 找出子彈數據內存地址是臨時地址
在上一篇博客 【Windows 逆向】使用 CE 分析內存地址 ( 運行游戲 | 使用 CE 工具分析游戲內子彈數量對應的內存地址 | 內存地址初步查找 | 使用二分法定位最終的內存地址 ) 中 , 分析到子彈的數據對應的地址是 019FFB48 地址 ;
上述 019FFB48 地址是一個臨時地址 , 這個臨時地址每次啟動都會改變 ; 再次啟動 , 中廣核個地址又變成了 21160114 地址 ;
二、挖掘真實的子彈數據內存地址
使用 CE 定位出了子彈數據的地址是 0x21160114 地址 ; 可以找到一個最終的子彈數據地址 , 查找方式如下 :
目的是為了計算 0x21160114 地址值 , 是由哪些值計算出來的 ;
1、找出哪些指令訪問了子彈數據地址 0x21160114
右鍵點擊找出的 子彈數據 臨時內存地址 , 在彈出的菜單欄中選擇 " 找出是什么訪問了這個地址 " , 或者使用 F5 快捷鍵 ;
彈出提示對話框 , 選擇 " 是 " ;
彈出如下對話框 , 點擊 " 停止按鈕 " ,
調試就會暫停 ;
下圖中 , 左側的計數 , 表示該指令被訪問的次數 ,
下面的這些指令 , 訪問了 0x21160114 地址 ;
這些指令 , 都有一些規律 , 這些指令都是 esi 寄存器的值 加上 000000CC 十六進制數值 ;
esi+000000CC2、查看 0x21160114 地址是如何計算出來的 ( ESI 寄存器的值 0x21160048 + 000000CC 立即數 相加得到 )
雙擊第一條指令 16B2C0ED - mov eax,[esi+000000CC] , 得到如下數據 , 其中得到 EAX 和 ESI 兩個寄存器值 :
- EAX=00000061
- ESI=21160048
其中 ESI 寄存器的值 ( 0x21160048 ) + 000000CC 立即數 , 計算結果如下 :
0x21160048+0x000000CC=0x21160114\rm 0x21160048 + 0x000000CC = 0x211601140x21160048+0x000000CC=0x21160114
0x21160114 地址就是子彈數據的真實地址 , 這個地址是 ESI 寄存器的值 加上 0xCC 立即數 , 得到的地址 ;
具體的數據如下 :
EAX=00000061 EBX=0799BB70 ECX=00000000 EDX=00000001 ESI=21160048 ★ EDI=00000001 EBP=00000000 ESP=0019F2F0 EIP=16B2C0F3指針基址可能是 =2116004816B2C0E6 - 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 分析
- 下一篇: 【Windows 逆向】使用 CE 工具