Seraph 内存搜索

一般情况下,为了应付游戏的动态内存地址,我们用基址的方式来读取内存,不过前提是可以知道基址。有的游戏,基址是很难分析到的,而且很多游戏加了隐藏和变换,搞的分析起来特别复杂。这个时候,借助Seraph,我们可以用另一种方式——搜索内存。

虽然找不出基址,但是我们可以很轻松的找到一些我们想要的数据的直接地址。比如我们在一次游戏的运行里,可以用CE找到血的地址是&H900010, 血最大值的地址是&H900014,MP地址&H900020,最大MP&H900024。

虽然下一次游戏运行时,这些地址都会变,但是我们知道,这些地址互相间的相对地址偏移是不变的。也就是说最大血地址=血地址+4,MP地址=血地址+&H10
这样我们就可以搜索了。举个例子,我们知道我们的血/最大血/MP/最大MP分别是8000/8000/12000/12000。那么在脚本里,告诉Seraph的内存搜索引擎,我们要搜索一个地址,它的值是8000,这个地址+4的值也是8000,这个地址+&H10和+&H14的值是12000。这样的地址,一般在游戏里只有一个。
怎么搜索呢?


代码如下:

ClearSearchMemoryTable()
AddSearchMemoryItem(&H900010, 2, 8000)
AddSearchMemoryItem(&H900014, 2, 8000)
AddSearchMemoryItem(&H900020, 2, 12000)
AddSearchMemoryItem(&H900024, 2, 12000)
if SearchMemory(&H000000, Address) then
Print("找到地址:"&Address)
end if

注意,以上代码里,我们调用AddSearchMemoryItem函数来设置一些我们要搜索的条件。
第一个参数是每个值的地址。不用担心这个地址在下一次游戏运行时不正确,Seraph搜索只关心所有添加的搜索项之间的“相对地址”。
第二个参数是指定类型,2代表四字节整型。我们同样可以添加双字节,浮点数,以及字符串等不同类型。详见帮助手册。
第三个参数就是这个搜索项的值。你必须填入这个数据的当前值,如果填错了,就搜不到了。(关于怎么在脚本里指定当前的用于搜索的值,我们之后讲)
注意,第一行的ClearSearchMemoryTable()是用于清除上一次添加的搜索项。重新开始一次搜索前我们都要调一上这个函数。
添加完了这4个搜索项以后,我们用SearchMemory开始搜索。第一个参数表示搜索的开始值,我们一般都可以用&H000000。第二个参数值用于返回搜索到的结果。
搜到的结果就是第一个搜索项的地址,也就是当前血的地址。我们可以保存这个地址,用ReadMemory随时去读数据。

那么,整体的流程应该是:
1. 在参数设置里,我们添加一些参数,用于填入搜索的数据。告诉用户在脚本开始前,先设置这些数据。比如,填入自己的血,MP,并在红蓝满的时候开始脚本。
2. 在脚本一开始,用GetConfigNumber等函数取出设置的值,用以上代码搜索内存,把得到的数据保存下来
3. 在脚本运行中,用保存下的地址,加上各种我们已经知道的偏移量,随时读取各项数据的值。

小技巧:

怎样添加搜索项才可以最方便准确的搜索到我想要的那个唯一的内存地址?
当然是与角色越相关越好的。比如角色的各项属性值。使用更多的搜索项可以有效的防止搜索的不准确(即搜到不止一个地址),但是也会带来每次启动脚本时的麻烦,因为我们启动时都要设置一下搜索值。建议用一些不经常变的值,比如,等级,攻击值等,只有升了级才会变。而血值是经常变的。
同时,根据我们的经验,角色名字是很好的一个搜索项。如果我们可以分析到角色名字的地址,加在搜索项里(字串型),一般就可以很准确的搜索到结果。
一般的游戏角色名是UTF8形式的。我们可能要先将角色名用GBToUTF8函数转换成UTF8编码的字串,再用AddSearchMemoryItem添加。

如果有时候我们添加的数项不够,或者我们在调试自己脚本的时候,会搜索到不同的内存地址,我们想让脚本全部输出,怎么办?

复制内容到剪贴板

代码:
AddSearchMemoryItem(...)
AddSearchMemoryItem(...)
...
Address=0
while SearchMemory(Address+1, Address)
  Print("找到地址:"&Address)
wend

原理就是从0开始,每搜索到一个地址,先输出,然后从这个地址+1继续往下搜,一直到搜不到为止。

(0)

相关推荐

  • Seraph 内存搜索

    一般情况下,为了应付游戏的动态内存地址,我们用基址的方式来读取内存,不过前提是可以知道基址.有的游戏,基址是很难分析到的,而且很多游戏加了隐藏和变换,搞的分析起来特别复杂.这个时候,借助Seraph,我们可以用另一种方式--搜索内存. 虽然找不出基址,但是我们可以很轻松的找到一些我们想要的数据的直接地址.比如我们在一次游戏的运行里,可以用CE找到血的地址是&H900010, 血最大值的地址是&H900014,MP地址&H900020,最大MP&H900024. 虽然下一次游

  • Seraph sp脚本运行软件下载

    - 6.28修正了6.27中的一个验证方面的错误.感谢天天脚本的帮助.向受影响的用户道歉! - 修正了在函数内的DIM语句赋初值时没有正常赋值的问题 - 加入一些加密元素,进一步提高网络验证脚本的安全性 - 改进了共享脚本打包流程的指导性 - 网络验证脚本新支持创建充值卡,供作者自由销售 为什么要用 Seraph ?  ◆因为他是免费的,而且永远免费.  ◆因为他不仅免费,而且强大.  ◆精确灵活的内存搜索函数,支持多数据项地址位移搜索,每秒搜索30M以上.  ◆增强的屏幕图像搜索功能,支持区域

  • 卡巴斯基(AVP)内存驻留型病毒检测方法

    author:killer  <killer②uid0.net> 卡巴斯基反病毒软件(Kaspersky Antivirus),以前叫AntiViral Toolkit Pro(AVP),出于习惯和简单,这里一律称为AVP或KAV. 学习AVP的检测办法的意义一方面在于AVP的检测方法是经过理论验证和实践考验的科学合理的方法,另外DOS年代过来的朋友对于反病毒有过这样的经验:"机子感染病毒了?好,请用干净无毒的系统盘启动,然后全盘查杀.",我记得CIH横行那会,一个朋友让我

  • 详解易语言内存修改框架

    源码 ID = 进程_名取ID ("PlantsVsZombies.exe") 调试输出 (ID) 基地址 = 内存.读整数 (ID, 进制_十六到十 ("6A9EC0")) 调试输出 (基地址) 一级偏移 = 内存.读整数 (ID, 基地址 + 进制_十六到十 ("768")) 调试输出 (基地址) 监视热键 (&阳光增加, #F8键) 阳光 = 内存.读整数 (ID, 一级偏移 + 进制_十六到十 ("5560")

  • 易语言内存读取获得当前PC已经登陆微信号的代码

    取当前PC登陆微信号的代码 此功能需要加载精易模块5.6 .版本 2 .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_创建完毕 .局部变量 局部_登陆个数, 整数型 .局部变量 局部_微信号, 文本型, , "0" .局部变量 i, 整数型 局部_登陆个数 = 取当前登陆微信号 (局部_微信号) .计次循环首 (局部_登陆个数, i) 微信号编辑框.内容 = "当前PC登陆微信号:" + 局部_微信号 [i] .计次循环尾 () .子程序 取当前登陆微信号,

  • 深入解析JVM之内存结构及字符串常量池(推荐)

    前言 Java作为一种平台无关性的语言,其主要依靠于Java虚拟机--JVM,我们写好的代码会被编译成class文件,再由JVM进行加载.解析.执行,而JVM有统一的规范,所以我们不需要像C++那样需要程序员自己关注平台,大大方便了我们的开发.另外,能够运行在JVM上的并只有Java,只要能够编译生成合乎规范的class文件的语言都是可以跑在JVM上的.而作为一名Java开发,JVM是我们必须要学习了解的基础,也是通向高级及更高层次的必修课:但JVM的体系非常庞大,且术语非常多,所以初学者对此非

  • 易语言检测文件被哪个进程占用的代码

    检测文件占用的代码 此功能需要加载贝贝吧模块6.6 .版本 2 .支持库 eAPI .程序集 窗口程序集_启动窗口 .子程序 _查询按钮_被单击 .局部变量 进程名, 进程信息, , "0" .局部变量 进程id, 整数型, , "0" .局部变量 a, 整数型, , "0" .局部变量 i, 整数型 进程名 = 取系统进程列表 () 显示占用列表框.清空 () .计次循环首 (取数组成员数 (进程名), i) .如果真 (寻找文本 (到小写 (

  • LyScript寻找ROP漏洞指令片段的方法详解

    ROP绕过片段简单科普一下,你可以理解成一个可以关闭系统自身内存保护的一段机器指令,这段代码需要我们自己构造,这就涉及到在对端内存搜寻这样的指令,LyScript插件增强了指令片段的查找功能,但需要我们在LyScript插件基础上封装一些方法,实现起来也不难. LScript项目地址:https://github.com/lyshark/LyScript 封装机器码获取功能: 首先封装一个方法,当用户传入指定汇编指令的时候,自动的将其转换成对应的机器码,这是为搜索ROP片段做铺垫的,代码很简单,

  • C#非托管泄漏中HEAP_ENTRY的Size对不上解析

    目录 一:背景 1. 讲故事 二:如何正确推导 1. 原理是什么? 2. 通过汇编观察编解码逻辑 3. 寻找 edi 所属的堆块 总结 一:背景 1. 讲故事 前段时间有位朋友在分析他的非托管泄漏时,发现NT堆的_HEAP_ENTRY 的 Size 和 !heap 命令中的 Size 对不上,来咨询是怎么回事? 比如下面这段输出: 0:000> !heap 0000000000550000 -a Index Address Name Debugging options enabled 1: 00

  • sp官方出品用Seraph不被封号方法(图文教程)

    但是Seraph脚本用全图形版的就不一样(不推荐内存版,游戏内存被其他程序读取,会被检测到) 全图形版的比较安全,目前还没有收到有人封号的消息,如果你要用脚本极力推荐"图形版脚本" Seraph如查天龙要查封,就得使用底层扫描,下面我就谈谈用Seraph脚本挂机时,必须要做的几件事,安全度提到最高. 首先我们要用到两种软件:processguard 和HideToolz(网上很多,自己找找)第一步:安装好processguard后,点安全找到seraph在上面点右键,选择添加到保护.

随机推荐