关于某网游的二叉树分析和luaHook实现

最近在研究一个网游,里面用儿叉树的结构,至于怎么找到这颗二叉树的,网上教程这么多,我就不说了,重点讲下这颗二叉树。

其中1是左子树执行的流程,2是右子树执行的流程。
其实这个图是个排序二叉树,这里儿叉树跟edi(经分析,这个edi是某怪物ID)做比较,类似二分搜索这样的。
自己画了个图,方便自己理解。

void CGameDlg::TLBianLi(ULONG CurAddr){//bl=[根+0x15] bl为0时进入遍历ULONG RightAddr,LeftAddr,tempAddr;float X,Y;BYTE root_15;char GuaiWustr[16]="null";_asm{push eaxmov eax,CurAddradd eax,0x15mov eax,[eax]mov root_15,alpop eax}if(root_15==0){//当前结点//[[[[eax+0x10]+0x1EC]+0x4]+0x34]是怪物名 eax =CurAddr//[[[[[9CD654]+0x70]+0x1EC]+0x4]+000024A0]血ReadProcessMemory(hp,(LPVOID)((DWORD)CurAddr+0x10),&tempAddr,4,NULL);//[eax+0x10]+48ReadProcessMemory(hp,(LPVOID)((DWORD)tempAddr+0x48),&X,4,NULL);ReadProcessMemory(hp,(LPVOID)((DWORD)tempAddr+0x50),&Y,4,NULL);ReadProcessMemory(hp,(LPVOID)((DWORD)tempAddr+0x01EC),&tempAddr,4,NULL);ReadProcessMemory(hp,(LPVOID)((DWORD)tempAddr+0x04),&tempAddr,4,NULL);ReadProcessMemory(hp,(LPVOID)((DWORD)tempAddr+0x34),&GuaiWustr,10,NULL);GuaiWustr_CStr=(char*)GuaiWustr;//[CurAddr+0xc]是GuaiWuIDReadProcessMemory(hp,(PVOID)((DWORD)CurAddr+0xc),&GuaiWuID,4,NULL);str.Format(L"%8x %8s %8.2f %8.2f",GuaiWuID,GuaiWustr_CStr,X,Y);m_listGuaiWu.AddString(str);//左树mov 根,[根]_asm{push eaxmov eax,CurAddrmov eax,[eax]mov LeftAddr,eaxpop eax}TLBianLi(LeftAddr);//右树mov 根,[根+0x8]_asm{push eaxmov eax,CurAddradd eax,0x8mov eax,[eax]mov RightAddr,eaxpop eax}TLBianLi(RightAddr);}
} 

现在再来说游戏如果用了lua我们怎么调用怎么找到关键的lua
还是那样,要先找到游戏中的某lua调用的地方,网上教程这么多我就不说怎么找了,说说怎么实现相关的luaHook吧。
=============lua_call=============
007251E1  |.  8B0D 884F3401 mov ecx,dword ptr ds:[0x1344F88]         ;  lua
007251E7  |.  8B11          mov edx,dword ptr ds:[ecx]
007251E9  |.  FF52 3C       call dword ptr ds:[edx+0x3C]
007251EC  |.  8B00          mov eax,dword ptr ds:[eax]
007251EE  |.  53            push ebx
007251EF  |.  50            push eax
007251F0  |.  FF15 5CE38400 call dword ptr ds:[0x84E35C]             ;  luaplus.lua_dostring
007251F6  |.  8B45 E4       mov eax,[local.7]
007251F9  |.  83C4 08       add esp,0x8
=====================================
hook的方法就是inline hook那样了,其实也没什么好说的,会了inline hook,其实是很简单的

void __declspec(naked) Mylua(){//执行自己的代码_asm{pushadmov lua_str,ebx//保存lua的字符串 其中ebx保存了lua的字符串}//lua_Mycode();_asm popad//跳回原来的地方_asm{mov ecx,dword ptr ds:[0x1344F88]jmp HookLuaBackAddr //这个地址是HookLuaAddr+6 0x007251E7}
}
//保存原来的数据
BYTE oldGameCode[6]={0x8B,0x0D,0x88,0x4F,0x34,0x01};
void lua_hook(){//保存原来的数据//修改代码 E9 (DWORD)&Mylua-HookLuaAddr -5  5个字节 jmp MyluaULONG jmpAddr =(ULONG)Mylua-HookLuaAddr -0x5;_asm{push eaxpush ebxmov eax,HookLuaAddrmov byte ptr ds:[eax],0xE9mov ebx,jmpAddrmov dword ptr ds:[eax+1],ebxpop ebxpop eax}//AfxMessageBox(L"hook");
}
void  lua_unHook(){//恢复所在位置的代码_asm{push eaxpush ebxpush ecxmov eax,HookLuaAddrlea ebx,oldGameCodemov ecx,[ebx]mov word ptr ds:[eax],cxmov ecx,[ebx+2]mov dword ptr ds:[eax+2],ecx//mov HookLuaAddr[0...5],oldGameCode[0...5]pop ecxpop ebxpop eax}}

第一次在csdn写博客 试试 大家随便 看看 话说怎么传压缩包

好久之前写的天龙八部辅助思路分享相关推荐

  1. 安卓Hook微信-计步器、万能骰子、自动回复、反撤回、抢红包思路分享

    此篇博客仅实现的思路分享,不提供最终成品 目录 学完你能收获什么 要求 前置条件 运行环境 成果 最终效果 开发耗时 最终Hook的类 实现 需知 1.选择root或VA 2.反编译代码工具 3.YA ...

  2. 第一届华数杯A题完整思路分享

    A题完整思路分享 第一问: 要想问题做的好,美图肯定少不了.这道题,建模时不但要用数学公式把模型说清楚,还要一些图来帮助别人理解,让别人一眼就看懂你写的东西,话不多说,我们先放一张类似下面的图,记得说 ...

  3. 2020“东方国信杯”高校大数据开发大赛最终榜第三名思路分享

    2020"东方国信杯"高校大数据开发大赛最终榜第三名思路分享 2020"东方国信杯"高校大数据开发大赛刚刚结束,我所在的队伍"三人运动团"最 ...

  4. HyperLedger Fabric 学习思路分享

    HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...

  5. NB-IOT实现万物互联设计思路分享 (从硬件到单片机到云平台)

    NB-IOT实现万物互联 产品设计思路分享 NB-IOT窄带物联网(Narrow Band Internet of Things, NB-IoT),是一种专为万物互联打造的蜂窝网络连接技术.NB-IO ...

  6. 《渗透测试》一次“上车”不给车费的思路分享

    一次"上车"不给车费的思路分享 0x01 师傅们都知道,Q群加的多.好多东西就会越多. 东西多要来干什么?当然是本着分享的原则 但是,软件就不分享了.在这里分享一下思路. 下载AP ...

  7. 关于第八届蓝桥杯单片机初赛----电子钟设计的题目分析和编程思路分享

    关于第八届蓝桥杯单片机初赛----电子钟设计的题目分析和编程思路分享 1.前言 蓝桥杯单片机比赛,对于初试者,比如那些没有接触51系列单片机,或者很少编程训练的人而言,确实很有挑战力.而即使对于有基础 ...

  8. “授之以鱼” 不如 “授之以渔“(网页设计-第十次作业-思路分享)

    一,为什么要写一篇思路分享的文章? 预料之外–阅读量上升 因为我将网页制作和java作业整理上传的CSDN的最初原因,是为了数据归档,当然也可以给有需要的朋友参考一下.之前看了一下,好像网页制作的作业 ...

  9. 浅谈漏洞思路分享-只有登录框的渗透测试

    目录 0x00 弱口令 0x01 sql注入 0x02 暴力破解 0x03 验证码绕过 0x04 修改响应码 0x05 目录扫描 0x06 找回密码功能 0x07 注册功能 0x08 历史漏洞 0x0 ...

最新文章

  1. 一文带你了解 MySQL 中的各种锁机制!
  2. 【观点】避免不必要的代码缩进和嵌套
  3. 使用ASP.NET实现Model View Presenter(MVP)
  4. Newtonsoft.Json(Json.net)的基本用法
  5. px、em、rem、fr等前端单位介绍
  6. gj12-2 协程和异步io
  7. 参数变化_PDP驱动波形参数分析
  8. SVN 分支/合并/切换
  9. 【OS学习笔记】九 实模式:从汇编的角度理解栈结构
  10. linux查看发起ddos攻击的ip,在Linux上使用netstat命令查证DDOS攻击的方法
  11. 企业Web应用中的敏捷测试和瀑布测试
  12. jspSmartUpload的使用—实现文件上传
  13. adbyby广告屏蔽大师使用体验,附自己的过滤规则
  14. html怎么链接scc,htmlscc基础知识
  15. ​LeetCode刷题实战518:零钱兑换 II
  16. 服务器硬盘噪音大怎么回事,东芝服务器硬盘响声大吗?
  17. springboot快速开发框架,适合二次开发(一)
  18. springboot-高校医院体检系统
  19. 【2017年中总结】——半饱
  20. seo文案策划的一些日常工作内容

热门文章

  1. 10 年了,这个程序员社区终于被收购了!
  2. Vue笔记(天禹)后四章
  3. 多个input设置全选中的两种方式
  4. 代码注释工具cloc的安装和使用
  5. 用python画出小人发射爱心_用python代码turtle画一个坐地铁
  6. yr奇怪的打jar包步骤
  7. (转载)如何将jdk完全卸载
  8. ROS-Industrial :Robot Contoller Layer
  9. 上海交大计算机科学技术导师介绍,上海交大电子信息与电气工程学院研究生导师介绍:申丽萍(计算机应用研究所)...
  10. rnss和rdss的应用_北斗RNSS和RDSS