所以我想製作一個可以從另一個程序讀取數據的Java程序。它來自遊戲,我不能(據我所知)從文件中獲取信息(它運行在服務器端)。我將如何做到這一點?目前我正在閱讀屏幕上的像素,但我認爲這不是正確的方法。我可以以某種方式訪問RAM嗎?信息將被存儲在那裏。讀取像素的問題是它應該在更多的計算機上運行,並且它們不一定具有相同的窗口分辨率/位置(可能是窗口模式)。有任何想法嗎?Java - 閱讀有關其他程序的信息?
回答
Java不一定是最好的語言。完成你想要做的事情的方法是製作一個注入式DLL,它使用指針從內存中讀取數據或使用ReadProcessMemory
從外部進程讀取內存。
如果您確定要爲此使用Java,則可以使用JNA Library訪問本機方法ReadProcessMemory
,並且可以使用類似CheatEngine這樣的工具來查找內存地址。
要Kernel32
加載(其中ReadProcessMemory
方法),你必須沿着這行做一些事情:
Kernel32 kernel32 = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
然後你需要知道你需要完成你想要做什麼的訪問權限,可在Microsoft's website找到。在這種情況下,我們只想讀取,因此我們需要的訪問權限是PROCESS_VM_READ (0x0010)
。然後,我們可以將此值存儲在一個const:
public static final int PROCESS_VM_READ = 0x0010;
然後如果我們仰望的ReadProcessMemory語法,我們發現語法是這樣的:
BOOL WINAPI ReadProcessMemory(
_In_ HANDLE hProcess,
_In_ LPCVOID lpBaseAddress,
_Out_ LPVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T *lpNumberOfBytesRead
);
ReadProcessMemory
把一個進程句柄(Pointer
在JNA中),要從中讀取的內存地址(可以說我們要從靜態值0x10101AAA82
中讀取),要讀取的緩衝區,值的大小以及輸出讀取的字節數的最後一個值,我們將設置爲因爲我們並不在乎。
因此,首先,我們要打開一個指向我們想從中讀取數據的過程中,假設你知道進程的PID:
Pointer process = kernel32.OpenProcess(PROCESS_VM_READ, pid);
,現在我們有句柄過程(即。的ReadProcessMemory
我們要讀將是的Memory,我們可以通過傳遞我們想要讀取值的大小實例化一個實例緩衝區中的第一個參數,可以說我要讀2字節在這種情況下。
Memory memory = new Memory(2);
現在,我們已經得到了我們需要閱讀我們的記憶中值的所有參數:
kernel32.ReadProcessMemory(process, 0x10101AAA82, memory, 2, null);
這意味着我們想要從過程process
從內存中讀取地址0x10101AAA82
2 bytes
到memory
內存。
現在我們可以得到我們剛纔讀到的價值了!如果我的值是一個整數,我們可以在memory
上調用getInt(offset)
,因爲我們想從頭開始讀取,所以我們將傳遞0
作爲偏移量。您也可以運行getString
,getChar
或javadoc上列出的任何東西。現在你有你的價值!
你實際上正在努力或多或少的編程一個機器人。 我建議試圖弄清楚負責信息傳遞的文件和/或端口是什麼(這可能很難)。 我不確定Java是否是最好的解決方法。 (Visual Basic可能?)
啊有趣。分析進來的數據包。它不是一個機器人(好吧,不是作弊),它應該收集關於你的遊戲的數據並分析它,這樣用戶就可以看到結果。 – StupidQuestions
這就是我將如何去做。但這可能會很棘手。考慮你必須對通信接口進行逆向工程,這不是每個人都說的代碼,而是編譯好的機器代碼。 –
- 1. 閱讀關閉整個程序,無論其他閱讀。
- 2. 的Java讀取其他信息在XML
- 3. 有關numpy.einsum()的其他信息()
- 4. 閱讀應用程序使用信息
- 5. 閱讀Redis信息
- 6. 獲取有關Windows上其他進程的信息
- 7. 從我的Java應用程序的其他程序獲取信息
- 8. 有關Ping的基本信息以及如何閱讀
- 9. 如何閱讀我的應用程序的Twitter狀態信息
- 10. 從Facebook閱讀信息
- 11. 從網站閱讀信息
- 12. 閱讀iPhone信息(VB.NET)
- 13. Lua閱讀dbus信息
- 14. Powershell「select-string」閱讀信息
- 15. 閱讀錯誤信息
- 16. Android閱讀聯繫信息
- 17. 閱讀gzip內容信息
- 18. 閱讀碼頭信息OSX?
- 19. 閱讀認證信息
- 20. PHP捲曲信息閱讀
- 21. 閱讀店主信息
- 22. MongoError其他信息
- 23. 閱讀其他應用程序中其他活動的生命週期狀態
- 24. 閱讀WPF應用程序的彙編版本信息
- 25. 程序在java中獲取有關Ram的信息
- 26. 有關散點圖的其他信息的問題
- 27. 閱讀由其他應用程序編寫的nfc標籤
- 28. 閱讀屬於其他應用程序的文件iOS
- 29. 閱讀其他應用程序配置文件的麻煩
- 30. 閱讀偏好的其他應用程序android
你有沒有考慮過使用不同的語言,如C++?您可以開發一個動態鏈接庫,您可以使用指針將其注入遊戲並從內存中讀取。否則,您可以使用JNA並使用'ReadProcessMemory'從進程中讀取內存。 –
唯一的問題是我不知道任何C語言。 – StupidQuestions
我剛剛對我的評論進行了擴充,併爲您留下了答案,希望它可以幫助您交配。 –