CE是專門的內存編輯軟件,在自帶的教程step9中,是2組人減血遊戲。在這裡,不介紹如何玩贏這個遊戲,只是想介紹一下如何找內存基址。話不多說,直接上圖。
工具/原料
CE
方法/步驟
這是step9的界面:
在CE中選定程序的程序
搜索值498
點擊altack,值變成497,再次搜索
返回的列表中,只剩下唯一的一個地址了,雙擊該地址,加到入列表。
找出什麼是寫這個地址:
找到的指針是:05259F60
因為指針是某塊內存的值,所以,搜索該指針所在的地址:
返回2個內存地址,現在先測試第一個,方法同上,先把該地址加到列表中,再後選擇是什麼該問了該地址:
找到的地址是003349A0,再重複以上步驟:
這次返回了81個地址,這麼多地址,如果一個一個試,就太費時間了。先看一下有沒有基址(顏色是綠色的)。在圖中,找到一個基址,我們試著添加指針,看看結果。
記著偏移量和基址地址:
偏移量是怎麼來的呢?上面的每步找地址的步驟,都有一個結果,看下圖:
添加完指針後,看看結果值:
值明明是495,怎麼指針值卻是1140293632呢?我們把495改成100,看看指針值有沒有變化:
把495改成100後,指針值變成了1120403456,看來實際值跟指針值是存在對應關係的。現在要做的,就是把這種對應關係找出來。下圖是1-25值與之對應的指針值:
分析一下,就可以注意到,指針值的變化是有規律的:指針差存在次數規律。根據這種規律,用python寫成代碼,就能實現值與指針的一一對應。代碼如下:
[[email protected] ~]$ cat while.py
#!/usr/local/bin/python3.3
fast_long=1065353216
fast_short=8388608
loop=1
step=1
while loop <=1000:
for x in range(step):
print(str(int(fast_long))+' '+str(loop)+' '+str(int(fast_short)) + ' '+ str(x))
fast_long+=fast_short
loop+=1
step*=2
fast_short/=2
[[email protected] ~]$
下圖是運行結果:
現在隨便找個值測試一下:先把值改為1010,看看指針值是多少?
1010對就的指針值是1149009920,看看剛才程序的結果:
看來結果完全一致,至此,大功告成。本文主要介紹了找內存基址,及如何分析指針值與實際值的對應規律。