看板 Soft_Job 關於我們 聯絡資訊
※ 引述《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:讚 12/14 12:45
jodo1984:請問您是說程式一開始執行所佔的記憶體位紙嗎? 12/15 01:03
wendly777:有沾到邊..但其實是global/static variable才是固定位址 12/15 02:28
wendly777:動態alloc或stack都是每次執行都可能不一樣 12/15 02:29
chinoyan:jodo,你推文發問的方式,很難懂 12/15 06:08
chinoyan:不知道你在問那一部份 12/15 06:09
jodo1984:http://ppt.cc/gen.php 小算盤每次的位址都不同 12/16 23:19
jodo1984:一開始我用虛擬記憶體的基底位址去推算 12/16 23:20
jodo1984:但是我發覺這是不可行的(可能我用的方法不對) 12/16 23:20
jodo1984:所以我才想問看看有沒有什麼方法可以讀實際記憶體位址 12/16 23:21
jodo1984:補網址 http://ppt.cc/QiI_ 12/16 23:22
chinoyan:不一樣原因上面不是解釋了嗎? 12/18 13:41