濮阳杆衣贸易有限公司

主頁 > 知識庫 > Golang二進(jìn)制文件混淆保護(hù)操作

Golang二進(jìn)制文件混淆保護(hù)操作

熱門標(biāo)簽:利用地圖標(biāo)注位置 地圖區(qū)域圖標(biāo)注后導(dǎo)出 赤峰電銷 杭州人工智能電銷機(jī)器人費用 官渡電銷外呼管理系統(tǒng)怎么收費 谷歌美發(fā)店地圖標(biāo)注 江蘇呼叫中心外呼系統(tǒng)有效果嗎 400開頭電話怎樣申請 貴州電話智能外呼系統(tǒng)

Go實在是太棒了。一處編譯,處處運行,沒有依賴,毫無麻煩!

不過麻煩的事情來了。我們寫一個程序,就是想在別人的電腦上運行的。然而,Go語言的默認(rèn)機(jī)制,會泄漏我們的一些信息,雖然不多,但也有點尷尬。

本文結(jié)合網(wǎng)上的一些常用方法,總結(jié)出一套通用的簡單易行的保護(hù)措施。

減少 golang 二進(jìn)制文件大小

1、刪除調(diào)試符號

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

圖片來源StackOverflow

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

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

(需要Go版本大于1.7)

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

...

-s disable symbol table

-w disable DWARF generation

刪除掉調(diào)試符號的另一個好處就是,顯著減小了文件大?。ㄆ骄?0%)

-rwxr-xr-x 1 tim staff 1636736 May 5 11:59 bin/hello - 標(biāo)準(zhǔn)編譯

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

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

2、刪除trace文件信息

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

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

上圖中的函數(shù)編譯時,環(huán)境變量就是這樣。

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

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

話不多說,上代碼。放到自己的.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,其實這個字符串可以是任意值,但寫成一樣的話,可以讓逆向人員無法分辨,調(diào)用的庫是我們自己寫的還是go語言的標(biāo)準(zhǔn)庫。非常猥瑣哦~

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

3.使用 UPX 給程序加殼

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

upx --brute [ binary ]

UPX 副作用是會增加程序的啟動時間,但也無妨啦!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang中struct和[]byte的相互轉(zhuǎn)換示例
  • 減少 golang 二進(jìn)制文件大小操作
  • 淺談golang二進(jìn)制bit位的常用操作
  • Golang如何交叉編譯各個平臺的二進(jìn)制文件詳解
  • Golang如何實現(xiàn)任意進(jìn)制轉(zhuǎn)換的方法示例
  • golang 將[]byte轉(zhuǎn)成16進(jìn)制的實現(xiàn)

標(biāo)簽:松原 鷹潭 泰安 河池 保定 黔西 武漢 宜春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang二進(jìn)制文件混淆保護(hù)操作》,本文關(guān)鍵詞  Golang,二進(jìn)制,文件,混淆,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang二進(jìn)制文件混淆保護(hù)操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于Golang二進(jìn)制文件混淆保護(hù)操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    宣武区| 万源市| 康平县| 新泰市| 双牌县| 旺苍县| 牟定县| 通许县| 林甸县| 游戏| 仁寿县| 阳新县| 科尔| 襄城县| 陆川县| 都安| 浦东新区| 惠来县| 电白县| 金堂县| 沙坪坝区| 温宿县| 资阳市| 平安县| 左贡县| 宝坻区| 民乐县| 涞水县| 澄城县| 汝阳县| 台北市| 兴仁县| 托克托县| 鄯善县| 集安市| 岳普湖县| 岢岚县| 平潭县| 青州市| 新乡市| 田林县|