※ 本文為 dinos.bbs. 轉寄自 ptt.cc 更新時間: 2012-12-14 14:30:23
看板 Soft_Job
作者 標題 Re: [請益] 記憶體管理
時間 Fri Dec 14 04:26:38 2012
※ 引述《jodo1984 (XDDD)》之銘言:
: ※ 引述《jodo1984 (XDDD)》之銘言:
: : 今天上級指示 要我想辦法弄出一支程式, 最好是VB6 (冏)
: : 可以讀取電腦目前所有正在的執行應用程式
: : 記憶體內容與位置
: : 他們是說有點像遊戲修改大師, 我覺得有點像是window裝置管理員
: : 請問有前輩有寫過這種嗎?
: : 可以指點一下嗎? 謝謝
: : C可以做到嗎?
: 這個專案因為某些因素停擺了一陣子,現在主管又想到要我繼續開始....
: 之前已經做到可以撈到應用程式內部的記憶體資料
: 但是面臨了一些問題,想問看看前輩們有沒有類似的經驗
: 1.我是透過WINAPI去撈應用程式的資料,但是如果應用程式關掉重開或者
: 電腦重開機原本的存放內部記憶體位址就會更動(這是在XP的情況下)
與XP/W7無關
: 2.在WIN7或WIN98我所撈到的記憶體位址都是暫存的位址,原本的位址的資料
: 隨時都會更動
: 我在想是不是我透過API抓的位址資料都是虛擬位址的,所以有沒有辦法
: 直接存取到實體記憶體,請問各位前輩有類似的經驗或想法可以指點我嗎?
在WINDOWS裡所有32BIT程式都是拿到OS分配的虛擬記憶體
一般由0x400000開始為程式主體,以下為堆棧,
最大到0x7FFFFF,0x800000就到R0了
記憶體位址會變,和變數本身層級、指標、編譯器有關
以上為個人粗淺的理解,可能有錯
-----------------------------------------------------------
你的問題和 實體/虛擬 完全無關
以一層偏移來說:表示法[[401000]+1C]
你必需先找到其基址(固定位置)如0x401000,
用ReadProcessMemory 讀出內容如:0x5B1000 <<每次都不一樣
再加上偏移0x1C = 5B101C
再由ReadProcessMemory 讀出 0x5B101C裡的內容,才是你要的
其由401000(固定位置,內容不定)稱為基址,0x1C為其偏移
實務上,你必需要先找到0x5B101C,再反向找到其基址和偏移
要如何反向找到基址,則需要有些許的ASM基礎和反組譯的經驗
和寫GAME外掛一樣,有幾個關鍵字給您參考(大陸用語)
OD 反組譯軟體,Cheat Engine 記憶體修改軟體,基址,偏移
--
████ █ ★ ████ █ █ █
█ █ █ █ █ █ 超 級 熱 烈 歡 迎
█ ████ █ █ █ ████ █
█ █ █ █ ███★ █ █ 歡迎到嘉義版!
★███ █ █ █ █ █ █ █
訊馳電腦-路徑 → 嘉義市林森西路496號 →(05)2244-526 → 順發斜對面
※ 編輯: chinoyan 來自: 59.127.140.29 (12/14 04:28)
推 :讚1F 12/14 12:45
--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 191
回列表(←)
分享