顯示廣告
隱藏 ✕
※ 本文為 dinos.bbs. 轉寄自 ptt.cc 更新時間: 2012-12-14 14:30:23
看板 Soft_Job
作者 chinoyan ()
標題 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)
sawang:讚1F 12/14 12:45

--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 190 
作者 chinoyan 的最新發文:
點此顯示更多發文記錄
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇