2015-04-17 16 views
5

Để làm cho câu hỏi dễ hiểu hơn, có một phần mềm được gọi là CheatEngine và về cơ bản, nó thu thập tất cả byte của phần mềm mà bạn đang cố gắng làm việc và bạn có thể chọn bất kỳ phần mềm nào và thay đổi giá trị.Java: Làm thế nào để tôi nhận được các giá trị từ các chương trình khác?

Ví dụ: bạn muốn thay đổi điểm số của bất kỳ trò chơi nào. Bạn có thể tìm kiếm giá trị của điểm hiện tại, và thay đổi nó thành những gì bạn muốn.

Bây giờ câu hỏi là, có thể tạo ra thứ gì đó như thế bằng cách sử dụng java, có thể lấy tất cả dữ liệu từ bộ nhớ, phần mềm mà bạn đang cố gắng "hack" vào, sử dụng không?

Hãy cho tôi biết tôi nên tìm kiếm nguồn nào.

P.S. Nếu bài đăng có lỗi ngữ pháp, tôi xin lỗi. Tôi đến từ Nga và tôi không phải là người giỏi nhất trong tiếng Anh.

+1

Trong Java, không có phương pháp gốc, không. – immibis

+0

có thể trùng lặp của [Truy cập bộ nhớ bằng Java] (http://stackoverflow.com/questions/19418900/accessing-memory-with-java) – dit

+0

@dit: Bạn nói đúng, nó không có câu trả lời mà OP mong đợi. Đã xóa nhận xét của tôi. – LittlePanda

Trả lời

4

Java bị hạn chế truy cập bộ nhớ trực tiếp (vì một lý do chính đáng), vì vậy rất khó có thể thực hiện điều này với Java. JNI có thể thực hiện các hoạt động OS (được quản lý hoặc không an toàn), vì vậy bạn có thể thử gọi bất kỳ hàm C nào trả về dữ liệu tại vị trí bộ nhớ đã cho, nhưng tôi cho rằng bạn nên sử dụng C ở vị trí đầu tiên (không phải Java), sau đó.

+0

Vì vậy, có lẽ tôi không muốn thay đổi bộ nhớ .. Nếu tôi muốn đọc bộ nhớ thì sao? – user2852371

+3

@ user2852371 Sau đó câu trả lời này vẫn áp dụng, không? – immibis

+0

Điều tương tự cũng áp dụng cho việc đọc bộ nhớ ngoài Máy ảo Java. – user1438038

1

Theo định nghĩa ngôn ngữ java chạy trong hộp cát trong JVM. Vì vậy, nó là không thể truy cập vào những nơi khác trong bộ nhớ bên ngoài của nó. Ngoài ra Java không thể truy cập các vị trí cụ thể trong bộ nhớ, không có con trỏ.

+2

Bạn có lẽ nên đọc trên 'sun.misc.Unsafe'. Nó chắc chắn có thể truy cập các vị trí cụ thể trong bộ nhớ. –

+0

Cảm ơn bạn, hãy đọc về nó ngay bây giờ. Dường như nó sẽ là một phần của API Java 9. – andreadi

-1

Như tôi biết bạn java không cung cấp hỗ trợ để truy cập bộ nhớ trực tiếp. Nếu bạn vẫn muốn truy cập bộ nhớ, bạn phải sử dụng JNI. Nhưng sau đó đó không phải là một lựa chọn tốt. Vì vậy, tôi nghĩ cách tốt nhất là từ bỏ Java cho mục đích của bạn và cố gắng sử dụng C hoặc C++. C# .NET sẽ là một quá có thể.

P.S Như @PhilipWhitehouse đề xuất có thể có cách với gói sun.misc.Unsafe. Hãy thử đọc trên http://mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/

+0

'sun.misc.Unsafe' cung cấp cho bạn một số quyền truy cập bộ nhớ trực tiếp. Nhưng nó không rõ ràng cho dù bạn có thể nhận được vào bộ nhớ bên ngoài quá trình Java. –

+0

@PhilipWhitehouse Tôi không biết điều đó trước đây. Tôi sẽ thêm vào câu trả lời của tôi. Cảm ơn vì bình luận –

Các vấn đề liên quan