lhwqqq 发表于 2015-1-19 10:05

一个植物打僵尸(英文版)外挂,有码~~

本人菜鸟,正在学习OD和CE,第一次做外挂,有不足之处,还望各位老大提出,帮我这个菜鸟把调试水平再提高一点,谢谢啦,嘿嘿
1实现功能:    1)阳光值修改
    2)金钱修改
    3)后台运行
    4)随意种植
    5)植物攻击力修改
    6)资源自动收集
    7)重叠种植
    8)解除冷冻时间
    9)替换栅格里的植物

2找到的一些有用的Call以及简单的思路
1)重叠种植
   OD搜索字符串 ADVICE_GRAVEBUSTERS_ON_GRAVES 便可找到
0040FE25    57            push edi
0040FE26    53            push ebx
0040FE27    55            push ebp
0040FE28    E8 F3E1FFFF   call 0040E020                            ;返回值判断是否能放植物
0040FE2D    85C0            test eax,eax
0040FE2F    0F84 1F090000   je 00410754                              ; 跳允许一块地种多个植物
0040FE35    83F8 02         cmp eax,0x2
0040FE38    75 50         jnz short 0040FE8A
0040FE3A    68 EC626500   push 006562EC                            ;
0040FE3F    8D4C24 28       lea ecx,dword ptr ss:
0040FE43    E8 0846FFFF   call 00404450

2)更改捡到的阳光数值
004309E0    83F8 05         cmp eax,0x5
004309E3    74 05         je short 004309EA
004309E5    83F8 06         cmp eax,0x6
004309E8    75 47         jnz short 00430A31
004309EA    83F8 04         cmp eax,0x4
004309ED    75 07         jnz short 004309F6
004309EF    B9 19000000   mov ecx,0x19                     ;每吃一个太阳 加的太阳花的数 0x19 == 25
004309F4    EB 18         jmp short 00430A0E
004309F6    83F8 05         cmp eax,0x5
004309F9    75 05         jnz short 00430A00
004309FB    8D48 0A         lea ecx,dword ptr ds:
004309FE    EB 0E         jmp short 00430A0E
00430A00    33C9            xor ecx,ecx
00430A02    83F8 06         cmp eax,0x6
00430A05    0F95C1          setne cl
00430A08    83E9 01         sub ecx,0x1
00430A0B    83E1 32         and ecx,0x32
00430A0E    8B46 04         mov eax,dword ptr ds:
00430A11    0188 60550000   add dword ptr ds:,ecx ;设置太阳花数量
00430A17    8B88 60550000   mov ecx,dword ptr ds:

3)解除冻结时间
找Call思路:最好在打完僵尸后在找,CE里找未知初始化的值-搜索变化的值-暂停-没有变化的值,如此反复,即可找到。
找到后,上层调用可以找到栅格里的数据。每次种植后,程序都会重新copy时间数据到栅格中,植物属性 占36字节,基址0x0069F2C0。
数据结构
typedef struct tagPlants
{
      DWORD money;             // 钱
      DWORD time;            // 冻结时间
        DWORD unkonwn1;         
        DWORD unkonwn2;          // 对太阳花来说,高16位全为F,为无限太阳花
        char* szPlantName;
        DWORD nIndex;            // 植物所引,从1开始
        DWORD unkonwn3;
        DWORD unkonwn4;
        DWORD unkonwn5;
}Plants

00487265    837F 34 FF      cmp dword ptr ds:,-0x1
00487269    0F84 06010000   je 00487375
0048726F    8B4F 04         mov ecx,dword ptr ds:
00487272    83B9 68550000 0>cmp dword ptr ds:,0x0
00487279    75 05         jnz short 00487280
0048727B    E8 10FFFFFF   call 00487190
00487280    807F 48 00      cmp byte ptr ds:,0x0
00487284    75 26         jnz short 004872AC
00487286    807F 49 00      cmp byte ptr ds:,0x0
0048728A    74 20         je short 004872AC
0048728C    8347 24 01      add dword ptr ds:,0x1    ;累加器
00487290    8B47 24         mov eax,dword ptr ds:
00487293    3B47 28         cmp eax,dword ptr ds:
00487296    7E 14         jle short 004872AC               ;解除冻结的关键点
00487298    C747 24 0000000>mov dword ptr ds:,0x0
0048729F    C647 49 00      mov byte ptr ds:,0x0
004872A3    C647 48 01      mov byte ptr ds:,0x1
004872A7    E8 E4FEFFFF   call 00487190
004872AC    8B47 3C         mov eax,dword ptr ds:
004872AF    85C0            test eax,eax
004872B1    0F8E BE000000   jle 00487375

其他基址:
删栏首地址[[+768]+144]+28
太阳首地址[[+768]+5560
天上掉太阳的时间[+768]+5538
银币首地址[[[[+768]+144]+28]+0x82C]+28
僵尸来的倒计时[[+768]+555C


环境
本源码用VS2010编译通过,植物打僵尸英文版。
由于是测试用的,所以要自己找工具注入到popcapgame1.exe进程,才可测试。
希望老大们提下意见,谢谢



jhk19880209 发表于 2015-1-19 10:32

革命尚未成功,人们还需努力!加油

zeromaggot 发表于 2015-1-19 20:03

4)随意种植
    5)植物攻击力修改
这两个有点意思

1163194557 发表于 2015-1-20 15:31

我也在学习外挂,可以一起么

lhwqqq 发表于 2015-1-20 17:50

1163194557 发表于 2015-1-20 15:31
我也在学习外挂,可以一起么

那必须是可以的呀

沙羽龙 发表于 2015-3-16 11:32

看起来好复杂啊

az7803499 发表于 2015-3-16 11:46

支持楼主,受教了
页: [1]
查看完整版本: 一个植物打僵尸(英文版)外挂,有码~~