目标: 将一个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
```
```
哪位大侠知道这是怎么回事, 详细讲解一下呢,谢了
```
![image.png](https://static.golangjob.cn/230129/62b35da7dc4194086ee9d3546444b3a4.png)
![image.png](https://static.golangjob.cn/230129/5494ec36a0af5a46c02d7e84cbb5776a.png)
15位的字符串,替换成18位的,但仅有前面15位是可以用的,因为在取变量的时候,仅取这15位,程序是按地址取的,后面3位过界了
#6
更多评论