huiyadanli/RevokeMsgPatcher · error · BusinessException
match_part_replace
match_part_replace
Error message
特征比对:部分特征已经被替换,请确认是否有使用过其他防撤回/多开补丁!
What it means
matchNum >= expected but matchNum != changes.Count and changes.Count > 0: some matched positions already equal the replace bytes while others still need patching. FindChanges throws BusinessException('match_part_replace'), suggesting a third-party anti-recall / multi-open patcher altered part of the file.
Source
Thrown at RevokeMsgPatcher/Matcher/ModifyFinder.cs:79
$"出现此种情况的一般有如下可能:\n" +
$"1. 你可能已经安装了某个功能的补丁,请选择未安装功能进行安装。\n" +
$"2. 如果当前版本为最新版本,特征码可能出现变化(可能性比较低),请联系作者处理。");
}
}
}
else
{
// 匹配数和需要替换的数量不一致时,可能时部分/所有特征已经被替换
if (matchNum != changes.Count)
{
// 此逻辑在当前特征配置下不会进入,因为查找串和替换串当前全部都是不相同的
if (changes.Count == 0)
{
throw new BusinessException("match_already_replace", "特征比对:当前应用已经安装了所选功能补丁!");
}
else
{
throw new BusinessException("match_part_replace", "特征比对:部分特征已经被替换,请确认是否有使用过其他防撤回/多开补丁!");
}
}
else
{
// 匹配数和需要替换的数量一致时才是正常状态
return changes;
}
}
}
public static SortedSet<string> FindReplacedFunction(string path, List<ReplacePattern> replacePatterns)
{
Stopwatch sw = new Stopwatch();
sw.Start();
byte[] fileByteArray = File.ReadAllBytes(path);
Console.WriteLine("读取文件耗时:{0}ms.", sw.Elapsed.TotalMilliseconds);
Tuple<bool, SortedSet<string>> res = IsAllReplaced(fileByteArray, replacePatterns);View on GitHub (pinned to 89cbbb3f0c)
Solutions
- Restore the original DLL from a clean source (the tool's restore, or a fresh DLL).
- Remove other patchers' modifications before using this tool.
Defensive patterns
Strategy: try-catch
Type guard
static bool IsBusinessException(Exception e, string code) => e is BusinessException b && b.ErrorCode == code; static bool IsPartReplaced(Exception e) => IsBusinessException(e, "match_part_replace");
Try / catch
try
{
editor.TargetChanges = ModifyFinder.FindChanges(editor.FilePath, replacePatterns);
}
catch (BusinessException ex) when (ex.ErrorCode == "match_part_replace")
{
// Partly patched by another tool: require a clean restore first.
MessageBox.Show("检测到部分特征已被替换,请先还原原始文件。");
} Prevention
- Do not mix this patcher with other anti-recall/multi-open tools.
- Restore a clean DLL before patching when 'match_part_replace' is seen.
- Filter by ErrorCode 'match_part_replace' to distinguish from a clean already-patched file.
When it happens
Trigger: A prior different patcher (or an older version of this tool) replaced some but not all signature locations, leaving the file in a half-patched state.
Common situations: Used another WeChat/QQ multi-open or anti-recall tool before this one; mixed usage of patchers.
Related errors
AI-assisted analysis of huiyadanli/RevokeMsgPatcher@89cbbb3f0c (2026-08-13).
Data as JSON: /api/errors/38df39d0255f5ef0.
Report an issue: GitHub.