其实游戏中的call是有一定规律的,这个规律是什么?
1、调用之前,必定有call名入栈,什么,不知道如何看堆栈有哪些内容。很简单啊,按alt+k就看到了
2、系统进程空间,一般都可以忽略,那么,哪些是系统进程呢,我自己也分不太清,但是NTDLL,USER32,WS_S32等一般都是系统进程空间,在od的状态栏上就可以分辨出来。
举个例子:ZX中找死亡回程call
一、在弄死小号后,先下了 BP SEND指令,od中断下来,按ALT+K,看到的堆栈情况是这样的:
地址 堆栈 函数过程 / 参数 调用来自 结构
029FFEC8 00572860 WS2_32.send elementc.0057285A
029FFECC 000006BC Socket = 6BC
029FFED0 06D1F2A8 Data = 06D1F2A8
029FFED4 00000003 DataSize = 3
029FFED8 00000000 Flags = 0
029FFEE8 00578BE7 包含elementc.00572860 elementc.00578BE4
029FFEF0 00578827 elementc.00578BB0 elementc.00578822
029FFF38 005785DE ? elementc.00578640 elementc.005785D9
029FFF48 00577128 包含elementc.005785DE elementc.00577125
二、然后F9让游戏正常,再回到游戏中,按下“回城”
三、od中断下来,再按alt+K,看到的堆栈是另外一个样子了:
地址 堆栈 函数过程 / 参数 调用来自 结构
0012F3B4 00581775 ? elementc.005898B0 elementc.00581770
0012F3C4 00583F75 ? elementc.00581740 elementc.00583F70
0012F400 005A8CF6 ? elementc.00583ED0 elementc.005A8CF1
0012F410 0057E701 ? elementc.005A8CD0 elementc.0057E6FC <<<<<<<<<<<<<
0012F420 00509E80 elementc.0057E6C0 elementc.00509E7B
0012F424 006C6527 包含elementc.00509E80 elementc.006C6524
0012F444 006C647C elementc.006C64B0 elementc.006C6477
0012F45C 006C8F0E 包含elementc.006C647C elementc.006C8F0B
0012F464 0054A432 elementc.006C8F00 elementc.0054A42D
0012F47C 006C236B 包含elementc.0054A432 elementc.006C2368
0012F494 006C269B elementc.006C22C0 elementc.006C2696
0012F4E0 006C93AA ? elementc.006C2380 elementc.006C93A5
0012F55C 00549BBB ? elementc.006C8F50 elementc.00549BB6
四、如果用CTRL+F9跟踪,很容易发现,前三个都是在WS32系统进程空间,所以,第4个,做了个标记的那里,就是死亡回程call了
希望大家多多实践,注意观察。也许我的这个方法有问题,也请提出来大家讨论。
阅读(795) | 评论(0) | 转发(0) |