2015-04-17 6 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

Спасибо, прочитав об этом сейчас. Похоже, что он станет частью API Java 9. – andreadi

-1

Как я знаю, вы не поддерживаете доступ к памяти напрямую. Если вы все еще хотите получить доступ к памяти, вы должны использовать JNI. Но тогда это тоже нехороший вариант. Итак, я думаю, что лучший способ - отказаться от Java для вашей цели и попытаться использовать C или C++. C# .NET тоже будет возможно.

P.S Поскольку @PhilipWhitehouse предлагает, может быть, есть способ с sun.misc.Unsafe package. Попытаться прочитать на http://mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/

+0

'sun.misc.Unsafe' дает вам прямой доступ к памяти. Но неясно, можно ли получить доступ к памяти за пределами Java-процесса. –

+0

@PhilipWhitehouse Я не знал об этом раньше. Я добавлю это к моему ответу. Спасибо за комментарий –