中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何修改游戲內存

發布時間:2021-11-21 17:37:07 來源:億速云 閱讀:529 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python如何修改游戲內存,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

游戲的安裝

關于安裝的這一塊....我以前是在網站上下載的,現在再去找估計隨便百度下載一個就可以了,這里就用我之前的吧

鏈接:https://pan.baidu.com/s/1Ydiy1Q9QqKNxoyAkIlzp7Q
提取碼:1234

Python如何修改游戲內存

安裝下載后切記要避免點到一些廣告上去,和一些瀏覽器的鎖定勾選記得取消掉。 進入游戲是全屏,不方便我們觀察效果以及編寫程序,可以在選項中取消勾選全屏

Python如何修改游戲內存

思路

一句話總結

我的理解就是,所有的程序的本質都是變量與數值的集合。

比如說咱們玩的游戲它也是一個程序吧,游戲的角色血量、藍條是不是都是一個數值儲存在變量內,那么如果我們找到存放這個數值的變量(也可以叫做地址),修改這個變量的值,那么是不是就可以做到給咱們得人物加血量、修改人物等級的一系列操作。

大概的思路

首先確定修改哪一款游戲的數據,然后確定修改游戲的哪一個數據,然后去尋找這個游戲內這個數據的地址,然后去修改這個數據。

聽起來有點繞。好吧,是我的語文學習的太差啦

實戰

確定修改哪一款游戲的數據

這里需要利用到一個句柄查看工具這里我給大家已經下載好了。

鏈接:https://pan.baidu.com/s/1ubpe7bmIsojbcX3z_24CxA
提取碼:1234

把放大鏡拖動到游戲的標題上,就可以查看到這個窗口的所有信息

Python如何修改游戲內存

可以看下咱們任務管理器中的進程ID是否也是39156

Python如何修改游戲內存

代碼
import win32process
# 進程模塊
import win32gui
# 界面
# none  窗口的類名                窗口的ID
window_handle = win32gui.FindWindow(None, "植物大戰僵尸中文版") #Pyspy++  窗口句柄win32gui.
print(window_handle)
process_id = win32process.GetWindowThreadProcessId(window_handle)[1] #取進程ID
print(process_id)
process_handle = win32api.OpenProcess(0x1F0FFF, False, process_id)#進程句柄
# 進程句柄是否可以被子進程繼承,一般選false(不可被繼承)
# #這種是用線程內核對象的默認安全屬性, 子進程不能繼承父進程的句柄,不可以繼承,
# 則子進程是不可以通過句柄訪問改內核對象。
print(process_handle)

關于這個代碼我講解一下 ,如何確定一款游戲是由進程的句柄來判斷的,而我們手動取到游戲的窗口ID 與類名后,可以得到進程ID,由進程ID可以得到游戲句柄。

地址的尋找

陽光總值150, 種植一個豌豆需要100,非常不夠用。咱們現在需要實現的功能是無限陽光,達到無限種植豌豆的效果。這里需要用到CE軟件,我給大家提供。

鏈接:https://pan.baidu.com/s/1mkEmVUonDBS6zBjJjYDFSQ
提取碼:1234

Python如何修改游戲內存

視頻教程

Python永遠的神,實戰開發游戲內存輔助!

修改數據

由于咱們是用Python這門編程語言來實現的,這里需要用Python去調C,用到動態鏈接庫,所以要配置一下內核模塊(動態鏈接庫kernel32.dll),C:\Windows\System32\kernel32.dll放到這個目錄下,我這里也給大家下載好了。

鏈接:https://pan.baidu.com/s/1kAwg7PE_zZP_sqkaluD4QA
提取碼:1234

代碼
import win32api
# 系統模塊
import win32process
# 進程模塊
import win32gui
# 界面
import ctypes
# C語言調用類型
# python中使用ctypes模塊可以在python中直接調用C/C++。首先要將C/C++編譯成動態庫
# (.dl或.so),之后python中調用即可。
# C類型 調用約定
# kernel32.WriteProcessMemory(int(process_handle),0x1C0A4F98,byref(c_int(1000)),4,byref(c_int(0)))
kernel32 = ctypes.windll.LoadLibrary(r"C:\Windows\System32\kernel32.dll ")#加載內核模塊  動態鏈接庫
date1 = ctypes.c_long()
kernel32.ReadProcessMemory(int(process_handle),0x006A9EC0,ctypes.byref(date1),4,None)#None讀取的一個數據的大小 尺寸 長度
# 緩沖區,各種語言的文本要求不一樣,為了兼容,那么自定義一個文本
# 地址會變,但是里面存儲的數據不會變。
print(date1.value)
date2 = ctypes.c_long()
kernel32.ReadProcessMemory(int(process_handle),date1.value+0x768,ctypes.byref(date2),4,None)
print(date2.value)
date3 = ctypes.c_long()
kernel32.ReadProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(date3),4,None)
print(date3.value)
sun = input("請輸入你要改變的陽光值:")
# kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))),4,None)
kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))), 4, None)
# 關閉進程
kernel32.CloseHandle(int(process_handle))

效果

Python如何修改游戲內存

完整的源碼

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2019/4/30 16:00
# @Author  : 善念
 
import win32api
# 系統模塊
import win32process
# 進程模塊
import win32gui
# 界面
import ctypes
# C語言調用類型
# python中使用ctypes模塊可以在python中直接調用C/C++。首先要將C/C++編譯成動態庫
# (.dl或.so),之后python中調用即可。
# none  窗口的類名                窗口的ID
window_handle = win32gui.FindWindow(None, "植物大戰僵尸中文版") #Pyspy++  窗口句柄win32gui.
print(window_handle)
process_id = win32process.GetWindowThreadProcessId(window_handle)[1] #取進程ID
print(process_id)
process_handle = win32api.OpenProcess(0x1F0FFF, False, process_id)#進程句柄
# 進程句柄是否可以被子進程繼承,一般選false(不可被繼承)
# #這種是用線程內核對象的默認安全屬性, 子進程不能繼承父進程的句柄,不可以繼承,
# 則子進程是不可以通過句柄訪問改內核對象。
print(process_handle)
# C類型 調用約定
# kernel32.WriteProcessMemory(int(process_handle),0x1C0A4F98,byref(c_int(1000)),4,byref(c_int(0)))
kernel32 = ctypes.windll.LoadLibrary(r"C:\Windows\System32\kernel32.dll ")#加載內核模塊  動態鏈接庫
date1 = ctypes.c_long()
kernel32.ReadProcessMemory(int(process_handle),0x006A9EC0,ctypes.byref(date1),4,None)#None讀取的一個數據的大小 尺寸 長度
# 緩沖區,各種語言的文本要求不一樣,為了兼容,那么自定義一個文本
# 地址會變,但是里面存儲的數據不會變。
print(date1.value)
date2 = ctypes.c_long()
kernel32.ReadProcessMemory(int(process_handle),date1.value+0x768,ctypes.byref(date2),4,None)
print(date2.value)
date3 = ctypes.c_long()
kernel32.ReadProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(date3),4,None)
print(date3.value)
sun = input("請輸入你要改變的陽光值:")
# kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))),4,None)
kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))), 4, None)
kernel32.CloseHandle(int(process_handle))
# 關閉進程

關于“Python如何修改游戲內存”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三门县| 阿坝| 石屏县| 乌鲁木齐县| 泰顺县| 右玉县| 齐河县| 平度市| 连州市| 阳东县| 浏阳市| 敦化市| 舒城县| 岚皋县| 蓬莱市| 长宁县| 龙江县| 南丹县| 祁连县| 泉州市| 阳新县| 越西县| 兴海县| 台湾省| 浙江省| 浦东新区| 昭平县| 巴东县| 株洲县| 安阳县| 德阳市| 太白县| 新和县| 汕尾市| 德兴市| 虹口区| 布拖县| 高淳县| 万宁市| 瓦房店市| 铜川市|