吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 4103|回复: 62
上一主题 下一主题

[游戏安全] 【Python】实现植物大战僵尸修改(二)

  [复制链接]
跳转到指定楼层
楼主
Eorton 发表于 2020-3-15 15:23 回帖奖励
本帖最后由 Eorton 于 2020-3-15 17:36 编辑

这两天有空,就写个文章互相交流吧,嗯......还是写植物大战僵尸的吧,杠精们别喷我,我只是一个小白。

先引用本人所写的上一篇帖子:

Python 实现植物大战僵尸阳光修改 - 『软件调试区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn https://www.52pojie.cn/thread-912306-1-1.html
(出处: 吾爱破解论坛)

准备:
  • 软件:植物大战僵尸中文版
  • 工具:CheatEngine 、Python3.8、PIP、Pywin32、Pycharm等
  • 目标:实现植物大战僵尸随意修改阳光,修改金币,修改无冷却,修改小蜗牛巧克力、修改杀虫剂、修改智慧树化肥、修改普通化肥等



开始:
  • 关于CE部分,本人不展开详细找地址,直接放出汇编地址:
  • [Asm] 纯文本查看 复制代码
    冷却偏移:
    第1格:[[[6A9EC0]+768]+144]+70 
    第2格:[[[6A9EC0]+768]+144]+C0 
    第3格:[[[6A9EC0]+768]+144]+110 
    第4格:[[[6A9EC0]+768]+144]+160 
    第5格:[[[6A9EC0]+768]+144]+1B0 
    第6格:[[[6A9EC0]+768]+144]+200 
    第7格:[[[6A9EC0]+768]+144]+250 
    第8格:[[[6A9EC0]+768]+144]+2A0 
    第9格:[[[6A9EC0]+768]+144]+2F0 
    第10格:[[[6A9EC0]+768]+144]+340
    
  • [Asm] 纯文本查看 复制代码
    [*]阳光:[[6a9ec0]+768]+5560
    [*]金币:[[6a9ec0]+82C]+28
    [*]普通肥料:[[6a9f78]+82C]+1f8
    [*]智慧树化肥:[[6aa00c]+82C]+230
    [*]蜗牛巧克力:[[6aa00c]+82C]+228
    [*]杀虫剂:[[6a9f38]+82C]+1fc
    [*]


  • Python3.8 一定要安装pywin32,安装命令 :pip install pywin32
    如图:
  • 安装完毕即可开工:




打开Pycharm:
  • 导入Python库:
    [Python] 纯文本查看 复制代码
    import win32gui
    import win32process
    import win32api
    import ctypes
    import time
  • 阳光修改代码:
    [Python] 纯文本查看 复制代码
    def change_sun(Phand, sun_num):
        sun_date = ctypes.c_long()
        kernel32.ReadProcessMemory(int(Phand), 0x6A9EC0, ctypes.byref(sun_date), 4, None)
        kernel32.ReadProcessMemory(int(Phand), sun_date.value + 0x768, ctypes.byref(sun_date), 4, None)
        new_sun_date = ctypes.c_long(sun_num)
        kernel32.WriteProcessMemory(int(Phand), sun_date.value + 0x5560, ctypes.byref(new_sun_date), 4, None)
    
  • 金钱修改代码:
    [Python] 纯文本查看 复制代码
    def change_money(Phand, money):
        money_date = ctypes.c_long()
        kernel32.ReadProcessMemory(int(Phand), 0x6A9EC0, ctypes.byref(money_date), 4, None)
        kernel32.ReadProcessMemory(int(Phand), money_date.value + 0x82C, ctypes.byref(money_date), 4, None)
        new_money_date = ctypes.c_long(money)
        kernel32.WriteProcessMemory(int(Phand), money_date.value + 0x28, ctypes.byref(new_money_date), 4, None)
    
  • 冷却时间修改代码:
    [Python] 纯文本查看 复制代码
    def change_cooling(Phand, cooling):
        while 1000:
            time.sleep(1)
            cooling_data = ctypes.c_long()
            kernel32.ReadProcessMemory(int(Phand), 0x6A9EC0, ctypes.byref(cooling_data), 4, None)
            kernel32.ReadProcessMemory(int(Phand), cooling_data.value + 0x768, ctypes.byref(cooling_data), 4, None)
            kernel32.ReadProcessMemory(int(Phand), cooling_data.value + 0x144, ctypes.byref(cooling_data), 4, None)
            # kernel32.ReadProcessMemory(int(Phand),cooling_data.value,ctypes.byref(cooling_data),4,None)
            new_cooling_date = ctypes.c_long(cooling)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x70, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0xC0, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x110, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x160, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x1B0, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x200, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x250, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x2A0, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x2F0, ctypes.byref(new_cooling_date), 4, None)
            kernel32.WriteProcessMemory(int(Phand), cooling_data.value + 0x340, ctypes.byref(new_cooling_date), 4, None)
    
  • 小蜗牛巧克力修改代码:
    [Python] 纯文本查看 复制代码
    def change_chotolate(Phand, chotolate):
        chotolate_data = ctypes.c_long()
        kernel32.ReadProcessMemory(int(Phand), 0x6A9F38, ctypes.byref(chotolate_data), 4, None)
        kernel32.ReadProcessMemory(int(Phand), chotolate_data.value + 0x82C, ctypes.byref(chotolate_data), 4, None)
        new_chotolate_date = ctypes.c_long(1000 + chotolate)
        kernel32.WriteProcessMemory(int(Phand), chotolate_data.value + 0x228, ctypes.byref(new_chotolate_date), 4, None)
    
  • 智慧树肥料修改代码:
    [Python] 纯文本查看 复制代码
    def change_tree(Phand, tree):
        tree_data = ctypes.c_long()
        kernel32.ReadProcessMemory(int(Phand), 0x6AA00C, ctypes.byref(tree_data), 4, None)
        kernel32.ReadProcessMemory(int(Phand), tree_data.value + 0x82C, ctypes.byref(tree_data), 4, None)
        new_tree_date = ctypes.c_long(1000 + tree)
        kernel32.WriteProcessMemory(int(Phand), tree_data.value + 0x230, ctypes.byref(new_tree_date), 4, None)
    
  • 普通化肥修改代码:
    [Python] 纯文本查看 复制代码
    def change_fertilizer(Phand,fertilizer):
        fertilizer_data = ctypes.c_long()
        kernel32.ReadProcessMemory(int(Phand), 0x6A9F78, ctypes.byref(fertilizer_data), 4, None)
        kernel32.ReadProcessMemory(int(Phand), fertilizer_data.value + 0x82C, ctypes.byref(fertilizer_data), 4, None)
        new_fertilizer_date = ctypes.c_long(1000 + fertilizer)
        kernel32.WriteProcessMemory(int(Phand), fertilizer_data.value + 0x1F8, ctypes.byref(new_fertilizer_date), 4, None)
    
  • 杀虫剂修改代码:
    [Python] 纯文本查看 复制代码
    def change_insecticide(Phand,insecticide):
        insecticide_data = ctypes.c_long()
        kernel32.ReadProcessMemory(int(Phand), 0x6A9F38, ctypes.byref(insecticide_data), 4, None)
        kernel32.ReadProcessMemory(int(Phand), insecticide_data.value + 0x82C, ctypes.byref(insecticide_data), 4, None)
        new_insecticide_data = ctypes.c_long(1000 + insecticide)
        kernel32.WriteProcessMemory(int(Phand), insecticide_data.value + 0x1FC, ctypes.byref(new_insecticide_data), 4, None)
    
  • 主线程代码:
    [Python] 纯文本查看 复制代码
    def change():
        # 调用修改函数
        number_change = input("请输入序号")
        if number_change == "1":
            change_sun(Phand, int(input("请输入所需要的阳光:")))
        elif number_change == "2":
            change_sun(Phand, int(input("请输入所需要的阳光:")))
        elif number_change == "3":
            change_money(Phand,int(input("请输入所需要的金币:")))
        elif number_change == "4":
            change_chotolate(Phand, int(input("请输入所需要的蜗牛巧克力:")))
        elif number_change == "5":
            change_tree(Phand, int(input("请输入所需要的智慧树肥料:")))
        elif number_change == "6":
            change_fertilizer(Phand,int(input("请输入所需要的普通肥料:")))
        elif number_change == "7":
            change_insecticide(Phand,int(input("请输入所需要的杀虫剂:")))
        elif number_change == "8":
            change_cooling(Phand,1) #冷却时间
        return change()
    
  • 全局变量:
    [Python] 纯文本查看 复制代码
    if __name__ == '__main__':
        # 调用动态链接库
        kernel32 = ctypes.windll.LoadLibrary('kernel32.dll')
        # 调用最高权限执行
        PROCESS_ALL_ACCESS = (0x000F0000 | 0x00100000 | 0xFFF)
        # 获取窗口句柄
        windos_handle = win32gui.FindWindow(None, "植物大战僵尸中文版")
        # 获取进程PID
        read, pid = win32process.GetWindowThreadProcessId(windos_handle)
        # 获取进程句柄
        Phand = win32api.OpenProcess(PROCESS_ALL_ACCESS, False, pid)
        # 调用修改函数
        change()




代码分析:此代码类似C写法,也是调用win32API来做偏移读写,所以,ctypes 在C语言和Python用法对比如下:





结果:
在Pycharm写完后,我们来验证一下结果:
注:结果按现截图电脑时间修改,无可作假,可看电脑时间!




OK修改成功!希望各位大佬别喷!顺手刷一下小评分呗,谢谢!

免费评分

参与人数 32吾爱币 +35 热心值 +29 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xiaoou + 1 + 1 我很赞同!
大飞飞 + 1 + 1 谢谢@Thanks!
江南第一帅 + 1 + 1 我很赞同!
onezero24 + 1 + 1 谢谢@Thanks!
Psyber + 1 谢谢@Thanks!
一问尘缘 + 1 + 1 我很赞同!
小白一个,求教 + 1 + 1 我很赞同!
leonrein + 1 + 1 我很赞同!
冰冷的嘲笑 + 1 + 1 我很赞同!
风雪庙 + 1 + 1 谢谢@Thanks!
骚年彡 + 1 我很赞同!
AsktaoMS + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
南极星_睬C + 1 Python做辅助的不是很多
风烟丶残梦 + 1 热心回复!
huanboy + 1 + 1 一直想学python,可之前买了本书,前面都看了,后面实例看不下去了,就此荒.
cherrypi + 1 + 1 我很赞同!
QTQToQTQT + 1 + 1 热心回复!
Ang0fly + 1 + 1 谢谢@Thanks!
pinhai + 1 用心讨论,共获提升!
我爱电脑 + 1 + 1 热心回复!
不会跳的袋鼠 + 1 + 1 谢谢@Thanks!
Mr-Signal + 1 + 1 谢谢@Thanks!
mayf + 1 + 1 热心回复!
kai3322 + 1 谢谢@Thanks!
pandore + 1 + 1 谢谢@Thanks!
win233 + 1 + 1 我很赞同!
lynxtang + 1 + 1 谢谢@Thanks!
香榭的落叶 + 1 + 1 谢谢@Thanks!
xiaoxiaoxiao- + 1 + 1 用心讨论,共获提升!
凉一点是薄荷 + 1 + 1 热心回复!
Jasn + 1 + 1 厉害厉害

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
jidesheng6 发表于 2020-3-15 18:58
y294945022 发表于 2020-3-15 16:22
请问,这python 语言   与   易语言  谁的教程多,或者关于游戏辅助方面谁的教程多

python挺少人拿来写游戏辅助的,做后端,爬虫的居多,相对来说还是易语言的这方面教程多。
推荐
 楼主| Eorton 发表于 2020-3-15 16:41 <
y294945022 发表于 2020-3-15 16:22
请问,这python 语言   与   易语言  谁的教程多,或者关于游戏辅助方面谁的教程多

都一样,看学习那个人善不善用
沙发
sanqian233 发表于 2020-3-15 15:28
3#
52sczzj 发表于 2020-3-15 15:28
表格颜色太暗了
4#
hackgsl 发表于 2020-3-15 15:28
这个不错,我只是用CE修改,每次打开都得重新弄阳光
5#
青藤旧巷 发表于 2020-3-15 15:36
前来跟大佬学技术
6#
卫国 发表于 2020-3-15 15:38
人生苦短,我用Python
7#
-凡- 发表于 2020-3-15 15:40
这个厉害了~
8#
784983850 发表于 2020-3-15 15:40
收藏备用
9#
ciker_li 发表于 2020-3-15 15:41
python还可以修改内存啊,以前没注意过
10#
swjtu_ray 发表于 2020-3-15 15:42
Python 永远滴神
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-4-10 17:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表