2015-04-17 51 views
5

爲了讓問題更容易理解,有一個名爲的軟件CheatEngine,它的基本功能是收集您嘗試使用的軟件的所有字節,您可以選擇其中的任何字節並進行更改價值。Java:我如何從其他程序獲取值?

例如,您想更改任何遊戲的分數。您可以搜索當前分數的值,並將其更改爲任何您想要的值。

現在的問題是,是否有可能使用java創建類似這樣的內容,它將從內存中獲取所有數據,以及您試圖「入侵」到的軟件使用的內容?

讓我知道應該查找哪些來源。

P.S.如果帖子出現語法錯誤,我很抱歉。我來自俄羅斯,我不是英語最好的。

+1

在Java中,沒有本地方法,沒有。 – immibis

+0

[使用Java訪問內存]的可能的重複(http://stackoverflow.com/questions/19418900/accessing-memory-with-java) – dit

+0

@dit:你說得對,它沒有OP預期的答案。刪除我的評論。 – LittlePanda

回答

4

Java在直接內存訪問中非常受限制(出於一個很好的原因),所以用Java完成這個操作是不太可能的。 JNI可以執行(管理或不安全)操作系統操作,所以你可以嘗試調用任何返回給定內存位置數據的C函數,但是我想你最好先使用C(而不是Java),然後。

+0

因此,也許我不想改變內存。如果我想要讀取內存,該怎麼辦? – user2852371

+3

@ user2852371那麼這個答案仍然適用,不是嗎? – immibis

+0

這同樣適用於讀取Java虛擬機之外的內存。 – user1438038

1

通過語言定義java在JVM的沙箱中運行。所以不可能訪問外部存儲器中的其他地方。另外Java不能訪問內存中的特定位置,也沒有指針。

+2

您應該閱讀'sun.misc.Unsafe'。它絕對可以訪問內存中的特定位置。 –

+0

謝謝,現在閱讀。它似乎是Java 9 API的一部分。 – andreadi

-1

據我所知,java不支持直接訪問內存。如果你仍然想訪問內存,你必須使用JNI。但是,那也不是一個好選擇。 所以我認爲最好的方法是放棄Java的目的,並嘗試使用C或C++。 C#.NET也是可能的。

P.S 由於@PhilipWhitehouse建議可能有sun.misc.Unsafe包的一種方法。嘗試閱讀http://mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/

+0

'sun.misc.Unsafe'給你一些直接的內存訪問。但目前還不清楚您是否可以在Java流程之外獲得內存。 –

+0

@PhilipWhitehouse我之前沒有意識到這一點。我會將其添加到我的答案中。感謝您的評論 –