2015-04-17 53 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我之前没有意识到这一点。我会将其添加到我的答案中。感谢您的评论 –

相关问题