中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Golang語言怎么對二進制文件進行混淆保護

發布時間:2020-12-17 16:39:27 來源:億速云 閱讀:222 作者:Leah 欄目:開發技術

本篇文章為大家展示了使用Golang語言怎么對二進制文件進行混淆保護,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1、刪除調試符號

默認情況下go編譯出的程序在運行出錯時會輸出自己在哪個線程哪個文件哪個函數哪行出的錯,就像這樣,

使用Golang語言怎么對二進制文件進行混淆保護

圖片來源StackOverflow

DWARF信息對于小黑客們可是如獲至寶,這些關鍵信息不能留下。而且去掉這些東西也非常簡單:

go build -ldflags "-s -w” [<your/package]

(需要Go版本大于1.7)

這里的 -ldflags 參數最終會在 go tool link 的時候傳給它, go tool link -h解釋如下

...

-s disable symbol table

-w disable DWARF generation

刪除掉調試符號的另一個好處就是,顯著減小了文件大小(平均20%)

-rwxr-xr-x 1 tim staff 1636736 May 5 11:59 bin/hello <- 標準編譯

-rwxr-xr-x 1 tim staff 1190272 May 5 11:59 hello <- stripped

再加一個UPX殼,還可以壓縮到原文件大小的五分之一!不知道為啥,go語言的二進制特別好壓!

2、刪除trace文件信息

在go中觸發 panic 時,上圖的文件目錄也是泄漏信息的一部分。比如上圖就包括了小黑客用的操作系統(Linux),小黑客的名字(nikos),如果你用homebrew版本的Go還會泄漏你的編譯器版本。所以這些當然也要刪掉!

這些信息的來源是編譯器運行時所處環境的環境變量。

上圖中的函數編譯時,環境變量就是這樣。

GOROOT=/opt/goGOPATH=/home/nikos/projects/goGOROOT_FINAL=$GOROOT

這幾個都是可以改的哦。根據參考資料,編譯時GO會從$GOPATH尋找我們自己的代碼,從$GOROOT提取標準庫,在打包時將GOROOT改寫為GOROOT_FINAL并作為trace信息的一部分寫入目標文件。改寫$GOPATH的方式也很簡單,在一個不起眼的目錄里對真實的GOPATH創建一個軟鏈接(快捷方式),編譯器在尋找時就會把快捷方式的目錄名寫到最終文件里,從而達到我們隱藏自己的目的。

話不多說,上代碼。放到自己的.bash_profile或.zshrc中即可

ACTUAL_GOPATH="~/Programming/go"
export GOPATH='/tmp/go'
export GOROOT_FINAL=$GOPATH
 [ ! -d $GOPATH ] && ln -s "$ACTUAL_GOPATH" "$GOPATH"
 [[ ! $PATH =~ $GOPATH ]] && export PATH=$PATH:$GOPATH/bin

我個人把GOROOT_FINAL也寫入為GOPATH,其實這個字符串可以是任意值,但寫成一樣的話,可以讓逆向人員無法分辨,調用的庫是我們自己寫的還是go語言的標準庫。非常猥瑣哦~

這樣一來,生成的二進制文件就相當于其他語言編譯時的Release版本了。再發散一下,自己寫一個庫,將關鍵的字符串做成外部資源并在調用時解密,代碼中不保留明文,再破解就只能人肉跟蹤函數了。滿分!

3.使用 UPX 給程序加殼

UPX 不僅能大幅壓縮 Golang 靜態編譯的二進制程序,更能有效的增加反匯編的難度。具體命令為:

upx --brute [ binary ]

上述內容就是使用Golang語言怎么對二進制文件進行混淆保護,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漯河市| 山丹县| 余江县| 开远市| 灵川县| 诸城市| 三台县| 句容市| 泾阳县| 武冈市| 洛隆县| 靖安县| 靖远县| 吉水县| 乌恰县| 龙海市| 泽普县| 晋中市| 九寨沟县| 旬阳县| 隆尧县| 荥阳市| 长沙县| 商洛市| 正安县| 册亨县| 田东县| 开封市| 安徽省| 安图县| 大名县| 祁连县| 德昌县| 隆子县| 黎川县| 抚顺市| 耿马| 始兴县| 鸡东县| 防城港市| 交城县|