我正在制作一个程序,用于修补upk文件,将“4f 4c 44 6f 6f 72”替换为“4f 4c 52 6f 6f 72”,大约186个文件(“4f 4c 44 6f 6f 72”有多个出现每个文件)。
我已经看过很多关于如何做到这一点的指南,但它们都需要偏移原始字节的位置,这意味着每个文件需要大约28个偏移,这将花费太长时间......
最好的方法是什么?
答案 0 :(得分:1)
如果每个文件足够小以适合RAM,您可以尝试阅读整个文件,修改它并写回:
private static IEnumerable<int> Offsets(byte[] data, byte[] toFind) {
for (int i = 0; i <= data.Length - toFind.Length; ++i) {
bool matched = true;
for (int j = 0; j < toFind.Length; ++j)
if (data[i + j] != toFind[j]) {
matched = false;
break;
}
if (matched)
yield return i;
}
}
private static void ModifyFile(String path) {
byte[] toFind = new byte[] {0x4f, 0x4c, 0x44, 0x6f, 0x6f, 0x72 };
byte[] data = File.ReadAllBytes(path);
foreach(var offset in Offsets(data, toFind))
data[offset + 2] = 0x52; // we want just one byte to update
File.WriteAllBytes(path, data);
}