好久之前写的天龙八部辅助思路分享
关于某网游的二叉树分析和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写博客 试试 大家随便 看看 话说怎么传压缩包
好久之前写的天龙八部辅助思路分享相关推荐
- 安卓Hook微信-计步器、万能骰子、自动回复、反撤回、抢红包思路分享
此篇博客仅实现的思路分享,不提供最终成品 目录 学完你能收获什么 要求 前置条件 运行环境 成果 最终效果 开发耗时 最终Hook的类 实现 需知 1.选择root或VA 2.反编译代码工具 3.YA ...
- 第一届华数杯A题完整思路分享
A题完整思路分享 第一问: 要想问题做的好,美图肯定少不了.这道题,建模时不但要用数学公式把模型说清楚,还要一些图来帮助别人理解,让别人一眼就看懂你写的东西,话不多说,我们先放一张类似下面的图,记得说 ...
- 2020“东方国信杯”高校大数据开发大赛最终榜第三名思路分享
2020"东方国信杯"高校大数据开发大赛最终榜第三名思路分享 2020"东方国信杯"高校大数据开发大赛刚刚结束,我所在的队伍"三人运动团"最 ...
- HyperLedger Fabric 学习思路分享
HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...
- NB-IOT实现万物互联设计思路分享 (从硬件到单片机到云平台)
NB-IOT实现万物互联 产品设计思路分享 NB-IOT窄带物联网(Narrow Band Internet of Things, NB-IoT),是一种专为万物互联打造的蜂窝网络连接技术.NB-IO ...
- 《渗透测试》一次“上车”不给车费的思路分享
一次"上车"不给车费的思路分享 0x01 师傅们都知道,Q群加的多.好多东西就会越多. 东西多要来干什么?当然是本着分享的原则 但是,软件就不分享了.在这里分享一下思路. 下载AP ...
- 关于第八届蓝桥杯单片机初赛----电子钟设计的题目分析和编程思路分享
关于第八届蓝桥杯单片机初赛----电子钟设计的题目分析和编程思路分享 1.前言 蓝桥杯单片机比赛,对于初试者,比如那些没有接触51系列单片机,或者很少编程训练的人而言,确实很有挑战力.而即使对于有基础 ...
- “授之以鱼” 不如 “授之以渔“(网页设计-第十次作业-思路分享)
一,为什么要写一篇思路分享的文章? 预料之外–阅读量上升 因为我将网页制作和java作业整理上传的CSDN的最初原因,是为了数据归档,当然也可以给有需要的朋友参考一下.之前看了一下,好像网页制作的作业 ...
- 浅谈漏洞思路分享-只有登录框的渗透测试
目录 0x00 弱口令 0x01 sql注入 0x02 暴力破解 0x03 验证码绕过 0x04 修改响应码 0x05 目录扫描 0x06 找回密码功能 0x07 注册功能 0x08 历史漏洞 0x0 ...
最新文章
- 一文带你了解 MySQL 中的各种锁机制!
- 【观点】避免不必要的代码缩进和嵌套
- 使用ASP.NET实现Model View Presenter(MVP)
- Newtonsoft.Json(Json.net)的基本用法
- px、em、rem、fr等前端单位介绍
- gj12-2 协程和异步io
- 参数变化_PDP驱动波形参数分析
- SVN 分支/合并/切换
- 【OS学习笔记】九 实模式:从汇编的角度理解栈结构
- linux查看发起ddos攻击的ip,在Linux上使用netstat命令查证DDOS攻击的方法
- 企业Web应用中的敏捷测试和瀑布测试
- jspSmartUpload的使用—实现文件上传
- adbyby广告屏蔽大师使用体验,附自己的过滤规则
- html怎么链接scc,htmlscc基础知识
- ​LeetCode刷题实战518:零钱兑换 II
- 服务器硬盘噪音大怎么回事,东芝服务器硬盘响声大吗?
- springboot快速开发框架,适合二次开发(一)
- springboot-高校医院体检系统
- 【2017年中总结】——半饱
- seo文案策划的一些日常工作内容