本人是一个菜鸟,只是原来原来学过一点汇编,所以看见别人做外挂,手一痒,自己也学起做外挂来,在做外挂的过程中,发现游戏一升级找到的call、数据位置总是发生变化,经过查阅资料发现有特征码这种东西,自己根据网上的内容自己写了一个搜特征吗的东西,高手别来笑话我啊。
我用的是autoit配合大漠插件做的软件,(其实什么编程工具不重要)
搜特征吗有很多人用的是KMP算法,我查了查据说有更好的,Sunday算法,根据sunday算法搜字符串(搜数据是一样的)效率要更高一些。所以根据这个算法编了一个程序。
现在科普一下Sunday算法
比如我们要搜索一段字符串,(特征码最少两位写起来太麻烦)
在 substring searching algorithm 中搜索
search
这是直接从别处粘过来的
第1次比较
substring searching algorithm
search
s相同,就接着比较下个字符结果第二个字符不同(u和e)search这个字符串肯定不在前6个字符内。
怎么办呢向后错一位
substring searching algorithm
search
结果i在search中根本没有,那么说明第3—7这6个字符也不是这个字符串(差一个就不是了)
所以把串放到第8位再去比较
substring searching algorithm
search
这样比完第一个n又不和s相同,再向后错一位
substring searching algorithm
search
最后一位是r,这时我们不能直接向后跳6位了,因为最后一位不同不代表这里不包含要搜字符串的内容,我们把r对齐字符串中的r
substring searching algorithm
search
这样就对齐了,也就找到了字符串的位置
我们搜特征码也是一样,只不过把字符串改成了一位位的十六进制数。
比如我搜的一个怪物遍历特征码是
F7E6C1EA0669D2E80300008BC62BC269C0????????8B8408????????85C07411
只是把字符换成了F7 E6 C1 EA 06 69 D2 E8 03 00 00 8B C6 2B C2 69 C0 ?? ?? ?? ?? 8B 84 08 ?? ?? ?? ?? 85 C0 74 11
在搜索的时候先把ini文件中的特征码从字符转成数字,如第一个f7就是247,e6就是230,
而??由于可以代表任意数,超过255所以我在搜索的时候用整数类型去比较。
而在搜索的过程中,游戏的call或数据很多,可能autoit是解释型的编译方法,大漠插件又需要调用外部dll,效率有一些低,搜一个特征码,有时要1分多钟,而我找的特征码有二、三十个,如果全找下来可能要1个小时,这让我有点不能接受,不过还好这些数据大多都是有一定顺序的,即使更新了,也不会有太大的顺序变化,有时甚至查到一个,向后推相同的距离就找到下一个。所以我在搜索的时候首先把基址进行一下排序,然后再搜,搜到一个后,按顺序搜下一个,这样基本上比搜一个差不了多少时间。(也有特殊的,所以就搜到最后后从头再搜)
这就是我自己编制的特征码的方法,起码不用再依赖ce,od去一个个的搜了
下面附上我在ini文件中特征码的格式
[XXX]
code=038E????????C1F8050386????????3BF95E75113BD8750D50518B0D????????E8
offset1=1c,4,d
offset2=21,4,j,4
BaseAddress=0060D24C
data1=008AE958
data2=00598E50
Status=已更新
其中offset1、2第1部位是偏移量,第2部分是数据的位数,第3位是数据的类型d是普通型的,j是调用型的,找到后会到这个call里去找。
各位高手不要笑话,多给点建议。
这是我程序的界面
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!