GolangNote

Golang笔记

是否可以直接替换golang编译的二进制文件的某些字符串

Permalink

突然有这个想法,简单粗暴的去替换 go 编译好的二进制文件里的某个字符串,顺便去验证一下。

过程

首先用 ioutil.ReadFile 打开二进制文件,然后用 bytes.Replace 来替换,再用 ioutil.WriteFile 去保存。

代码

Go: Replace
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"strings"
)

func main() {
	data, err := ioutil.ReadFile("golangnote")
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(strings.Index(string(data), "fastHTTP + sdb"))
	fmt.Println(bytes.Index(data, []byte("fastHTTP + sdb")))

	data = bytes.Replace(data, []byte("fastHTTP + sdb"), []byte("fastHTTP2 + sdb2"), -1)
	err = ioutil.WriteFile("golangnote2", data, 0777)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("done")
}

顺利替换,然而运行时出错:

Bash:
1
Segmentation fault: 11

结论

不能直接替换😄

疑问

感觉有点不对,试试改变替换的内容

Go: replace
1
data = bytes.Replace(data, []byte("fastHTTP + sdb"), []byte("fastHTTT + sdD"), -1)

这次替换后的程序可以运行了。关键是替换与被替换的内容是等长

一个中文换三个英文字母也可以

Go: replace
1
data = bytes.Replace(data, []byte("fastHTTP + sdb"), []byte("fastHTTT + 中"), -1)

本文网址: https://golangnote.com/topic/284.html 转摘请注明来源

Related articles

Golang 把cookie 字符串解析为cookie 结构

在做爬虫时有时候会遇到需要带已登录的 cookie 请求,这个时候最简单的方法是在浏览器登录后,在开发者面板找到cookie 字符串,然后拷贝粘贴。这就面临一个问题需要把cookie 字符串解析成Go 语言 cookie 结构体。...

Write a Comment to "是否可以直接替换golang编译的二进制文件的某些字符串"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.22.3 Processed in 0ms