本帖最后由 843048537 于 2015-12-31 18:27 编辑
→_→
先讲个很长很长的小故事(不想看的可以直接跳过)。
【32】????烧尽思念????(747527083) 14:16:55
易语言你搜索特征码静态地址还行,如果是动态的...I3的电脑估计怎么也弄个几分钟甚至奔溃
【256】MC||mq2151189(372515833) 14:18:19
E 语言这么屌吗
【256】MC||mq2151189(372515833) 14:18:46
看来 e语言 和别人说的 一样 玩具 啊
【32】????烧尽思念????(747527083) 14:23:08
不会语言的搞E语言简单..
【32】????烧尽思念????(747527083) 14:24:18
易语言占用内存太大而且释放出来的东西太多了
【256】MC||mq2151189(372515833) 13:48:52
E语言 有人反映效率不行
【256】MC||mq2151189(372515833) 13:49:05
你搜起来如何?
【32】nonprocess(843048537) 13:49:21
。。。
于是小白就不服→_→,想找搜索特征码快点的源码,并不能找到。。
然后马上写了个搜索特征码的功能,搜索的思想就是读出区域内存后匹配字节集找地址,
发现??这样的字符不好用字节集匹配,干脆把内存的字节集改成文本来匹配
后来发现文本直接暴力匹配的效果感人→_→,我搜索个特征码放了一下午都还没匹配完
于是就打算改进算法→_→,最先想到的就是kmp,结果因为??通配符的缘故,没法找
然后又用sunday算法来匹配,测试后,时间大概用了半小时匹配完了。。
关于介绍各种高效文本匹配的文章我推荐一篇→_→:http://dsqiu.iteye.com/blog/1700312
后来就有点颓废→_→,E语言真这么慢么。。
然后我就想,既然CE搜索那么快,那干脆看一下CE源码里搜索的这段怎么写的吧。
这里贴出CE的源码(CE是pascal写的)下载地址:http://cheatengine.org/download/CheatEngine64src.rar
CE源码作者写得有点乱,没找到搜素特征码那部分,不过找到了一个新思路--限制搜索范围
正常搜索范围是00000000到7fffffff,但其实游戏一般真正有用的地址都是本身进程名那个模块下范围的地址
所以用Process32First和Process32Next来完成限制搜索范围的工作,然后再测试了一下,缩短到1分钟了(搜索范围大概从00400000到0fffffff)
后来实在提不了速了,干脆想新思路→_→
于是想出这样一个思路:
我们先无视??通配符,取一段没通配符的进行搜索,搜索到的地址放到一个记录数组里
然后跳过通配符,把下一段在地址数组里面筛,每次筛掉一点,最后就剩几个了
这个思路看似效率很慢,但易语言自带的 寻找字节集() 这个效率真的特别快,所以效率反而提高了
于是经过测试,没限制搜索范围的用了10秒,限制了搜索范围后秒出!
顺便说一句,里面那些DLL命令和 十六到十,十到十六,写内存字节集,内存搜索,这些是直接从超级模块的源码上COPY下来的
大神勿喷!小白想了很久的说→_→,写个功能不容易,既然是新年,源码就不收JB了
但是,你们一定要回帖哦(你们都不回帖的话枉我打了这么多字)
process模块.zip
(8.14 KB, 下载次数: 964)
|