最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python修改游戲內(nèi)存的方法

 更新時間:2021年11月17日 16:42:34   作者:落伍的碼農(nóng)  
本文給大家分享一個通過Python來修改游戲內(nèi)存的方法,幫助大家更改游戲中的數(shù)據(jù),步驟很簡單,而且有視頻講解,感興趣的朋友一起看看吧

前言

大家好,我叫善念。上篇文章我許了一個愿,就是想讓大家多多關(guān)注我,然后我的粉絲就蹭蹭的漲了好幾百,謝謝大家的厚愛??墒俏野l(fā)現(xiàn)粉絲是漲了,三連變少了,謝謝大家這次給我三連,我一定再接再厲。有問題留在評論區(qū),我會一一回復(fù),謝謝大家!

這次要做的是修改一款單機游戲的數(shù)據(jù),學(xué)過C語言的朋友肯定經(jīng)常會看到有些老師講這個案例,就是《植物大戰(zhàn)僵尸》這個課題,不過此文我將帶大家利用Python來實現(xiàn)(2019原創(chuàng)課題,附視頻教程)。

游戲的安裝

關(guān)于安裝的這一塊....我以前是在網(wǎng)站上下載的,現(xiàn)在再去找估計隨便百度下載一個就可以了,這里就用我之前的吧

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

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

思路

一句話總結(jié)

我的理解就是,所有的程序的本質(zhì)都是變量與數(shù)值的集合。

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

大概的思路

首先確定修改哪一款游戲的數(shù)據(jù),然后確定修改游戲的哪一個數(shù)據(jù),然后去尋找這個游戲內(nèi)這個數(shù)據(jù)的地址,然后去修改這個數(shù)據(jù)。

聽起來有點繞。好吧,是我的語文學(xué)習(xí)的太差啦

實戰(zhàn)

確定修改哪一款游戲的數(shù)據(jù)

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

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

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

可以看下咱們?nèi)蝿?wù)管理器中的進程ID是否也是39156

代碼

import win32process
# 進程模塊
import win32gui
# 界面
# none  窗口的類名                窗口的ID
window_handle = win32gui.FindWindow(None, "植物大戰(zhàn)僵尸中文版") #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(不可被繼承)
# #這種是用線程內(nèi)核對象的默認安全屬性, 子進程不能繼承父進程的句柄,不可以繼承,
# 則子進程是不可以通過句柄訪問改內(nèi)核對象。
print(process_handle)

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

地址的尋找

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

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

視頻教程

Python永遠的神,實戰(zhàn)開發(fā)游戲內(nèi)存輔助!

修改數(shù)據(jù)

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

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

代碼

import win32api
# 系統(tǒng)模塊
import win32process
# 進程模塊
import win32gui
# 界面
import ctypes
# C語言調(diào)用類型
# python中使用ctypes模塊可以在python中直接調(diào)用C/C++。首先要將C/C++編譯成動態(tài)庫
# (.dl或.so),之后python中調(diào)用即可。
# C類型 調(diào)用約定
# 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 ")#加載內(nèi)核模塊  動態(tài)鏈接庫
date1 = ctypes.c_long()
kernel32.ReadProcessMemory(int(process_handle),0x006A9EC0,ctypes.byref(date1),4,None)#None讀取的一個數(shù)據(jù)的大小 尺寸 長度
# 緩沖區(qū),各種語言的文本要求不一樣,為了兼容,那么自定義一個文本
# 地址會變,但是里面存儲的數(shù)據(jù)不會變。
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)
# 關(guān)閉進程
kernel32.CloseHandle(int(process_handle))

效果

完整的源碼

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2019/4/30 16:00
# @Author  : 善念
 
import win32api
# 系統(tǒng)模塊
import win32process
# 進程模塊
import win32gui
# 界面
import ctypes
# C語言調(diào)用類型
# python中使用ctypes模塊可以在python中直接調(diào)用C/C++。首先要將C/C++編譯成動態(tài)庫
# (.dl或.so),之后python中調(diào)用即可。
# none  窗口的類名                窗口的ID
window_handle = win32gui.FindWindow(None, "植物大戰(zhàn)僵尸中文版") #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(不可被繼承)
# #這種是用線程內(nèi)核對象的默認安全屬性, 子進程不能繼承父進程的句柄,不可以繼承,
# 則子進程是不可以通過句柄訪問改內(nèi)核對象。
print(process_handle)
# C類型 調(diào)用約定
# 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 ")#加載內(nèi)核模塊  動態(tài)鏈接庫
date1 = ctypes.c_long()
kernel32.ReadProcessMemory(int(process_handle),0x006A9EC0,ctypes.byref(date1),4,None)#None讀取的一個數(shù)據(jù)的大小 尺寸 長度
# 緩沖區(qū),各種語言的文本要求不一樣,為了兼容,那么自定義一個文本
# 地址會變,但是里面存儲的數(shù)據(jù)不會變。
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))
# 關(guān)閉進程

所有的軟件下載包

鏈接:https://pan.baidu.com/s/18le7cp6i5OF6_Qhcj-BLFg
提取碼:1234

到此這篇關(guān)于Python修改游戲內(nèi)存的方法的文章就介紹到這了,更多相關(guān)Python 修改游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django序列化組件Serializers使用詳解

    Django序列化組件Serializers使用詳解

    本文主要系統(tǒng)性的講解django rest framwork 序列化組件的使用,基本看完可以解決工作中序列化90%的問題,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • Python ATM功能實現(xiàn)代碼實例

    Python ATM功能實現(xiàn)代碼實例

    這篇文章主要介紹了Python ATM功能實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Django2.2配置xadmin的實現(xiàn)

    Django2.2配置xadmin的實現(xiàn)

    這篇文章主要介紹了Django2.2配置xadmin的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python 中random模塊的常用方法總結(jié)

    python 中random模塊的常用方法總結(jié)

    這篇文章主要介紹了python 中random的常用方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Python之random庫的常用函數(shù)有哪些

    Python之random庫的常用函數(shù)有哪些

    這篇文章主要為大家詳細介紹了Python之random庫的常用函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Django中處理出錯頁面的方法

    Django中處理出錯頁面的方法

    這篇文章主要介紹了Django中處理出錯頁面的方法,即在異常出現(xiàn)時返回的頁面信息,需要的朋友可以參考下
    2015-07-07
  • 使用Python中的tkinter模塊作圖的方法

    使用Python中的tkinter模塊作圖的方法

    Python是一種解釋型、面向?qū)ο?、動態(tài)數(shù)據(jù)類型的高級程序設(shè)計語言。tkinter模塊(“Tk 接口”)是Python的標(biāo)準(zhǔn)Tk GUI工具包的接口。接下來通過本文給大家介紹Python中的tkinter模塊作圖教程,需要的朋友參考下
    2017-02-02
  • Python第三方庫jieba庫與中文分詞全面詳解

    Python第三方庫jieba庫與中文分詞全面詳解

    jieba庫是一款優(yōu)秀的Python第三方中文分詞庫,jieba支持三種分詞模式:精確模式、全模式和搜索引擎模式,下面這篇文章主要給大家介紹了關(guān)于Python第三方庫jieba庫與中文分詞的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 對Python中plt的畫圖函數(shù)詳解

    對Python中plt的畫圖函數(shù)詳解

    今天小編就為大家分享一篇對Python中plt的畫圖函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python如何使用opencv進行手勢識別詳解

    Python如何使用opencv進行手勢識別詳解

    目前,人們正需要研發(fā)以人為中心進行計算機交互控制,所以下面這篇文章主要給大家介紹了關(guān)于Python如何使用opencv進行手勢識別的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01

最新評論

正蓝旗| 云南省| 冀州市| 靖西县| 兴安盟| 阳谷县| 化隆| 山东省| 资中县| 丹凤县| 通州区| 彰武县| 庐江县| 桓台县| 竹北市| 秦皇岛市| 东平县| 许昌县| 益阳市| 蓬莱市| 宁德市| 桦南县| 安徽省| 松阳县| 波密县| 晋宁县| 密山市| 孝昌县| 兴国县| 诸暨市| 河曲县| 米泉市| 姚安县| 东源县| 高唐县| 德昌县| 原阳县| 博爱县| 城口县| 黔西| 遂溪县|