本文共计2163个字,预计阅读时长8.7分钟。
2F20902E - CC - int 3 2F20902F - CC - int 3 2F209030 - 8B 81 00010000 - mov eax,[ecx+00000100] << 2F209036 - C3 - ret 2F209037 - CC - int 3 EAX=00000057 EBX=00000010 ECX=6D8DF5C0 EDX=2FDB41F0 ESI=6D8DF5C0 EDI=6D8DF5C0 ESP=0097DFD0 EBP=0097DFF0 EIP=2F209036这个时候ECX的值是6D8DF5C0,在CE中搜索这个值试试 有4条基地址,着重分析一下4条基址 基地址拉入地址栏,然后浏览内存 显示类型改成4字节 HEX 最后一个地址不像是链表 再继续分析下一个 也不是,继续下一个 这一块就有点像链表了,数据模式有点像以下代码
struct List { xxx* data;//数据指针 int id List* prev;//上一个链表 List* next;//下一个链表 }仔细这块数据第一条33dceeac是这个在内存中的位置 6D8F5C0应该就是数据指针,2FA应该就是ID(具体含义不清楚,暂时认为是ID),33DCF2AC就是上一个struct的指针,33DCF2AC是下一个结构体指针,我们转到地址33DCF2AC 如果这个地址的上一个链表的指针指向33dceeac就说明我们找对了。 这就说明我们找对了。 所以我们可以通过基址client.dll+4DCEEAC 找到链表的集中一个节点,从这个节点就能遍历所有成员了。 然后通过血值是struct的地址+0x100 现在继续找坐标跳转到我们人物结构体的首地址去(6D8DF5C0)并显示浮点数(坐标一般是浮点)然后人物到处走动 这一段有点像坐标,坐标的特征一般是X,Y,Z存储在一起,Z表示高度,跳起来或者去其他高地方的时候明显比在低地方要大,水平面上一般是整数,水平面下就是负数 我在箱子下面的时候是26 我上去试试 说明找对了,那么偏移是多少呢?人物结构的地址是6D8DF5C0,X坐标是6D8DF660,用6D8DF660-6D8DF5C0就是X坐标的偏移,Y坐标是X偏移+4 Z是X坐标偏移+8 所以X=+0xa0 Y=+0xa4 Z=+0xa8 人物阵营就比较简单了,浏览任务结构的内存,设置成字节,然后不断的换阵营,看哪个在变动 我是土匪的时候这两个是2 我变回警察就是3 所以在结构体内的偏移就是6D8DF6B8-6D8DF5C0=0xf8