Loading... # 声明 <div class="tip inlineBlock error"> **由于传播、利用此文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,五步十阁及文章作者不为此承担任何责任。五步十阁拥有对此文章的修改和解释权。如欲转载或者传播此文章,须保证此文章的完整性,包括版权声明等全部内容。未经五步十阁允许,不得任意修改或增减此文章内容,不得以任何方式将其用于商业目的。** </div> # 前言 因某朋友找上门,想要我帮忙写个自动化机器人,以将自己从繁重的游戏搬砖中解放出来。考虑到自己丢弃在硬盘角落的那堆数据,本着折腾原则,决定搭建一套完整框架,以脚本驱动功能,实现需求变动后,只需进行对应脚本开发就行。 # 整体框架 采用中控(人机界面)统一管理游戏进程及脚本执行,DLL封装功能API并提供给lua、DLL维护lua状态机解释执行自定义脚本。 # 技术选型 使用过MFC、Qt及WinForm编写中控界面,C/C++编写DLL。 本次采用WPF(致敬.net 5,其实是想借机学习下WPF技术)编写中控界面,C/C++实现低层汇编交互(指针读写、call主线调用等)及公共语言运行时支持(CLR),C#实现功能封装到DLL(也不排除使用c++来实现DLL)。 # 功能划分 ## 对象管理(objectmanage) * 该游戏将场景以外的对象(包括怪、NPC、玩家、动植物、桌椅板凳火盆等小建筑及传送门等的各种属性),存储在一个总的链表中,各对象通过全局GUID来表征唯一身份。 需要通过对该链表的实时遍历来实现游戏对象管理。 ## 角色控制(playercontrol) * 实现角色/宠物移动(mount、moveforward、moveback、moveleft、moveright、rotate player face、move to specific 3D position、fly point etc) * 实现角色技能释放(skill cd、skill template、cast skill etc) * 实现物品交互(use、drop、equipment、repair、buy、sell、mail etc) * 实现金钱管理(earn money per hours/days、mail etc) * 实现角色状况管理(hp、sp、bag、dure、weapons、ghost etc) ## 导航(navigation) * 使用开源工具解压游戏地图包,并借助开源工具AmeisenNavigation搭建快速路径规划与导航(优先度最低)。 ## 交互(interaction) * 实现与对象交互(interact with npc、portal、mail、master、ground wood etc)。 ## 登陆(login) * 实现登陆状态管理、账号自动登陆、防暂离、安全令验证码输入(借助国外某工具实现)。 ## 与游戏lua交互 * 该游戏UI及interact都采用lua状态机管理维护,上述大部分功能都需通过游戏(lua_excuteframe 接口)来实现。 * 或者调用lua_function 对应的 c function。 # 需解决的技术障碍 * lua_state反汇编。 * c# function 封装到 lua。 * 实现多返回值的获取(注册 function callback 到游戏lua中实现,很大几率需要自己实现lua_excuteframe 及下层 function 以规避检测)。 * 实现游戏主线程执行我们自己构造的call(call lua_exceteframe or call c function)框架,采用message handler方式(常规方式,容易被发现),采用EIP注入main thread方式(稳定性和兼容性稍差,实现较难)。 * 游戏进程空间采用 memory map方式,inline hook需修改 memory page属性。 * 规避memory scan 、call stack check 、behavior check etc。 * anti call stack check 最后修改:2021 年 09 月 22 日 11 : 38 AM © 禁止转载