本人菜鸟,正在学习OD和CE,第一次做外挂,有不足之处,还望各位老大提出,帮我这个菜鸟把调试水平再提高一点,谢谢啦,嘿嘿
1 实现功能: 1)阳光值修改
2)金钱修改
3)后台运行
4)随意种植
5)植物攻击力修改
6)资源自动收集
7) 重叠种植
8)解除冷冻时间
9)替换栅格里的植物
2 找到的一些有用的Call以及简单的思路
1)重叠种植
OD搜索字符串 ADVICE_GRAVEBUSTERS_ON_GRAVES 便可找到
[Asm] 纯文本查看 复制代码 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 ; [ADVICE_GRAVEBUSTERS_ON_GRAVES]
0040FE3F 8D4C24 28 lea ecx,dword ptr ss:[esp+0x28]
0040FE43 E8 0846FFFF call 00404450
2)更改捡到的阳光数值
[Asm] 纯文本查看 复制代码 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:[eax+0xA]
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:[esi+0x4]
00430A11 0188 60550000 add dword ptr ds:[eax+0x5560],ecx ;设置太阳花数量
00430A17 8B88 60550000 mov ecx,dword ptr ds:[eax+0x5560]
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
[Asm] 纯文本查看 复制代码 00487265 837F 34 FF cmp dword ptr ds:[edi+0x34],-0x1
00487269 0F84 06010000 je 00487375
0048726F 8B4F 04 mov ecx,dword ptr ds:[edi+0x4]
00487272 83B9 68550000 0>cmp dword ptr ds:[ecx+0x5568],0x0
00487279 75 05 jnz short 00487280
0048727B E8 10FFFFFF call 00487190
00487280 807F 48 00 cmp byte ptr ds:[edi+0x48],0x0
00487284 75 26 jnz short 004872AC
00487286 807F 49 00 cmp byte ptr ds:[edi+0x49],0x0
0048728A 74 20 je short 004872AC
0048728C 8347 24 01 add dword ptr ds:[edi+0x24],0x1 ;累加器
00487290 8B47 24 mov eax,dword ptr ds:[edi+0x24]
00487293 3B47 28 cmp eax,dword ptr ds:[edi+0x28]
00487296 7E 14 jle short 004872AC ;解除冻结的关键点
00487298 C747 24 0000000>mov dword ptr ds:[edi+0x24],0x0
0048729F C647 49 00 mov byte ptr ds:[edi+0x49],0x0
004872A3 C647 48 01 mov byte ptr ds:[edi+0x48],0x1
004872A7 E8 E4FEFFFF call 00487190
004872AC 8B47 3C mov eax,dword ptr ds:[edi+0x3C]
004872AF 85C0 test eax,eax
004872B1 0F8E BE000000 jle 00487375
其他基址:
删栏首地址[[[006A9EC0]+768]+144]+28
太阳首地址[[[006A9EC0]+768]+5560
天上掉太阳的时间[[006A9EC0]+768]+5538
银币首地址[[[[[006A9EC0]+768]+144]+28]+0x82C]+28
僵尸来的倒计时[[[006A9EC0]+768]+555C
环境
本源码用VS2010编译通过,植物打僵尸英文版。
由于是测试用的,所以要自己找工具注入到popcapgame1.exe进程,才可测试。
希望老大们提下意见,谢谢
|