2016-09-15 101 views
-1

我是去同步團體玩弄和我只是想,如果我增加更多的團體比我標示爲完成會發生什麼。並且我得到了我在下面發佈的運行時錯誤。 所以這裏的問題是,如果走的是編譯成不像Java或C#怎麼來的我的文件,甚至行信息可以在運行時錯誤顯示。如果文件信息是保存在二進制我認爲它可以很容易地反編譯真實的機器碼。 我做錯了嗎我需要添加一些有點env變量prod構建或它就像c#theres沒有真正的方法來隱藏你的代碼如何以及爲什麼Golang二進制顯示文件和行信息的錯誤

+0

它的調試信息... –

+0

基本技巧是,您可以將PC(程序計數器)或類似寄存器的範圍映射到函數,將程序計數器與文件/函數的名稱之間的映射存儲在調試部分的可執行文件,並在需要時使用程序計數器查找文件和函數名稱。 – nos

+0

我擔心的是我的代碼可以反編譯使用這個信息使用字典不會幫助它,我認爲@nos – nikoss

回答

1

因此,爲了好玩,我寫了一個簡單的Go程序,只是恐慌()並嘗試用objdump和objcopy放屁,看看這些信息在哪裏。在Linux(也許是其他)上,Go在ELF部分.gopclntab中粘貼相關信息。如果刪除它,對實際程序源的引用將消失,但運行時會崩潰。並且有更多的運行時引用。*該部分的內容(大概是用於鏈接和內省)。我認爲你不可能真正運行一個Go程序,而這些信息完全消失了。

如果你真的很擔心很可能是預處理你的源代碼編譯之前混淆標識符和文件名可以刪除DWARF信息的一些安全提到elsewhere on SO和一堆ELF段消失,但你最好的選擇。但有doesn't appear to be a ready-made tool to do so

我不是圍棋的設計師之一,但我猜還要往前走是不切實際的,由於喜歡內省的東西(一些東西,例如C不能做的)。像upx這樣的壓縮程序會稍微對文件進行混淆處理(並且對於編譯後的Go似乎也可以正常工作 - 可能需要一兩個警告),但是如果知道它在那裏就可以撤消,這很簡單(注意任何安全類型離開我的開發者許可證,甚至提到它)。

現實情況是,你實際上能做到最好的就是speedbump人誰是在你的代碼搞亂真正感興趣。混淆來源,如果你真的有這樣的動機,那將是你最好的選擇(雖然最終還是徒勞無益,而且有足夠堅決的攻擊者)。

相關問題