精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Go語言的默認機制

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

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

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

不過麻煩的事情來了。我們寫一個程序,就是想在別人的電腦上運行的。然而,Go語言的默認機制,會泄漏我們的一些信息,雖然不多,但也有點尷尬。本文結合網上的一些常用方法,總結出一套通用的簡單易行的保護措施。

刪除調試符號

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

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

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

gobuild-ldflags"-s-w”[

(需要Go版本大于1.7)

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

...
-sdisablesymboltable
-wdisableDWARFgeneration

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

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

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

刪除trace文件信息

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

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

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

GOROOT=/opt/go
GOPATH=/home/nikos/projects/go
GOROOT_FINAL=$GOROOT

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

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

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

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

原文標題:Golang二進制文件混淆保護

文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 程序
    +關注

    關注

    116

    文章

    3778

    瀏覽量

    80858
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68368
  • 編譯
    +關注

    關注

    0

    文章

    654

    瀏覽量

    32813

原文標題:Golang二進制文件混淆保護

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Go語言簡介和安裝方法

    Go 又稱 Golang ,是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言Go 語言語法與
    發表于 07-19 16:33 ?548次閱讀

    Go語言常量的聲明

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

    Go語言中的整數類型

    Go 語言中,整型可以細分成兩個種類十個類型。
    發表于 07-20 15:25 ?896次閱讀

    Go語言開發有什么優勢?怎么學?

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

    go語言能做什么工作?

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

    Go開發語言的優勢在哪里?

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

    網易有道CEO周楓推薦Go語言并介紹Go語言的3個優點

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

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

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

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

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

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

    Go 語言簡單易學、性能優良。JetBrains Blog 發布了Go 語言的調查報告,看看GO 語言
    的頭像 發表于 03-17 11:05 ?3030次閱讀

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

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

    Go編譯器已默認啟用-G=3支持泛型

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

    go語言枚舉類型怎么用

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

    帶你了解go語言中的閉包

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

    go語言中怎么使用HTTP代理

    go語言中怎么使用HTTP代理。
    的頭像 發表于 09-01 14:41 ?2393次閱讀