gobfuscate的混淆原理
近期,在看360net lab发布的一篇文章Blackrota, a heavily obfuscated backdoor written in Go时,看到了go语言的混淆手段,在文章中,攻击者使用开源的混淆工具gobfuscate对语言的源代码进行混淆,在对混淆之后的代码进行编译,以提高分析的难度。
根据gobfuscate的描述,gobufuscate会在源码级别混淆如下的数据:
- 包名
- 全局变量名
- 函数名
- 类型名
- 方法名
我们使用如下的代码来测试以下gobfuscate的混淆:
package main
import(
"fmt"
"io/ioutil"
"net/http"
)
var url = "https://www.baidu.com/";
func httpget() string {
client := &http.Client{}
req, _ := http.NewRequest("GET",url,nil)
req.Header.Set("Connection","Keep-Live")
res,err := client.Do(req)
if err != nil{
fmt.Println("do error\n")
return "NULL"
}
defer res.Body.Close()
body,err := ioutil.ReadAll(res.Body)
return string(body)
}
func main(){
var body = httpget()
fmt.Println(string(body))
}
首先gobfuscate生成的二进制文件符号是被抹除掉的:
使用go_parser对生成的二进制文件的符号进行解析,可以发现其源代码路径也被混淆了,但是源代码的文件名并没有被混淆。
函数名使用随机字符串混淆了。
对于每一个字符串,都会产生一个对用的解密函数,使用xor会字符串进行混淆。
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »