2015-04-17 11 views
5

Per rendere la domanda più comprensibile, c'è un software chiamato CheatEngine, e in pratica quello che fa è, raccoglie tutti i byte del software con cui stai cercando di lavorare e puoi selezionarne uno e cambiare il valore.Java: come ottengo i valori dagli altri programmi?

Ad esempio, si desidera modificare il punteggio di qualsiasi gioco. Puoi cercare il valore del punteggio corrente e cambiarlo in qualsiasi cosa desideri.

Ora la domanda è, è possibile creare qualcosa del genere usando java, che prenderebbe tutti i dati dalla memoria, che il software si sta cercando di "hackerare" in, usi?

Fammi sapere quali origini dovrei cercare.

P.S. Se il post ha errori di grammatica, mi dispiace. Vengo dalla Russia e non sono il migliore in inglese.

+1

In Java, senza metodi nativi, no. – immibis

+0

possibile duplicato di [Accesso memoria con Java] (http://stackoverflow.com/questions/19418900/accessing-memory-with-java) – dit

+0

@dit: Hai ragione, non ha avuto la risposta attesa da OP. Cancellato il mio commento – LittlePanda

risposta

4

Java è molto limitato in accesso diretto alla memoria (per una buona ragione), quindi è molto improbabile che questo può essere fatto con Java. Il JNI può eseguire operazioni (gestite o non sicure) del SO, quindi puoi provare a chiamare qualsiasi funzione C che restituisce i dati in una determinata posizione di memoria, ma suppongo che sarebbe meglio usare C in primo luogo (non Java), poi.

+0

Quindi forse non voglio cambiare la memoria .. E se voglio leggere la memoria? – user2852371

+3

@ user2852371 Allora questa risposta si applica ancora, no? – immibis

+0

Lo stesso vale per la lettura della memoria al di fuori della Java Virtual Machine. – user1438038

1

In base alla definizione della lingua, java viene eseguito in una sandbox nella JVM. Quindi è impossibile accedere ad altri posti nella memoria al di fuori di esso. Inoltre, Java non può accedere a posizioni specifiche nella memoria, non ci sono puntatori.

+2

Tu dovrebbe probabilmente leggere su 'sun.misc.Unsafe'. Può sicuramente accedere a posizioni specifiche in memoria. –

+0

Grazie, leggendo ora. Sembra che farà parte dell'API Java 9. – andreadi

-1

Come noto, java non fornisce supporto per accedere direttamente alla memoria. Se vuoi ancora accedere alla memoria devi usare JNI. Ma non è neanche una buona opzione. Quindi penso che il modo migliore sia quello di rinunciare a Java per il tuo scopo e provare a usare C o C++. C# .NET sarebbe anche possibile.

P.S Come suggerito da @PhilipWhitehouse potrebbe esserci un modo con pacchetto sun.misc.Unsafe. Prova a leggere su http://mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/

+0

'sun.misc.Unsafe' ti dà accesso diretto alla memoria. Ma non è chiaro se si possa accedere alla memoria al di fuori del processo Java. –

+0

@PhilipWhitehouse Non ne ero a conoscenza prima. Lo aggiungerò alla mia risposta. Grazie per il commento –

Problemi correlati