超激斗之人物基础信息

2021-02-23 12:13:02 李良人 2


这期我们来找一下人物的基础信息 人物的基础信息往往是最重要的 因为其它的所有数据都需要人物信息支持 例如发包 打怪 吃药 等等。。。

 

那么还是老样子 先开CE  附加游戏   

 

下一步我们来确定突破口 突破口有很多  比如:血量 蓝量 等级 经验条等等。。。

 

我们今天先用常规的血量作为突破口  首先找到能够改变任务血量的装备 这样方便我们搜索

 

 

首先我们先搜索穿上装备的血量

飞郁网络培训有限公司 

然后脱掉装备在搜索血量  然后再穿上装备反复搜索  筛选得出几个值

飞郁网络培训有限公司 

 

现在我们打开工具 xdbg64  然后附加游戏  然后我们对CE扫描出来的地址依次进行访问

 

$+1E | 4C 89 64 24 60 | mov qword ptr ss:[rsp+60],r12 |

$+23 | 45 33 E4 | xor r12d,r12d | $+26 | 4C 89 7C 24 20 | mov qword ptr ss:[rsp+20],r15 |

$+2B | 45 8B FC | mov r15d,r12d |

$+2E | FF 90 70 04 00 00 | call qword ptr ds:[rax+470] |

$+34 | 83 F8 01 | cmp eax,1 |

$+37 | 0F 85 6A 01 00 00 | jne nightmarebreaker.7FF71981561B |

$+3D | 8B 46 28 | mov eax,dword ptr ds:[rsi+28] |

$+40 | 48 89 6C 24 50 | mov qword ptr ss:[rsp+50],rbp |

$+45 | A8 04 | test al,4 |

$+47 | 0F 84 9F 00 00 00 | je nightmarebreaker.7FF719815560 |

$+4D | 48 8B AF C0 01 00 00 | mov rbp,qword ptr ds:[rdi+1C0] | rdi+1C0

$+54 | 4C 89 74 24 28 | mov qword ptr ss:[rsp+28],r14 |

$+59 | E8 9E 49 42 FF | call nightmarebreaker.7FF718C39E70 |

$+5E | 48 8B C8 | mov rcx,rax | $+61 | 48 8B D3 | mov rdx,rbx |

$+64 | E8 F3 10 80 FF | call nightmarebreaker.7FF7190165D0 |

$+69 | 4C 8B F0 | mov r14,rax | $+6C | 48 85 C0 | test rax,rax |

$+6F | 74 0F | je nightmarebreaker.7FF7198154F4 |

$+71 | 48 8B 10 | mov rdx,qword ptr ds:[rax] |

$+74 | 48 8B C8 | mov rcx,rax |

$+77 | FF 92 40 03 00 00 | call qword ptr ds:[rdx+340] |

 

在上面的代码中 我们断到了   rdi+1C0  的地方 这是我们需要继续向上最rdi的来源

 

$-14 | 40 53 | push rbx |

$-12 | 56 | push rsi |

$-11 | 57 | push rdi |

$-10 | 48 83 EC 30 | sub rsp,30 |

$-C | 49 8B F1 | mov rsi,r9 |

$-9 | 48 8B DA | mov rbx,rdx |

$-6 | 48 8B F9 | mov rdi,rcx |  rcx+10C

$-3 | 48 85 D2 | test rdx,rdx |

$ ==> | 0F 84 B8 01 00 00 | je nightmarebreaker.7FF719815632 |

$+6 | 48 8B 02 | mov rax,qword ptr ds:[rdx] |

$+9 | 48 8B CA | mov rcx,rdx |

 

 

来源于rcx  我们需要返回到上一层CALL去追溯来源  

 

$-62 | 48 8B D9 | mov rbx,rcx |

$-5F | 48 8B FA | mov rdi,rdx |

$-5C | 48 8B 49 14 | mov rcx,qword ptr ds:[rcx+14] | [rcx+14]+1C0

$-58 | 48 85 C9 | test rcx,rcx |

$-55 | 0F 84 A0 00 00 00 | je nightmarebreaker.7FF7194E65E2 |

$-4F | 48 83 7B 0C 00 | cmp qword ptr ds:[rbx+C],0 |

$-4A | 0F 84 95 00 00 00 | je nightmarebreaker.7FF7194E65E2 |

$-44 | 48 8B 01 | mov rax,qword ptr ds:[rcx] |

$-41 | FF 50 08 | call qword ptr ds:[rax+8] |

$-3E | 83 F8 01 | cmp eax,1 |

 

 

发现来源于rcx+14  我们继续追RCX的来源

 

 

00007FF718ED4097 | 48 63 77 10 | movsxd rsi,dword ptr ds:[rdi+10] | 00007FF718ED409B | 48 C1 E6 04 | shl rsi,4 |

00007FF718ED409F | 49 03 B6 CC 05 00 00 | add rsi,qword ptr ds:[r14+5CC] |[[[[r14+5CC]+70]+0*8]+14]+1C0 

00007FF718ED40A6 | 33 C0 | xor eax,eax |   等于0

00007FF718ED40A8 | 8B D8 | mov ebx,eax |

00007FF718ED40AA | 66 0F 1F 44 00 00 | nop word ptr ds:[rax+rax] | 00007FF718ED40B0 | 85 DB | test ebx,ebx |

00007FF718ED40B2 | 78 1B | js nightmarebreaker.7FF718ED40CF | 00007FF718ED40B4 | 3B 5E 08 | cmp ebx,dword ptr ds:[rsi+8] | 00007FF718ED40B7 | 7D 16 | jge nightmarebreaker.7FF718ED40CF | 00007FF718ED40B9 | 48 63 C3 | movsxd rax,ebx |

00007FF718ED40BC | 48 8B 0E | mov rcx,qword ptr ds:[rsi] | 00007FF718ED40BF | 48 8B D7 | mov rdx,rdi |

00007FF718ED40C2 | 48 8B 0C C1 | mov rcx,qword ptr ds:[rcx+rax*8] | [[rcx+0*8]+14]+1C0

00007FF718ED40C6 | E8 85 1C 61 00 | call nightmarebreaker.7FF7194E5D50 |

 

rcx来源于一个数组   这里的rax  向上追了一下发现就是0  来源于:xor eax,eax  

继续向上 rcx  来源于 [rsi]

 

来源于  add rsi,qword ptr ds:[r14+5CC]  这里我们向上追来源于一个常量进行计算得来的rsi 它一直是保持70 那么我们先不管它 就是直接写固定的就行

 

这里我们继续追 r14 的来源

 

 

$+50 | 48 89 5C 24 30 | mov qword ptr ss:[rsp+30],rbx |

$+55 | 48 8B 98 50 07 00 00 | mov rbx,qword ptr ds:[rax+750] | [[[[[rax+750]+5CC]+70]+0*8]+14]+1C0 

$+5C | 48 85 DB | test rbx,rbx | $+5F | 74 2A | je nightmarebreaker.7FF7195F518B |

$+61 | 48 8B 03 | mov rax,qword ptr ds:[rbx] |

$+64 | 48 8B CB | mov rcx,rbx |

$+67 | FF 50 08 | call qword ptr ds:[rax+8] |

$+6A | 83 F8 01 | cmp eax,1 |

 

来源于rax   rax的特性 是遇CALL需要进到CALL里面追

 

 

00007FF79771513C | 33 D2 | xor edx,edx |

00007FF79771513E | E8 1D F7 C4 FE | call nightmarebreaker.7FF796364860 |

00007FF797715143 | 48 8B C8 | mov rcx,rax |

00007FF797715146 | E8 D5 46 A3 FF | call nightmarebreaker.7FF797149820 | 基址以及偏移

00007FF79771514B | 48 85 C0 | test rax,rax |

00007FF79771514E | 74 40 | je nightmarebreaker.7FF797715190 | 00007FF797715150 | 48 89 5C 24 30 | mov qword ptr ss:[rsp+30],rbx | 00007FF797715155 | 48 8B 98 50 07 00 00 | mov rbx,qword ptr ds:[rax+750] |

 

我们在外面下断 然后进到里面就会得到完整的公式

如下:

[[[[[[[[[[7FF7998D02F8]+88]+68]]+8E4]+750]+5CC]+70]+0*8]+14]+1C0   最大血量

 

因为是动态加载的基址 需要算一下偏移

nightmarebreaker.exe+38102F8    基址

 

然后我们在附近会看到别的数据

[[[[[[[[[[7FF7998D02F8]+88]+68]]+8E4]+750]+5CC]+70]+0*8]+14]+1C8 最大血量 DWORD

[[[[[[[[[[7FF7998D02F8]+88]+68]]+8E4]+750]+5CC]+70]+0*8]+14]+1D0 当前蓝量 DWORD

[[[[[[[[[[7FF7998D02F8]+88]+68]]+8E4]+750]+5CC]+70]+0*8]+14]+1D4 最大篮量 DWORD

 

我就不全部记录了 有兴趣的同学  就去看一下  附近还有很多别的数据

 

这里需要说明下  因为我们是在副本外找的数据  当我们进到副本内 发现这里的数据是不会被访问的 也就是说 人物的数据不止一个  还有个副本内的数据 应该不会离我们这个公式太远  也就是偏移不一样罢了

 


电话咨询
QQ客服