|
|
|
|
@ -5,7 +5,9 @@ import com.xcs.wx.domain.vo.WeChatConfigVO;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 微信服务
|
|
|
|
|
* 微信服务接口,定义了一系列与微信相关的操作方法规范,旨在为外部调用者提供统一的接口来获取微信相关的各类信息、
|
|
|
|
|
* 进行微信进程相关操作以及读取微信进程内存中的数据等,不同的实现类可以根据具体的业务逻辑和底层实现技术来实现这些方法,
|
|
|
|
|
* 以此实现微信服务功能与其他业务模块的解耦,方便代码的维护、扩展以及在不同场景下的复用。
|
|
|
|
|
*
|
|
|
|
|
* @author xcs
|
|
|
|
|
* @date 2023年12月25日09:37:30
|
|
|
|
|
@ -13,58 +15,87 @@ import java.util.List;
|
|
|
|
|
public interface WeChatService {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取微信配置信息
|
|
|
|
|
* 获取微信配置信息的方法。
|
|
|
|
|
* 该方法用于获取微信应用相关的配置信息,返回一个包含 `WeChatConfigVO` 类型对象的列表,
|
|
|
|
|
* 每个 `WeChatConfigVO` 对象应该封装了微信配置的具体内容(例如微信的网络配置、消息提醒配置、界面显示配置等相关属性,具体取决于 `WeChatConfigVO` 类的定义),
|
|
|
|
|
* 调用方可以利用这些配置信息进行展示、根据配置进行相应的业务逻辑调整或者与其他模块协同工作等操作。
|
|
|
|
|
*
|
|
|
|
|
* @return WeChatDTO
|
|
|
|
|
* @return List<WeChatConfigVO> 返回一个列表,列表中的元素为 `WeChatConfigVO` 类型的对象,代表了获取到的微信各项配置信息,
|
|
|
|
|
* 如果没有获取到任何配置信息(比如配置文件不存在、读取权限不足等情况),则返回一个空列表,调用方需要根据返回结果进行相应的判断和后续处理。
|
|
|
|
|
*/
|
|
|
|
|
List<WeChatConfigVO> readWeChatConfig();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取当前运行的微信进程的进程 ID。
|
|
|
|
|
*
|
|
|
|
|
* @return 微信进程的进程 ID。如果未找到,返回空集合。
|
|
|
|
|
* 获取当前运行的微信进程的进程 ID的方法。
|
|
|
|
|
* 其功能是查找并返回当前正在运行的微信进程的唯一标识符(进程 ID),返回的是一个包含整数的列表,
|
|
|
|
|
|
|
|
|
|
* @return 微信进程的进程 ID。如果未找到,返回空集合,以 `List<Integer>` 形式返回,列表中的元素为微信进程的进程 ID,
|
|
|
|
|
* 若出现获取进程 ID 失败等异常情况(比如系统权限不足导致无法枚举进程等),实现类需要按照相应的异常处理机制进行处理,
|
|
|
|
|
* 调用方根据返回的列表情况进行后续使用(如遍历列表获取每个进程 ID 去做进一步操作等)。
|
|
|
|
|
*/
|
|
|
|
|
List<Integer> wechatPid();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据提供的进程 ID 找到相应进程的模块基地址。
|
|
|
|
|
* 根据提供的进程 ID 找到相应进程的模块基地址的方法。
|
|
|
|
|
* 此方法依据传入的微信进程的唯一标识符(进程 ID),在系统中查找该进程对应的模块(例如微信相关的动态链接库等模块)在内存中的基地址,
|
|
|
|
|
* 基地址是模块在进程内存空间中的起始位置,后续可以基于这个基地址结合偏移量等信息去准确访问模块内存储的各种微信相关数据(如账号信息、聊天记录等在内存中的具体位置),
|
|
|
|
|
* 如果找不到对应的模块基地址(比如进程不存在、模块加载异常等情况),则返回0,调用方可以根据返回值判断是否成功获取基地址,并进行后续相应的操作。
|
|
|
|
|
*
|
|
|
|
|
* @param pid 目标进程的 ID。
|
|
|
|
|
* @return 进程的模块基地址,如果找不到则返回 0。
|
|
|
|
|
* @param pid 目标进程的 ID,以整数形式传入,用于唯一标识要查找模块基地址的微信进程,实现类根据这个传入的进程 ID 在系统中定位到对应的进程及其相关模块信息,
|
|
|
|
|
* 若传入的 `pid` 不符合要求(比如不存在对应的进程等情况),则实现类需要进行相应的错误处理,例如抛出异常提示调用方传入的参数有误等情况。
|
|
|
|
|
* @return 进程的模块基地址,如果找不到则返回 0,返回的长整型数值代表了微信相关模块在进程内存空间中的起始地址,
|
|
|
|
|
* 供调用方后续结合其他信息(如偏移量等)进一步操作使用,若出现查找基地址失败等异常情况,按照上述说明返回相应的值并由实现类进行异常处理。
|
|
|
|
|
*/
|
|
|
|
|
long baseAddress(int pid);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取指定进程ID的可执行文件版本。
|
|
|
|
|
*
|
|
|
|
|
* @param pid 进程ID。
|
|
|
|
|
* @return 文件的版本号,如果无法获取,则返回 null。
|
|
|
|
|
* 获取指定进程ID的可执行文件版本的方法。
|
|
|
|
|
* 用于获取指定微信进程对应的可执行文件(比如微信客户端的主执行文件)的版本号信息,返回的字符串即为版本号内容(例如 "8.0.1" 这样的格式,具体格式取决于微信版本号的定义方式),
|
|
|
|
|
* @param pid 进程ID,以整数形式传入,用于唯一标识要获取可执行文件版本的微信进程,实现类根据这个传入的进程 ID 定位到对应的微信可执行文件并尝试读取其版本号,
|
|
|
|
|
* 若传入的 `pid` 不符合要求(比如不存在对应的进程等情况),则实现类需要进行相应的错误处理,例如抛出异常提示调用方传入的参数有误等情况。
|
|
|
|
|
* @return 文件的版本号,如果无法获取,则返回 null,以字符串形式返回版本号信息,若出现获取版本号失败等异常情况,按照上述说明返回相应的值并由实现类进行异常处理,
|
|
|
|
|
* 调用方根据返回的字符串(正常情况下为有效的版本号内容,若为 `null` 则表示获取失败)进行后续使用(如版本比较等操作)。
|
|
|
|
|
*/
|
|
|
|
|
String getVersion(int pid);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据进程ID获取微信ID。
|
|
|
|
|
* 根据进程ID获取微信ID的方法。
|
|
|
|
|
* 通过传入的微信进程的唯一标识符(进程 ID),获取对应的微信账号在系统中的唯一标识(微信ID),返回的字符串即为该微信账号的标识内容,
|
|
|
|
|
* 这个微信ID可以用于区分不同的微信账号,在涉及多账号相关的业务场景(如账号切换、消息推送定向到特定账号等操作)中发挥作用,
|
|
|
|
|
* 调用方根据返回的微信ID进行后续与特定微信账号相关的业务操作。
|
|
|
|
|
*
|
|
|
|
|
* @param pid 目标进程ID
|
|
|
|
|
* @return 微信ID
|
|
|
|
|
* @param pid 目标进程ID,以整数形式传入,用于唯一标识要获取微信ID的微信进程,实现类根据这个传入的进程 ID 查找并确定对应的微信账号的标识信息,
|
|
|
|
|
* 若传入的 `pid` 不符合要求(比如不存在对应的进程等情况),则实现类需要进行相应的错误处理,例如抛出异常提示调用方传入的参数有误等情况。
|
|
|
|
|
* @return 微信ID,以字符串形式返回,代表对应微信进程的微信账号的唯一标识,若出现获取微信ID失败等异常情况,实现类需要按照相应的异常处理机制进行处理,
|
|
|
|
|
* 调用方根据返回的字符串(正常情况下为有效的微信ID内容)进行后续使用(如账号关联操作等)。
|
|
|
|
|
*/
|
|
|
|
|
String getWxId(int pid);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 从指定进程的指定内存地址读取信息。
|
|
|
|
|
* 从指定进程的指定内存地址读取信息的方法。
|
|
|
|
|
* 该方法尝试从给定的微信进程(通过进程 ID 标识)的特定内存地址中读取数据,返回的字符串即为从该内存地址读取到的信息内容(例如可能是微信聊天记录中的一条消息、用户昵称等信息),
|
|
|
|
|
* 如果读取操作失败(比如内存访问权限不足、指定内存地址无效等情况),则返回 `null`,调用方根据返回值判断是否成功读取信息并进行后续相应的处理(如展示读取到的内容或者处理读取失败的情况等)。
|
|
|
|
|
*
|
|
|
|
|
* @param pid 目标进程的 ID。
|
|
|
|
|
* @param address 要读取的内存地址。
|
|
|
|
|
* @return 读取到的数据,如果失败则返回 null。
|
|
|
|
|
* @param pid 目标进程的 ID,以整数形式传入,用于唯一标识要从中读取内存信息的微信进程,实现类根据这个传入的进程 ID 在系统中定位到对应的进程,并基于此进行内存读取操作,
|
|
|
|
|
* 若传入的 `pid` 不符合要求(比如不存在对应的进程等情况),则实现类需要进行相应的错误处理,例如抛出异常提示调用方传入的参数有误等情况。
|
|
|
|
|
* @param address 要读取的内存地址,以长整型形式传入,代表在目标进程内存空间中要读取数据的具体位置,实现类根据这个传入的地址在对应的微信进程内存中进行读取操作,
|
|
|
|
|
* 若传入的 `address` 不符合要求(比如地址超出进程内存范围等情况),则实现类需要进行相应的错误处理,例如抛出异常提示调用方传入的参数有误等情况。
|
|
|
|
|
* @return 读取到的数据,如果失败则返回 null,以字符串形式返回从指定内存地址读取到的信息内容,若出现读取信息失败等异常情况,按照上述说明返回相应的值并由实现类进行异常处理,
|
|
|
|
|
* 调用方根据返回的字符串(正常情况下为有效的信息内容,若为 `null` 则表示读取失败)进行后续使用(如展示读取到的内容等操作)。
|
|
|
|
|
*/
|
|
|
|
|
String getInfo(int pid, long address);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取指定进程和数据库路径下的密钥
|
|
|
|
|
* 获取指定进程和数据库路径下的密钥的方法。
|
|
|
|
|
* 其目的是在给定的微信进程(通过进程 ID 标识)以及对应的数据库路径下,查找并获取特定的密钥信息,返回的字符串即为找到的密钥内容,
|
|
|
|
|
* 这个密钥可能用于后续对微信数据库(例如聊天记录数据库、用户配置数据库等)进行解密、访问控制等相关操作,
|
|
|
|
|
* 如果未找到符合要求的密钥(比如数据库不存在、密钥匹配失败等情况),则返回 `null`,调用方根据返回值判断是否获取到密钥并进行后续相应的处理(如使用密钥进行解密操作或者处理获取失败的情况等)。
|
|
|
|
|
*
|
|
|
|
|
* @param pid 目标进程的进程ID
|
|
|
|
|
* @param dbPath 数据库路径
|
|
|
|
|
* @return 返回找到的密钥,如果未找到则返回null
|
|
|
|
|
* @param pid 目标进程的进程ID,以整数形式传入,用于唯一标识要获取密钥的微信进程,实现类根据这个传入的进程 ID 定位到对应的进程,并结合传入的数据库路径进行密钥查找操作,
|
|
|
|
|
* @param dbPath 数据库路径,以字符串形式传入,指定了期望获取密钥所对应的数据库所在的文件路径,实现类根据这个路径找到对应的数据库并在相关的进程内存等范围内查找密钥,
|
|
|
|
|
* 若传入的 `dbPath` 不符合要求(比如路径不存在、格式错误等情况),则实现类需要进行相应的错误处理,例如抛出异常提示调用方传入的参数有误等情况。
|
|
|
|
|
* @return 返回找到的密钥,如果未找到则返回null,以字符串形式返回找到的密钥内容,若出现获取密钥失败等异常情况,按照上述说明返回相应的值并由实现类进行异常处理,
|
|
|
|
|
* 调用方根据返回的字符串(正常情况下为有效的密钥内容,若为 `null` 则表示获取失败)进行后续使用(如使用密钥解密数据库等操作)。
|
|
|
|
|
*/
|
|
|
|
|
String getKey(int pid, String dbPath);
|
|
|
|
|
}
|
|
|
|
|
}
|