本章前面的教程教会了大家使用CE这个内存工具来搜索查找内存,但有些时候我们需要自已软件里也要有搜索内存的功能时该怎么办呢?
在万挂作坊模块中有提供了一组搜索内存的功能,本节是以万挂作坊3.X驱动版里的功能做简单介绍.
子程序名:内存_内存搜索 返回值类型:整数型 参数<1>的名称为“进程句柄”,类型为“整数型”。注明:要进行内存数据查找的进程句柄。 参数<2>的名称为“起始地址”,类型为“整数型”。注明:小于 65536 时默认为65536 推荐使用00400000 至 7FFFFFFF。 参数<3>的名称为“终止地址”,类型为“整数型”。注明:小于起始地址或大于 80000000 时默认为 7F000000。 参数<4>的名称为“搜字节集”,类型为“字节集”。注明:要进行查找的内存数据,其它数据可以使用 到字节集() 转过来。 参数<5>的名称为“只读内存”,类型为“逻辑型”。注明:真=查找包含只读属性的内存,假=查找一切有效的内存(不包括只读属性的内存)。 参数<6>的名称为“保存指针”,类型为“整数型”,接收参数数据时采用参考传递方式,需要接收数组数据。注明:返回批配的指针数组。 参数<7>的名称为“回调接口”,类型为“子程序指针”,允许接收空参数数据。 参数<8>的名称为“回调参数”,类型为“整数型”,允许接收空参数数据。
注明:〈逻辑型〉 回调接口 (整数型 进程句柄,整数型 内存地址,整数型 内存属性,整数型 回调参数) 返回 真=继续搜索,假=终止搜索。
内存_模块内存搜索 () 可以查找指定DLL模块PE文件中的指令代码数据.
内存_指针组内存搜索 () 提供原组指针与字节集数据进行再次搜索批配检查功能
本节要做的就是通过万挂作坊模块中的几个功能设计一个功能比较全面的内存搜索软件

程序界面
这个程序将实现在指定进程中各种基本数据类型值内存查找功能,支持只读内存,查找时暂停目标进程等.

先枚举进程与枚举出DLL模块到两个组合框里.

根据数据类型组合框中的选择,把要搜的编辑框里的内容,转为字节集数据,即可供搜索内存使用

首次搜索内存,支持搜索时暂停进程
但要注意,若在自身进程中搜索不可以暂停哦,如果要搜索DLL模块文件中的数据,要采用搜只读内存的功能,因为PE文件中的指令与资源数据等是以只读方式加载在内存里的.

内存_指针组内存搜索 即 二次搜索,用来确认过滤内存地址用的.
点击下载本节源代码
提供一组内存指针与要验证的字节集数据,如果该指针所指向的内存处的数据与提供的字节集数据相等,则把该指针放进批配指针数组中,不等即发生了变化则放入不配指针数组中去.
内存搜索功能的用处可是很大的,简单的来说可以用来搜游戏中的特征指令代码等,进行CALL地址定位,因为游戏的每次更新都会导致CALL地址发生变化等,如果游戏中该CALL函数没有变化,则搜其函数入口特征指令数据,可以达到定位该CALL函数地址,从而无视游戏的更新.
为了能提高搜内存的速度,用户在实际使用中,应该缩小内存范围.另外若不是很必要的话,记得不要开始只读内存搜索(搜EXE,DLL模块内例外),如果不影响结果,也不要随便的去暂停进程.虽然暂停进程后可以避免在搜索时游戏中的数据发生变化.
在搜索内存功能里有一个参数允许提供用户的回调接口子程序指针,如果不提供回调的话,则一次性搜完指定的内存段后返回所有指针,若指供回调接口时,每搜到一个指针就会回调一次到用户的子程序中,此时用户可以决定后期的运行
|