任鸟飞谈逆向----《梦三国2》全图
《梦三国2》是5V5对战类游戏,和LOL游戏模式差不多。这种游戏敌人的位置,地图信息是至关重要的,市场上有这个游戏的全图 ,这对游戏的平衡性造成了极大的破坏,我们今天来分析一下其全图效果是怎么实现的。 首先地图上的可视与不可视是被分成极小的点的,所以我们随便选择一个小的区域 用人物的走动来改变他的可视与不可视状态。http://gslab.qq.com/data/attachment/portal/201710/18/102602qjb69mjj3hmw3xbh.png可视搜索字节1不可视搜索字节0(当然是尝试出来的,避免未知初始值扫描过慢)如果有什么不懂 可以关注 微信公众号:任鸟飞逆向交流学习会得到一些相邻的内存地址 为什么这么多相邻的地址呢?原因我们刚才已经说了,地图是由很多个点组成的,我们来回走动,变动可视状态看上去只有一小块区域,实际上可能是几千个点http://gslab.qq.com/data/attachment/portal/201710/18/102602itnk0zxntg8c0clr.png在任意相邻的内存地址上下访问断 得到下面代码http://gslab.qq.com/data/attachment/portal/201710/18/102603tl94amy84aqnm96l.png100C4291 - 80 3C 0200 - cmp byte ptr ,00============视野判断0104A650 - 8A 02- mov al,0104A658 - 88 02- mov ,al0104A5C0 - 8A 02- mov al,0104A5C8 - 88 02- mov ,al 第一条很明显是一个判断 100C426B 8945 CC mov dword ptr , eax100C426E DC0D 40073210 fmul qword ptr 100C4274 D96D CC fldcw word ptr 100C4277 DB5D CC fistp dword ptr 100C427A 8A45 CC mov al, byte ptr 100C427D D96D CA fldcw word ptr 100C4280 8845 CB mov byte ptr , al100C4283 8B86 A8020000 mov eax, dword ptr 100C4289 85FF test edi, edi100C428B 7E 38 jle short 100C42C5100C428D 8BD3 mov edx, ebx100C428F 2BD0 sub edx, eax100C4291 803C02 00 cmp byte ptr , 0 ; 视野判断100C4295 75 06 jnz short 100C429D ; 如果内存地址里不等于0跳转 也就是可视跳转 那么我们改成JMP 默认全部可视100C4297 0FB64D CB movzx ecx, byte ptr 100C429B EB 02 jmp short 100C429F100C429D 33C9 xor ecx, ecx100C429F 8808 mov byte ptr , cl100C42A1 40 inc eax100C42A2 4F dec edi100C42A3^ 75 EC jnz short 100C4291100C42A5 FF15 1CE43110 call dword ptr [<&WINMM.timeGetTime>] ; WINMM.timeGetTime100C42AB 8946 70 mov dword ptr , eax100C42AE C646 74 01 mov byte ptr , 1100C42B2 EB 39 jmp short 100C42ED100C42B4 8B8E A8020000 mov ecx, dword ptr 100C42BA 57 push edi100C42BB 53 push ebx100C42BC 51 push ecx100C42BD E8 02BD2100 call 100C42C2 83C4 0C add esp, 0C分析可得为0的时候不跳转,我们知道为0是不可视那么我们修改掉他的判断为无条件跳转这样去掉了 第一层迷雾http://gslab.qq.com/data/attachment/portal/201710/18/102603vm62c8bhawgmkz9m.png如上图:已经达到了全图的效果但是这只是第一层迷雾,敌人如果在视野外我们也是看不到的 那么我们通过 100C4291 803C02 00 cmp byte ptr , 0 这条代码去追踪点阵的来源这个偏移表达可以追到CE搜索ECX 的值可以得到表达式[+704+10]我们在 地图数组的地址上下断 得到代码:10076A13 - 83 7E 10 00 - cmp dword ptr ,0010076A67 - 8B 46 10- mov eax,100768ED - 83 7F 10 00 - cmp dword ptr ,00 大地图显示1007696F - 8B 47 10- mov eax, 100768E0 55 push ebp100768E1 8BEC mov ebp, esp100768E3 51 push ecx100768E4 57 push edi100768E5 8BF9 mov edi, ecx100768E7 807F 4C 00 cmp byte ptr , 0100768EB 75 13 jnz short 10076900100768ED 837F 10 00 cmp dword ptr , 0 判断是否有地图数据100768F1 75 16 jnz short 10076909 ; NOP掉大地图可以显示应该是没有对地图上的某些数据进行隐藏了100768F3 8B45 10 mov eax, dword ptr 100768F6 85C0 test eax, eax100768F8 74 06 je short 10076900100768FA C700 00000000 mov dword ptr , 010076900 33C0 xor eax, eax10076902 5F pop edi10076903 8BE5 mov esp, ebp10076905 5D pop ebp10076906 C2 0C00 retn 0C10076909 53 push ebx1007690A 56 push esi1007690B E8 70AEFFFF call 10071780 我们整理下思路实际上 我们在找地图可视数组 找到以后对他的可试进行访问得到代码对其不可视代码进行屏蔽实现了 地图全亮如果不行我们可以返回上一层屏蔽CALL 看是否可以实现全图等功能但是看不到敌对英雄 那么这个地图数组或许只是地图相关 而和人物对象无关我们又到 是否有地图数据的判断附近去屏蔽掉有地图数据时候的处理 敌对英雄出现了 http://gslab.qq.com/data/attachment/portal/201710/18/102651fr95397o5n4ujr55.png视野外一样可以看到地方英雄了
感谢分享,好人一生平安! 有驱动保护啊 梦三国是LOL的前身 今天分享2017 近期发2017分享第2弹 今天分享 2017 第二弹 2017这几天分享了不少 这个游戏现在不玩了 恩有了LOL 这游戏没那么火了
页:
[1]
2