• 33480阅读
  • 337回复

[面向新手] 【诛仙2外挂开发】阿冬视频教程_学习讲解 [复制链接]

上一主题 下一主题
离线神话工厂
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2013-06-08
— 本帖被 啊冲 从 游戏逆向 移动到本区(2015-10-17) —
看到一个比较完整的教程,以此为基础进行点评
希望对课程的讲解可以帮大家节省时间
也希望大家觉得有帮助的话,多向朋友推荐本论坛www.hifyl.com

01.外挂简介与工具使用,本课内容根据基础不同学习时长为1分钟-1个月不等
1.CE的使用,建议跳过
CE的学习请参考 CE中文Tutorial,快速上手
2.OD的使用,建议跳过
OD的学习可以参考阿冲教程OD部分 http://www.hifyl.com/read.php?tid=20
剩下的查看附件OllyDB入门教程.7z
3.Unicode文本查找
注意:CE查找Unicode文本有bug,所以要将文本转换成十六进制文本数组再进行查找,这个转换工具真开始写程序的时候,自己写。
4.易语言使用 从12:30开始
大概看一下,自己试一下,很多人已经用过易语言了,这段可以跳过
     by www.hifyl.com 神话工厂

02.CE查人物属性,本课内容较为简单,根据基础学习时间为10分钟-2小时不等

1.课程通过人物血量作为入口查找人物基址
实际运用过程中要考虑到某些游戏的血量可能是浮点数,其余按照教程操作即可
2.这里没有说到坐标的概念
现在所有用3D引擎开发的游戏都有三维坐标的概念,有必要扩展阅读一下关于游戏开发的知识
现在简略说明一下,作为游戏场景中一个粒子,完整的属性有刚体、模型、坐标、角度等,而作为一个游戏场景必然会有摄像机,摄像机一般都是跟随玩家角色的,所以当你束手无策的时候,可以拿3D坐标作为切入点,xyz坐标一般是小数型
3.人物基址的概念
所谓人物基址,无非就是一个结构的地址,为了更深入了解结构的概念,希望你先从开发者角度出发,在自己所用的编程语言中建立一个结构,将你所玩游戏的人物信息所有属性包含在内,然后再尝试写一份源代码,将每个属性赋值,这是很重要的作业,在搞明白之间,不建议继续往下看。
如果有余力有基础的,可以在OD中调试,顺便使用MemView结构化内存监视器查看。
这样你会充分理解,人物属性,包裹,技能,当前动作等概念
     by www.hifyl.com 神话工厂

03.读出人物数据. 根据基础不同,学习时间为10分钟-2小时不等

1.这货不大会用遍历工具,所以前面5分钟因为不知道遍历出来的数据会直接累加到列表下面而在哪里发愣,前5分钟没营养,跳过
为了防止找不到工具,提供遍历工具一份,标题请自动忽略,这样的遍历工具应该是学完教程之后每个人都能写出来的。
推荐使用FaFa_Toolbox,如果想偷懒不自己写遍历工具,那么就用FaFa_Toolbox吧,因为附带的截包功能不错
2.说到遍历,需要提前了解一下结构的概念,C语言的结构比较抽象,所以用易语言的图表形式来解释,你可以把结构理解为一本书的目录,假设你是游戏设计师,那么你要建立一个结构来存放信息,描述一个人物,看"结构理解.png"
结构的概念非常重要,实际上你对结构理解的话,就会轻易猜到某些信息会在什么位置,例如背包、NPC商品、动作.
3.那么现在来理解什么叫做基址
把一个游戏场景看做是图书馆,那么游戏中的每个单位(unit)对应的就是图书管里存放的书,每个单位又有不同属性,这就好比书的每一章节有不同内容。
总基址=图书馆地理位置
一级基址=图书馆所在的楼
人物基址=书存放的位置
结构=书目
偏移量=页数
属性=章节内容
在游戏开发中,运用3D引擎构建游戏单位,作为一个单位,可以附加多个属性,每一次当设计师添加删除“玩家角色”的一些属性时,我们就会发现偏移量发生了改变,这就好比说一本书发行了一个版本之后,再版时编辑在里面增删了一些内容,结果后面章节就顺次移动了,这样就理解了小更新之后找包裹偏移、动作偏移、人物ID会发生改动,但是改动偏移往往只有4-8的原因。
4.人物基址找到了,就相当于已经把书拿在了手里
现在你可以用MemView直接遍历人物所有属性,由于人物信息是一个很大的结构,所以查看的内容可以多一些,遍历个数设置400,你所看到的一大堆数据里面,包含了角色ID,角色名,帮派ID等等所有信息,要确定这些信息,只需要观察、猜想、测试就行了,这部分是需要靠经验的,所以直接告诉答案的方式不利于成长
5.关于模块函数的调用可以省略了,将人物信息读出来这部分当做是作业来做
提供所用到的函数
     by www.hifyl.com 神话工厂

04.找出背包偏移 学习时间为10分钟-2小时不等
1.上节说过,把人物类型看做一本书,物品类型也是如此
2.视频中挪动包裹物品,相当于是把书架子上换次序,书里面的内容是不变的
包裹则相当于是一个书架,挪动物品会改变书架上的摆放次序
这个寻找基址的过程是常用的,可以参考的,不过还可以简化
你可以想象一个图书馆,书分几个区,比如人文、科技等等,在游戏中就分为环境基址、人物基址,记录下这些基址,其实你就发现[[B269BC]+1C]+28 存放的就是人物基址
3.他所解释的物品各属性并不直观,为什么会有这个属性,为什么会出现这样的属性等等。所以用一个工具列出物品属性,实际游戏中物品属性跟这个大同小异,是一个很复杂的结构,游戏设计者使用如此复杂的结构目的是为了描述一个物品,这些属性在必要的时候会被服务器读取调用。
4.背包是一个数组,理解形如 [eax+edx*4]这样的数组对象很重要,方便以后查找其他偏移
     by www.hifyl.com 神话工厂

05.读出包裹数据 学习时间为10分钟-2小时不等

1.总的来说,这节课程只能粗略一看,根据课程我改写了一下源代码,因为有一个习惯非常重要,就是不可以直接用他人的模块,模块的功能源码要自己完善。
这个源代码为了兼顾课程内容,所以会有许多不完善的地方,以后的课程会慢慢完善.
2.关于游戏物品类型不同导致物品名称偏移改变的问题,作为一道思考题,留给大家作为课后作业。提示一下,使用遍历的方式可以方便理解,怎样将这个过程自动在遍历过程中运用呢?
3.接下来的几课营养价值不高,不如直接看源码学习来得快
      by www.hifyl.com 神话工厂

6-9节课查找地面物品数据以及周围怪物数据,粗略看一下就好时间20分钟-30分钟
找到基址的朋友可以把遍历怪物的写法当做课后作业

10-11节,找到动作Call并且写出远程调用,时间10分钟-1小时
1.之前6-9课有些内容是新手看不懂,老手无须看的,这一节课新手需要研究一下Call的原理,那些看不懂的东西以后对数据结构熟悉之后就会恍然大悟的。例如6-9节课有一个地方他是讲错的,找怪物数组,自己可以挂掉,但是怪物不能打死,他打死之后找到的是选中怪物的信息,回溯之后应该还在人物信息的结构之内,得不到环境基址,更谈不上遍历怪物了,即使通过OD找到了所有数据,那也是蒙的。2.许多游戏有明文封包的概念,发包操作游戏比较方便,明文封包可以控制绝大部分动作,但是Call还是必不可少的,所谓Call其实是一个函数调用,而发包则是到了最后执行的阶段了,函数调用过程中要经过很多子函数
例如你想要拿枪打一个目标,你首先得识别敌我,接着瞄准,然后计算风力,再打开保险,最后无误才会扣动扳机,那么技能攻击Call将会经历差不多的过程,会判断人物死亡无法使用、没有蓝无法使用、技能冷却不能使用等等等等,到了最后才会构造发出封包,所以Call是需要找的只要知道怎么找就行,能用封包代替的还是尽量用封包代替
3.堆栈平衡的概念,绝大部分的Call是堆栈平衡的,堆栈也就相当于仓库,丢进去多少,最后取回多少,检查堆栈是否平衡有简单方法,下断停留在Call这条语句,F8步过,检查前后ESP有没有发生改变就知道了。
往往通过高级语言编译出来的Call堆栈都是自动平衡的,而游戏绝大部分都是C++写的,利用这一点可以很明确观察Call的最后RETN X,这个X的值除以4基本就可以确定参数数量,万一遇到Add ESP,X这样的指令就需要检查在Call头部有没有Sub ESP,X这种指令,Sub ESP指令说白了就是在堆栈先划出一片区域。
一个Call的参数除了push进堆栈的之外,根据习惯,常常会使用Ecx、Esi、Eax,打坐Call是最简单的,可以跟着找一下写一下。
4.测试动作Call,代码注入器很多,就不推荐了,实际OD或者CE也都可以做的,之后自己写程序也一样,是个很简单的功能。
5.找Call的过程有一些技巧,如果你实在不知道哪个Call才是自己要找的,为什么要返回那么多层,可以观察堆栈里的数据,堆栈的使用是找Call的关键,通常每一个Call都会在堆栈留下足迹,包括从哪里来,带了些什么来,例如喊话Call的寻找,你返回的时候就会直接在堆栈看到自己所提交的内容,打怪Call则会在堆栈留下技能ID
     by www.hifyl.com 神话工厂
1.Swith结构在易语言里面就是判断,你可以写出和游戏反汇编之后相同的结构,在程序编写中多使用判断会让程序显得清晰明了并且提高能执行效率,相对的如果、如果真,也就是if指令用得多,等你以后回头检查自己代码的时候就会知道痛苦了。
2.他把case(K死)都成了Course(烤死),这个不要跟着读。
3.将找到的Call写出来有更简单的方法,这个技巧在啊冲的OD讲解里面有.
4.压栈的方式一开始很难理解,那就想象一下,吃饭时候的碟子,一个一个收起来,一个一个摆放在桌上,这样的过程就是压栈和出栈。
5.计算堆栈平衡,记得OD显示的是十六进制数,怕搞错可以先用计算器计算。除了堆栈平衡之外,许多Call都会调用ECX,ESI,EBX这些寄存器,这个需要分析代码,一开始不懂就可以用猜的,看多了自然会懂了。
     by www.hifyl.com 神话工厂

12 ID吃药 时间(10-20分钟)
这节只能当做找Call的一种演示来看,没有什么营养,实际操作中,吃药是用发包实现效率最高,但是到26节才会讲到封包的概念,并且也是用于发包卖物,实际发包能做的事情很多,只要运用得当,可以减少辅助的维护精力,也能让程序更加简洁效率。

13 ID选怪 时间(10-20分钟)
和上节课一样,选怪如果用发包,将会很简单

14.待续...
下载地址:
本部分内容设定了隐藏,需要回复后才能看到





1条评分小风币+3
啊冲 小风币 +3 感谢分享 2013-06-08
离线神话工厂

只看该作者 沙发  发表于: 2013-06-08
压缩包解压密码:www.hifyl.com
离线xzr23

只看该作者 板凳  发表于: 2013-06-12
第一次来这个论坛,貌似挺不错的,冲哥+Y,冲哥V5
顺便求空格跳跃的偏移...
离线啊冲

只看该作者 地板  发表于: 2013-06-12

没搞过这个游戏,大不了你用海底捞针法找吧。
善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线神话工厂

只看该作者 4楼 发表于: 2013-06-13
回 xzr23 的帖子
xzr23:第一次来这个论坛,貌似挺不错的,冲哥+Y,冲哥V5
顺便求空格跳跃的偏移... (2013-06-12 19:11) 

你究竟是要找按键Call还是要找跳跃Call?
离线jun001

只看该作者 5楼 发表于: 2013-06-16
谢谢 感谢分享
离线652088732

只看该作者 6楼 发表于: 2013-06-17
谢谢 感谢分享
离线xzr23

只看该作者 7楼 发表于: 2013-06-17
回 神话工厂 的帖子
神话工厂:你究竟是要找按键Call还是要找跳跃Call? (2013-06-13 14:57) 

好像发送按键被屏蔽了,当然是要跳跃call了,
离线神话工厂

只看该作者 8楼 发表于: 2013-06-17
回 xzr23 的帖子
xzr23:好像发送按键被屏蔽了,当然是要跳跃call了, (2013-06-17 07:50) 

你说的是按键消息,我说的是游戏内部的按键Call
离线lingzhuxi

只看该作者 9楼 发表于: 2013-06-17
学习   来顶一个
离线xzr23

只看该作者 10楼 发表于: 2013-06-17
回 神话工厂 的帖子
神话工厂:你说的是按键消息,我说的是游戏内部的按键Call (2013-06-17 10:48) 

能实现跳跃既可
离线神话工厂

只看该作者 11楼 发表于: 2013-06-18
回 xzr23 的帖子
xzr23:能实现跳跃既可[表情] (2013-06-17 15:10) 

如果你单纯找的是跳跃Call,还记得无限跳的BT功能么,写的就是这个Call前面的push
离线偷心无痕

只看该作者 12楼 发表于: 2013-06-19
www.hifyl.com
感谢分享!~~~~~
离线神话工厂

只看该作者 13楼 发表于: 2013-06-19
回 偷心无痕 的帖子
偷心无痕:www.hifyl.com[表情] [表情] [表情] [表情] [表情]
感谢分享!~~~~~ (2013-06-19 13:34) 

有人看,不错哦,这几天我忙完了再继续更新
离线lybqqh

只看该作者 14楼 发表于: 2013-06-21
学习顶下
离线meideli

只看该作者 15楼 发表于: 2013-06-21
长见识来的。
离线莫名

只看该作者 16楼 发表于: 2013-06-24
看看吧。
莫名
离线小懂哥

只看该作者 17楼 发表于: 2013-06-24
谢谢 感谢分享
离线q765758576

只看该作者 18楼 发表于: 2013-07-23
厉害了我的哥
厉害了我的哥
厉害了我的哥
离线q765758576

只看该作者 19楼 发表于: 2013-07-23
看看  支持下




厉害了我的哥
厉害了我的哥
厉害了我的哥
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个