ZC_RXJH_我的信息

1、

CE 搜索出 血值的 基址 Client.exe+0x2BEC3F8 ==> 0x02FEC3F8

2、

CE 选中怪,写入内存的语句变成 0x005022AB处。

选中怪 的ID,写入到地址 [[0x032354BC]+0x14e4]中。==> [0x032354BC] 就是 角色的基址(正确性还有待验证)(ZC: 我对它不信任的点在于:这个值>血值基址...)。

上面 ESI的值 == 选中的怪物的基址 ==> 不是角色的基址,前面的分析 错误了。

怪物数组基址 0x032354C0

 

0050220E   .  6A 00         PUSH 0x0
00502210   .  6A 00         PUSH 0x0
00502212   .  68 50040000   PUSH 0x450
00502217   .  FFD0          CALL EAX
00502219   >  837E 08 31    CMP DWORD PTR DS:[ESI+0x8],0x31
0050221D   .  6A 00         PUSH 0x0
0050221F   . /75 71         JNZ SHORT Client.00502292      // ZC: 这里 直接跳走,注意 对于下面一个CALL 上面还 压了一个0x0 。
00502221   . |8B0D BC542303 MOV ECX,DWORD PTR DS:[0x32354BC]
00502227   . |8B46 14       MOV EAX,DWORD PTR DS:[ESI+0x14]
0050222A   . |8B16          MOV EDX,DWORD PTR DS:[ESI]
0050222C   . |8B52 04       MOV EDX,DWORD PTR DS:[EDX+0x4]
0050222F   . |50            PUSH EAX
00502230   . |898D 98FEFFFF MOV DWORD PTR SS:[EBP-0x168],ECX
00502236   . |68 33040000   PUSH 0x433
0050223B   . |8BCE          MOV ECX,ESI
0050223D   . |FFD2          CALL EDX
0050223F   . |8B46 14       MOV EAX,DWORD PTR DS:[ESI+0x14]
00502242   . |8B8D 98FEFFFF MOV ECX,DWORD PTR SS:[EBP-0x168]
00502248   . |8981 983C0000 MOV DWORD PTR DS:[ECX+0x3C98],EAX
0050224E   . |8B56 14       MOV EDX,DWORD PTR DS:[ESI+0x14]
00502251   . |8B0D 4014FB00 MOV ECX,DWORD PTR DS:[0xFB1440]
00502257   . |52            PUSH EDX
00502258   . |E8 83121100   CALL Client.006134E0
0050225D   . |84C0          TEST AL,AL
0050225F   . |74 41         JE SHORT Client.005022A2
00502261   . |8B46 14       MOV EAX,DWORD PTR DS:[ESI+0x14]
00502264   . |8B0D 4014FB00 MOV ECX,DWORD PTR DS:[0xFB1440]
0050226A   . |8B91 70030000 MOV EDX,DWORD PTR DS:[ECX+0x370]
00502270   . |6A 00         PUSH 0x0
00502272   . |50            PUSH EAX
00502273   . |68 37040000   PUSH 0x437
00502278   . |52            PUSH EDX
00502279   . |E8 82513100   CALL Client.00817400
0050227E   . |8B46 0C       MOV EAX,DWORD PTR DS:[ESI+0xC]
00502281   . |8B0D BC542303 MOV ECX,DWORD PTR DS:[0x32354BC]
00502287   . |83C4 10       ADD ESP,0x10
0050228A   . |8981 E4140000 MOV DWORD PTR DS:[ECX+0x14E4],EAX
00502290   . |EB 55         JMP SHORT Client.005022E7
00502292   > \8B06          MOV EAX,DWORD PTR DS:[ESI]    // ZC: 上面直接跳到这里继续执行
00502294   .  8B50 04       MOV EDX,DWORD PTR DS:[EAX+0x4]
00502297   .  6A 01         PUSH 0x1      // ZC: 这里压入第2个参数
00502299   .  68 50040000   PUSH 0x450     // ZC: 这里压入第3个参数 
0050229E   .  8BCE          MOV ECX,ESI  // ZC: 这里设置ECX,也就是设置对象地址,于是推断出ESI应该是选中怪的基址 而非 角色基址
005022A0   .  FFD2          CALL EDX      // ZC: 显示选中怪物的血条的函数
005022A2   >  8B46 0C       MOV EAX,DWORD PTR DS:[ESI+0xC]
005022A5   .  8B0D BC542303 MOV ECX,DWORD PTR DS:[0x32354BC]
005022AB   .  8981 E4140000 MOV DWORD PTR DS:[ECX+0x14E4],EAX
005022B1   .  EB 34         JMP SHORT Client.005022E7

 

 

经过分析,[[怪物基址] +0x04] ==> 怪物类的某个函数(应该是包含选中时 显示血值条) ==> 0x004CFED0,上面的 "CALL EDX"中的EDX就是0x004CFED0

显示选中怪血条:
  mov ecx,选中的怪物的基址
  mov edx,怪物类的函数地址
  push 0x0
  push 0x1
  push 0x450
  call edx

隐藏某个怪血条:(这个是自己的猜测,验证下来 确实是这样)
  mov ecx,选中的怪物的基址
  mov edx,怪物类的函数地址
  push 0x0
  push 0x0
  push 0x450
  call edx

 

3、攻击选中的怪物(CE找到的 攻击怪时 才访问的两个汇编指令地址为 0x4F79AA 和 0x4F7A21,靠的非常近)

  mov ecx,0x032354BC  // ZC: 存放选中怪ID的地方
  mov ecx,[ecx]      // ZC: 这里ECX没有设置成选中怪的基址,而是到函数中通过怪的ID找到怪的基址
  mov eax,0x004F7970  // ZC: 攻击选中怪 的函数地址
  call eax

  ZC: 通过 视频2.5.1【19:35】左右的讲解,找到了更里层的CALL(在 0x004F7A44 处被调用)

    push 选中怪的ID
    mov ecx, 角色基址
    call 0x004E9D30

ZC: 这样,没有自动跑路的功能,角色手动跑到指定地点后,就可以开始自动练级/吃红了

 

4、

5、

 

posted @ 2016-05-12 08:33  DebugSkill  阅读(207)  评论(0编辑  收藏  举报