吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Go語言的默認(rèn)機(jī)制

Linux愛好者 ? 來源:Linux愛好者 ? 作者:Linux愛好者 ? 2022-03-21 11:50 ? 次閱讀

本文介紹了作者避免開發(fā)者信息泄露的思路。

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ò),就像這樣,

af7bfa50-9880-11ec-952b-dac502259ad0.png

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)載請注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 程序
    +關(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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Go語言簡介和安裝方法

    Go 又稱 Golang ,是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語言Go 語言語法與
    發(fā)表于 07-19 16:33 ?586次閱讀

    Go語言常量的聲明

    Go 語言中, 常量 表示的是固定的值,常量表達(dá)式的值在編譯期進(jìn)行計(jì)算,常量的值不可以修改。例如:3 、 Let's go 、 3.14 等等。常量中的數(shù)據(jù)類型只可以是 布爾型 、 數(shù)字型 (整數(shù)型、浮點(diǎn)型和復(fù)數(shù))
    發(fā)表于 07-20 15:24 ?438次閱讀

    Go語言中的整數(shù)類型

    Go 語言中,整型可以細(xì)分成兩個(gè)種類十個(gè)類型。
    發(fā)表于 07-20 15:25 ?965次閱讀

    Go語言開發(fā)有什么優(yōu)勢?怎么學(xué)?

      目前很多IT界的朋友們開始了學(xué)習(xí)Go這個(gè)語言,作為最近幾年比較火的服務(wù)端開發(fā)語言,其開發(fā)效率高的特性,使得它迅速的占領(lǐng)了各大公司的服務(wù)端開發(fā)領(lǐng)域。相比其他服務(wù)端開發(fā)語言
    發(fā)表于 12-19 16:08

    會(huì)go語言能做什么工作?

    Go語言主要用作服務(wù)器端開發(fā),其定位是用來開發(fā)“大型軟件”的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長,支持云計(jì)算的網(wǎng)絡(luò)服務(wù)。Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長
    發(fā)表于 03-22 15:03

    Go開發(fā)語言的優(yōu)勢在哪里?

    Go語言是谷歌發(fā)布的第二款開源編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,并專門針對多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,開發(fā)速度極快,可以與C或C++媲美,而且更加安全、支持并行
    發(fā)表于 03-22 15:04

    網(wǎng)易有道CEO周楓推薦Go語言并介紹Go語言的3個(gè)優(yōu)點(diǎn)

    網(wǎng)易有道CEO周楓推薦Go語言。他認(rèn)為Go很好地繼承了C語言靈活、簡單有效的思想;Go有很高的生產(chǎn)效率;
    的頭像 發(fā)表于 01-31 14:11 ?5242次閱讀

    Go和Python,Erlang的語言對比分析和Go編程示例概述

    本文對Go和Python、Erlang做了一些有趣的分析對比,相信大家能從中感受到Go語言的強(qiáng)大和與眾不同。
    的頭像 發(fā)表于 07-21 09:52 ?7781次閱讀
    <b class='flag-5'>Go</b>和Python,Erlang的<b class='flag-5'>語言</b>對比分析和<b class='flag-5'>Go</b>編程示例概述

    Go語言在世界各地的使用情況如何?

    【導(dǎo)讀】Go語言在世界各地的使用情況如何?數(shù)據(jù)說話,帶你直觀感受什么叫“酷小孩都用的語言”! JetBrains 官方博客發(fā)表了一篇題為"The state of Go"的文章,他們通
    的頭像 發(fā)表于 02-26 14:10 ?4150次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>在世界各地的使用情況如何?

    詳解GO語言的趨勢與使用情況

    Go 語言簡單易學(xué)、性能優(yōu)良。JetBrains Blog 發(fā)布了Go 語言的調(diào)查報(bào)告,看看GO 語言
    的頭像 發(fā)表于 03-17 11:05 ?3083次閱讀

    Go語言憑借什么成為云原生第一語言的?

    偶然看到有人說, Go 語言目前的火爆可能就是曇花一現(xiàn)而已。這個(gè)觀點(diǎn)我當(dāng)然是不認(rèn)同的。 近幾年,關(guān)于 Go 與 Java 還有 C 的對比和討論愈演愈烈,但不可否認(rèn)的是,在十年多的時(shí)間里,Go
    的頭像 發(fā)表于 04-22 10:15 ?3227次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>憑借什么成為云原生第一<b class='flag-5'>語言</b>的?

    Go編譯器已默認(rèn)啟用-G=3支持泛型

    Go 項(xiàng)目代碼倉庫昨日提交和合并的一個(gè) PR 顯示,Go 語言已在 cmd/compile 中默認(rèn)啟用 -G=3。 根據(jù)描述,此 PR 將 cmd/compile 的 -G flag
    的頭像 發(fā)表于 09-01 15:52 ?2875次閱讀
    <b class='flag-5'>Go</b>編譯器已<b class='flag-5'>默認(rèn)</b>啟用-G=3支持泛型

    go語言枚舉類型怎么用

    go 語言枚舉類型是這么用的?在什么場景下會(huì)用到枚舉?本文對 go 語言枚舉做了詳細(xì)講解。 枚舉,是一種重要的數(shù)據(jù)類型,由一組鍵值對組成,通常用來在編程
    的頭像 發(fā)表于 09-02 09:43 ?5233次閱讀

    帶你了解go語言中的閉包

    ? 【 導(dǎo)讀】什么是閉包? 什么場景下會(huì)用閉包 ? 本文對 go 語言中的閉包做了詳細(xì)介紹。 閉包是由函數(shù)及其相關(guān)引用環(huán)境組合而成的實(shí)體(即:閉包=函數(shù)+引用環(huán)境)。 Go中的閉包 閉包是函數(shù)式
    的頭像 發(fā)表于 11-02 15:27 ?2497次閱讀

    go語言中怎么使用HTTP代理

    go語言中怎么使用HTTP代理。
    的頭像 發(fā)表于 09-01 14:41 ?2464次閱讀
    财神百家乐的玩法技巧和规则 | 皇冠足球| 大连百家乐官网商场| 缅甸赌场| 百家乐官网赌博论谈| 百家乐换房| 网上博彩娱乐| 24天星吉凶| 海口太阳城大酒店| 百家乐官网计划| 线上百家乐赌法| 莱阳市| 百家乐庄家胜率| 金龙博彩网| 百家乐官网怎样下注| 德州扑克胜率计算器| 百家乐官网八卦九| 大发888 网站被攻击了| 南京百家乐官网赌博现场被| 大发888合作伙伴| 大发888娱乐城游戏lm0| 哪个百家乐官网投注比较好| 百家乐那里最好| 百家乐官网游戏程序下载| 豪享博百家乐的玩法技巧和规则 | 网络百家乐官网的玩法技巧和规则 | 百家乐官网平注法到656| 大发888官方网页| 免费百家乐官网的玩法技巧和规则| 大发888娱乐城健账号| 方形百家乐官网筹码| 娱乐城新用户送彩金| 真人百家乐官网| 足球博彩网| 现金百家乐技巧| 在线百家乐官网3d| 缅甸百家乐赌场| 真人百家乐官网游戏网| 全讯网新2网址| 做生意招牌什么颜色旺财| 88娱乐城注册|