我有一个exe文件,当你在文本模式下打开时有这个数据
SUBID:$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
在数字签名之前的某个地方。
我希望将这些$
替换为subID
之类的字符串值SUBID:1234567890ABCDEFGHIJKLM
,而不会破坏文件的数字签名。 (手动执行此替换不会破坏数字签名)。
我现在正在做的是:
FileContents
中读取exe文件的内容。SUBID
,FileContents
的索引
Filecontents
从0 indexOf ("SUBID")
子行化为新copyStr
"SUBID:"+subID
copyStr
FileContents
的剩余内容
最后将字符串转换回字节格式并生成exe 如下:
String fileContent = readFile("MySetup.exe", Charset.defaultCharset());
int index_subid = fileContent.indexOf("SUBID");
String copyStr =fileContent.substring(0, index_subid);
copyStr += "SUBID:" + subID;
copyStr += fileContent.substring(index_subid + "SUBID:".length()+ subID.length());
InputStream is = new ByteArrayInputStream(copyStr.getBytes());
//函数readFile()
public static String readFile(String path, Charset encoding)
throws IOException
{
byte[] encoded = Files.readAllBytes(Paths.get(path));
return encoding.decode(ByteBuffer.wrap(encoded)).toString();
}
但问题是虽然数据的替换正确发生,但我的生成的exe被破坏了,可能是因为从字节到文本的转换。
那么有没有其他方法可以在exe?{/ p>中的SUBID
标记之后替换数据