Go實(shí)在是太棒了。一處編譯,處處運(yùn)行,沒有依賴,毫無麻煩!
不過麻煩的事情來了。我們寫一個(gè)程序,就是想在別人的電腦上運(yùn)行的。然而,Go語言的默認(rèn)機(jī)制,會(huì)泄漏我們的一些信息,雖然不多,但也有點(diǎn)尷尬。本文結(jié)合網(wǎng)上的一些常用方法,總結(jié)出一套通用的簡單易行的保護(hù)措施。
刪除調(diào)試符號
默認(rèn)情況下go編譯出的程序在運(yùn)行出錯(cuò)時(shí)會(huì)輸出自己在哪個(gè)線程哪個(gè)文件哪個(gè)函數(shù)哪行出的錯(cuò),就像這樣,
DWARF信息對于小黑客們可是如獲至寶,這些關(guān)鍵信息不能留下。而且去掉這些東西也非常簡單:
gobuild-ldflags"-s-w”[
(需要Go版本大于1.7)
這里的 -ldflags 參數(shù)最終會(huì)在 go tool link 的時(shí)候傳給它, go tool link -h解釋如下
... -sdisablesymboltable -wdisableDWARFgeneration
刪除掉調(diào)試符號的另一個(gè)好處就是,顯著減小了文件大小(平均20%)
-rwxr-xr-x1timstaff1636736May511:59bin/hello<-?標(biāo)準(zhǔn)編譯 -rwxr-xr-x?1?tim?staff?1190272?May?5?11:59?hello??????<-?stripped
再加一個(gè)UPX殼,還可以壓縮到原文件大小的五分之一!不知道為啥,go語言的二進(jìn)制特別好壓!
刪除trace文件信息
在go中觸發(fā) panic 時(shí),上圖的文件目錄也是泄漏信息的一部分。比如上圖就包括了小黑客用的操作系統(tǒng)(Linux),小黑客的名字(nikos),如果你用homebrew版本的Go還會(huì)泄漏你的編譯器版本。所以這些當(dāng)然也要?jiǎng)h掉!
這些信息的來源是編譯器運(yùn)行時(shí)所處環(huán)境的環(huán)境變量。
上圖中的函數(shù)編譯時(shí),環(huán)境變量就是這樣。
GOROOT=/opt/go GOPATH=/home/nikos/projects/go GOROOT_FINAL=$GOROOT
這幾個(gè)都是可以改的哦。根據(jù)參考資料,編譯時(shí)GO會(huì)從GOROOT提取標(biāo)準(zhǔn)庫,在打包時(shí)將GOROOT改寫為GOROOT_FINAL并作為trace信息的一部分寫入目標(biāo)文件。改寫$GOPATH的方式也很簡單,在一個(gè)不起眼的目錄里對真實(shí)的GOPATH創(chuàng)建一個(gè)軟鏈接(快捷方式),編譯器在尋找時(shí)就會(huì)把快捷方式的目錄名寫到最終文件里,從而達(dá)到我們隱藏自己的目的。
話不多說,上代碼。放到自己的.bash_profile或.zshrc中即可
ACTUAL_GOPATH="~/Programming/go" exportGOPATH='/tmp/go' exportGOROOT_FINAL=$GOPATH [!-d$GOPATH]&&ln-s"$ACTUAL_GOPATH""$GOPATH" [[!$PATH=~$GOPATH]]&&exportPATH=$PATH:$GOPATH/bin
我個(gè)人把GOROOT_FINAL也寫入為GOPATH,其實(shí)這個(gè)字符串可以是任意值,但寫成一樣的話,可以讓逆向人員無法分辨,調(diào)用的庫是我們自己寫的還是go語言的標(biāo)準(zhǔn)庫。非常猥瑣哦~
這樣一來,生成的二進(jìn)制文件就相當(dāng)于其他語言編譯時(shí)的Release版本了。再發(fā)散一下,自己寫一個(gè)庫,將關(guān)鍵的字符串做成外部資源并在調(diào)用時(shí)解密,代碼中不保留明文,再破解就只能人肉跟蹤函數(shù)了。滿分!
原文標(biāo)題:Golang二進(jìn)制文件混淆保護(hù)
文章出處:【微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
審核編輯:彭菁
-
程序
+關(guān)注
關(guān)注
117文章
3795瀏覽量
81406 -
代碼
+關(guān)注
關(guān)注
30文章
4825瀏覽量
69044 -
編譯
+關(guān)注
關(guān)注
0文章
661瀏覽量
33040
原文標(biāo)題:Golang二進(jìn)制文件混淆保護(hù)
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論