用Java替换exe文件中的数据

时间:2013-09-13 10:12:31

标签: java

我有一个exe文件,当你在文本模式下打开时有这个数据 SUBID:$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$在数字签名之前的某个地方。

我希望将这些$替换为subID之类的字符串值SUBID:1234567890ABCDEFGHIJKLM,而不会破坏文件的数字签名。 (手动执行此替换不会破坏数字签名)

我现在正在做的是:

  1. 在字符串变量FileContents中读取exe文件的内容。
  2. SUBID
  3. 中获取FileContents的索引
  4. Filecontents从0 indexOf ("SUBID")子行化为新copyStr
  5. "SUBID:"+subID
  6. 中附加copyStr
  7. 然后在copyStr
  8. 中附加FileContents的剩余内容
  9. 最后将字符串转换回字节格式并生成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();
    }
    
  10. 但问题是虽然数据的替换正确发生,但我的生成的exe被破坏了,可能是因为从字节到文本的转换。

    那么有没有其他方法可以在exe?{/ p>中的SUBID标记之后替换数据

0 个答案:

没有答案