在Java中的标记处替换exe文件中的数据
我有一个exe文件,当你在文本模式下打开时,它有这个数据在Java中的标记处替换exe文件中的数据,java,Java,我有一个exe文件,当你在文本模式下打开时,它有这个数据 SUBID:$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$数字签名之前的某个位置 我想用一些字符串值替换这些$,比如subID:1234567890ABCDEFGHIJKLM,而不破坏文件的数字签名。(手动执行此替换不会破坏数字签名) 我现在做的是: 在字符串变量FileContents中读取exe文件的内容 获取FileContents中SUBID的索引 将Filecontents从0到ind
SUBID:$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
数字签名之前的某个位置
我想用一些字符串值替换这些$
,比如subID:1234567890ABCDEFGHIJKLM
,而不破坏文件的数字签名。(手动执行此替换不会破坏数字签名)
我现在做的是:
FileContents
中读取exe文件的内容FileContents
中SUBID
的索引Filecontents
从0到indexOf(“SUBID”)
的子串添加到一个新字符串copyStr
copyStr
FileContents
的剩余内容追加到copyStr中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()
那么,有没有其他方法可以替换exe中
SUBID
标记后的数据?我不会在文本模式下编辑二进制文件。然后您会怎么做?使用类lile打开二进制文件。最可能的原因是字符串。不要使用字符串进行搜索/替换。将文件读入字节数组,然后遍历该数组以替换字符串。
public static String readFile(String path, Charset encoding)
throws IOException
{
byte[] encoded = Files.readAllBytes(Paths.get(path));
return encoding.decode(ByteBuffer.wrap(encoded)).toString();
}