替换一个exe文件中的固定内容

1034992601 · · 1923 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

目标: 将一个exe文件中的某个字符串内容改写成新的内容 ``` golang //要替换的源exe代码,要替换的字符为KEY中的内容 //key是15位 var KEY = "KEYKEYKEYKEYKEY" var OTHER = "other" func main() { fmt.Println(KEY) fmt.Println(OTHER) fmt.Println("end") } ``` ``` golang //动态修改key内容的程序 //大概意思是:读取出test1.exe,此文件是上面的代码生成的 //同时将相应的内容替换后保存到新文件中 test2.exe func main() { //这里是18位 replaceInfo := "valvalvalvalvalval" fileBytes, err := readFile("./test1.exe") if err != nil { fmt.Println(err) return } fmt.Printf("fileBytes len:%d\n", len(fileBytes)) offset := bytes.Index(fileBytes, []byte(KEY)) if offset == -1 { fmt.Println("not found the replace key") return } fmt.Printf("offset : %d\n", offset) fmt.Printf("replaceInfo len:%d\n", len(replaceInfo)) // for index := 0; index < len(replaceInfo); index++ { // fileBytes[offset+index] = replaceInfo[index] // fmt.Printf("index:%d\n", index) // } copy(fileBytes[offset:offset+len(replaceInfo)], []byte(replaceInfo)) file, err := os.OpenFile("./test2.exe", os.O_CREATE|os.O_TRUNC, 0775) if err != nil { fmt.Println(err) return } defer file.Close() _, err = file.Write(fileBytes) fmt.Println(err) } ``` ``` 疑惑: KEY和 replaceInfo 的长度一致时正常的,如果 replaceInfo 长度大于 KEY 长度时 KEY中只替换了15位,按常理应该会报错: 用18位的东西去放到里面会将原来的数据腹盖掉,奇怪的是生成的test2.exe正常的输出,只是输出的内容不对,少了3位 现在输出的是: valvalvalvalval, 期望:valvalvalvalvalval ``` ``` 哪位大侠知道这是怎么回事, 详细讲解一下呢,谢了 ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1923 次点击  ∙  3 赞  
加入收藏 微博
6 回复  |  直到 2023-01-29 09:26:59
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传