植物大战僵尸阳光基址:

动画链接

 

https://coding.net/u/yanpeng1314/p/Python3-dm-tools/git?public=true
View Code

 

1.打开CE和植物大战僵尸,附加进程:

植物大战僵尸阳光基址:_第1张图片

 

2.CE寻找基址的原理是遍历内存中的数据,比如阳光值为150,我们输入十进制150,开始遍历,那么会得到所有内存中值为150的地址:

植物大战僵尸阳光基址:_第2张图片

 

 2.改变阳光的值为75,在已经找到的内存中继续遍历:

植物大战僵尸阳光基址:_第3张图片

 

3.此时,只有一个内存地址中的数值为75:

植物大战僵尸阳光基址:_第4张图片

 

2.在植物大战僵尸游戏中,内存基址是根据进程号变化的,游戏运行,创建了一个进程,那么进程号是不变的,但是在此运行游戏时进程就会发生改变,因此我们要寻找阳光的基址,右击鼠标:

植物大战僵尸阳光基址:_第5张图片

 

 3.选择mov类型的汇编指令:

植物大战僵尸阳光基址:_第6张图片

 

4.再次寻找偏移:

植物大战僵尸阳光基址:_第7张图片

 

5.最后三级偏移:

植物大战僵尸阳光基址:_第8张图片

 

 

原理:

植物大战僵尸阳光基址:_第9张图片

 

python代码:

植物大战僵尸阳光基址:_第10张图片

 

植物大战僵尸阳光基址:_第11张图片

植物大战僵尸阳光基址:_第12张图片

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Time    : 2018/4/30 0030 19:51
# Author  : 千与千寻
# Email   : [email protected]
# V       : PP2677345028

import win32com.client
import time
import os

BASE_DIR = os.path.dirname(__file__)
dm = win32com.client.Dispatch("dm.dmsoft")

setpath_ret = dm.SetPath(BASE_DIR)

def FindWindow(windowclass, windowtitle):
    hwnd = dm.FindWindow(windowclass, windowtitle)
    if hwnd:
        return hwnd
    return 0


def ReadInt(hwnd, addr, type):
    value_ret = dm.ReadInt(hwnd, addr, type)
    return value_ret

def WriteInt(hwnd, addr, type, v):
    writeint_ret = dm.WriteInt(hwnd, addr, type, v)
    if writeint_ret:
        return 1
    return 0

if __name__ == "__main__":

    hwnd = FindWindow("", "Plants vs. Zombies 1.2.0.1073 RELEASE")

    # value = dm.ReadInt(hwnd, "20CF55E0", 1)
    sunshine_value = ReadInt(hwnd, "[[ + 3794F8] + 868] + 5578", 1)
    print("sunshine_value = ", sunshine_value)

    writeint_ret = WriteInt(hwnd, "[[ + 3794F8] + 868] + 5578", 1, 300)
    print("sunshine_value = ", sunshine_value)
View Code

 

植物大战僵尸阳光基址:_第13张图片

转载于:https://www.cnblogs.com/yan1314/articles/8975193.html

你可能感兴趣的:(植物大战僵尸阳光基址:)