最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年12月17日 10:49:36   作者:niconicoSnap  
這篇文章主要介紹了Golang二進(jìn)制文件混淆保護(hù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

Go實(shí)在是太棒了。一處編譯,處處運(yùn)行,沒有依賴,毫無(wú)麻煩!

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

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

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

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

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

圖片來(lái)源StackOverflow

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

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

(需要Go版本大于1.7)

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

...

-s disable symbol table

-w disable DWARF generation

刪除掉調(diào)試符號(hào)的另一個(gè)好處就是,顯著減小了文件大?。ㄆ骄?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

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

2、刪除trace文件信息

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

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

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

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

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

話不多說(shuō),上代碼。放到自己的.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

我個(gè)人把GOROOT_FINAL也寫入為GOPATH,其實(shí)這個(gè)字符串可以是任意值,但寫成一樣的話,可以讓逆向人員無(wú)法分辨,調(diào)用的庫(kù)是我們自己寫的還是go語(yǔ)言的標(biāo)準(zhǔn)庫(kù)。非常猥瑣哦~

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

3.使用 UPX 給程序加殼

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

upx --brute [ binary ]

UPX 副作用是會(huì)增加程序的啟動(dòng)時(shí)間,但也無(wú)妨啦!

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

相關(guān)文章

  • golang MarshalJson的實(shí)現(xiàn)

    golang MarshalJson的實(shí)現(xiàn)

    本文主要介紹了golang MarshalJson的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • GoLang的sync.WaitGroup與sync.Once簡(jiǎn)單使用講解

    GoLang的sync.WaitGroup與sync.Once簡(jiǎn)單使用講解

    sync.WaitGroup類型,它比通道更加適合實(shí)現(xiàn)這種一對(duì)多的goroutine協(xié)作流程。WaitGroup是開箱即用的,也是并發(fā)安全的。同時(shí),與之前提到的同步工具一樣,它一旦被真正的使用就不能被復(fù)制了
    2023-01-01
  • 一文詳解Go語(yǔ)言切片是如何擴(kuò)容的

    一文詳解Go語(yǔ)言切片是如何擴(kuò)容的

    切片是一個(gè)擁有相同類型元素的可變長(zhǎng)度的序列,它是基于數(shù)組類型做的一層封裝。它非常靈活,支持自動(dòng)擴(kuò)容。所以本文就來(lái)看看Go語(yǔ)言切片是如何擴(kuò)容的吧
    2023-04-04
  • Golang學(xué)習(xí)筆記(一):簡(jiǎn)介

    Golang學(xué)習(xí)筆記(一):簡(jiǎn)介

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(一):簡(jiǎn)介,本文講解了Go語(yǔ)言最主要的特性、安裝、環(huán)境變量設(shè)置、整體目錄結(jié)構(gòu)、Helloworld、go命令、調(diào)試、編輯器設(shè)置等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • PHP結(jié)構(gòu)型模式之組合模式

    PHP結(jié)構(gòu)型模式之組合模式

    這篇文章主要介紹了PHP組合模式Composite Pattern優(yōu)點(diǎn)與實(shí)現(xiàn),組合模式是一種結(jié)構(gòu)型模式,它允許你將對(duì)象組合成樹形結(jié)構(gòu)來(lái)表示“部分-整體”的層次關(guān)系。組合能讓客戶端以一致的方式處理個(gè)別對(duì)象和對(duì)象組合
    2023-04-04
  • Golang中日志使用詳解

    Golang中日志使用詳解

    這篇文章記錄了Golang項(xiàng)目中日志使用,以及結(jié)合Gin框架記錄請(qǐng)求日志,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 一文帶你了解如何正確理解和使用Golang中nil

    一文帶你了解如何正確理解和使用Golang中nil

    在?Golang?中,nil?是一個(gè)預(yù)定義的標(biāo)識(shí)符,在不同的上下文環(huán)境中有不同的含義,但通常表示“無(wú)”、“空”或“零值”,本文主要來(lái)帶大家了解下nil的正確使用,需要的可以參考下
    2023-12-12
  • golang簡(jiǎn)易實(shí)現(xiàn)?k8s?的yaml上傳并應(yīng)用示例方案

    golang簡(jiǎn)易實(shí)現(xiàn)?k8s?的yaml上傳并應(yīng)用示例方案

    這篇文章主要為大家介紹了golang簡(jiǎn)易實(shí)現(xiàn)?k8s?的yaml上傳并應(yīng)用示例方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • go 語(yǔ)言字符類型 byte 與 rune案例詳解

    go 語(yǔ)言字符類型 byte 與 rune案例詳解

    這篇文章主要介紹了go 語(yǔ)言字符類型 byte 與 rune案例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • golang如何操作csv文件詳解

    golang如何操作csv文件詳解

    這篇文章主要給大家介紹了關(guān)于golang如何操作csv文件的相關(guān)資料,以及使用Golang導(dǎo)出CSV數(shù)據(jù)并解決數(shù)據(jù)亂碼問(wèn)題的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02

最新評(píng)論

壶关县| 砀山县| 东明县| 米易县| 青河县| 涡阳县| 咸丰县| 茂名市| 永昌县| 安龙县| 交城县| 西平县| 盐亭县| 五华县| 昌邑市| 伊金霍洛旗| 吉林省| 油尖旺区| 阿巴嘎旗| 张家界市| 南溪县| 襄城县| 启东市| 巫山县| 信阳市| 静海县| 城口县| 长葛市| 城市| 平果县| 阿拉善盟| 盐山县| 龙南县| 门头沟区| 涟源市| 秦皇岛市| 阿合奇县| 沁阳市| 锡林浩特市| 衢州市| 南皮县|