[問題] 如何寫出符合安全的C/C++ code

看板C_and_CPP作者 (Clang++)時間9年前發表 (2016/04/06 13:24), 9年前編輯推噓3(3037)
留言40則, 10人參與, 最新討論串1/3 (看更多)
https://www.facebook.com/x43x61x69/posts/780870938716449 昨天看到很多人傳這一篇文章 我發現周遭很多人都會犯一樣的錯誤。 另外還看到很多新手居然把重要參數寫在 #define (preprocessor)中... (同事的說法 因為編成binary後還是明碼 甚至可以直接開檔改 所以建議重要參數不要放在 preprocessor) 想問一下有什麼書在教安全程式的寫法 像是避免strcpy的buffer overflow攻擊之類的 -- C++是雙截棍,揮舞起來很強悍。 很吸引人,但需要你多年的磨練來掌握。 很多人希望改用別的武器。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.214.17 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1459949046.A.0A8.html ※ 編輯: Clangpp (114.37.142.207), 04/06/2016 22:01:07

04/06 23:00, , 1F
把重要參數寫在 #define 錯了嗎?不是很正常?
04/06 23:00, 1F

04/06 23:03, , 2F
同樓上,求指點
04/06 23:03, 2F

04/06 23:06, , 4F
沒有提及C語言的 Macro 有何安全性問題
04/06 23:06, 4F

04/06 23:06, , 5F
只有 VBA-type/WindWord Macros 可能有病毒攻擊
04/06 23:06, 5F

04/06 23:15, , 6F
同一樓,不懂為什麼寫在參數有問題...?
04/06 23:15, 6F

04/07 02:21, , 7F
萬無一失的程式碼-終結 C & C ++ 軟體漏洞 <= 這本?
04/07 02:21, 7F

04/07 08:04, , 8F
我更正一下 重要參數是指密碼的部分 我記得沒錯很容易被
04/07 08:04, 8F

04/07 08:05, , 9F
反組譯 跟加密相關的參數都建議不要放在code當中
04/07 08:05, 9F

04/07 08:07, , 10F
有錯可以更正我一下 因為我是聽同事講的
04/07 08:07, 10F

04/07 08:08, , 11F
理由是上面描述的
04/07 08:08, 11F
※ 編輯: Clangpp (114.37.181.229), 04/07/2016 08:18:45 ※ 編輯: Clangpp (59.124.167.226), 04/07/2016 09:07:08 ※ 編輯: Clangpp (59.124.167.226), 04/07/2016 10:41:58

04/07 10:56, , 12F
(笑到翻肚) 那用 const 就不會被反組譯看到喔?
04/07 10:56, 12F
已修正了 感謝

04/07 10:56, , 13F
你那同事真的有反組譯過自己或別人寫的程式嗎?
04/07 10:56, 13F

04/07 11:01, , 14F
電腦安全是另一個領域,而且是進階課程,認真要做的話,
04/07 11:01, 14F

04/07 11:02, , 15F
成本非常高,不過你若只要單純討論一個實際遇到的問題
04/07 11:02, 15F

04/07 11:03, , 16F
像是現在這個密碼問題,我蠻願意聊聊的
04/07 11:03, 16F

04/07 11:05, , 17F
如果要看書,我推薦 Bruce Schneier 的 Pratical
04/07 11:05, 17F

04/07 11:05, , 18F
Cryptography 第 9 和 16 章 Implementation Issues
04/07 11:05, 18F

04/07 11:06, , 19F
它有教你一點點訣竅,且告訴你不要妄想看個兩章就變行家
04/07 11:06, 19F

04/07 11:29, , 20F
喔喔喔 感謝 願聞其詳 因為我也希望能夠導正觀念
04/07 11:29, 20F

04/07 11:30, , 21F
有時候我們接收錯誤的觀念太多 所以我想要理解什麼是正確
04/07 11:30, 21F

04/07 11:30, , 22F
04/07 11:30, 22F

04/07 11:30, , 23F
這種東西我一直很有興趣 但是不知道從哪邊入門
04/07 11:30, 23F

04/07 11:34, , 24F
所以 密碼不建議放在preprocessor是正確的嗎??
04/07 11:34, 24F

04/07 11:42, , 25F
密碼喔... 我想你得先把整件事講清楚才有辦法討論...
04/07 11:42, 25F

04/07 11:42, , 26F
什麼密碼? 程式如何使用? 要防範什麼樣的威脅?
04/07 11:42, 26F

04/07 11:43, , 27F
如果直接這樣問我,我會告訴你放哪都會被反組譯出來
04/07 11:43, 27F

04/07 11:46, , 28F
#define 最後還是會處理完再代入該放的位置,那個該放的
04/07 11:46, 28F

04/07 11:46, , 29F
位置大概就是你說的 const,再轉成 binary 一樣是明碼
04/07 11:46, 29F
※ 編輯: Clangpp (59.124.167.226), 04/07/2016 12:32:55

04/07 18:54, , 30F
也有可能是runtime時放進stack,但兩者靜態分析都秒爆
04/07 18:54, 30F

04/07 22:48, , 31F
明文只要在 memory 中出現過就抓得出來,沒有例外
04/07 22:48, 31F

04/08 09:51, , 32F
簡單弄可以買一套虛擬機保護的加殼器,找沒自動脫殼的
04/08 09:51, 32F

04/08 09:55, , 33F
複雜一點的就是自己的殼自己做,反反編譯跟反靜態分析
04/08 09:55, 33F

04/08 12:23, , 34F
萬無一失的程式碼:終結C&C++軟體漏洞 參考一下
04/08 12:23, 34F

04/08 12:57, , 35F
加殼(程式碼加密)有個小麻煩,防毒軟體會把你當病毒
04/08 12:57, 35F

04/08 12:57, , 36F
因為病毒超愛用這招來躲防毒軟體的掃描 XDDD
04/08 12:57, 36F

04/08 14:25, , 37F
多數時候是防毒軟體太弱,只能識別殼的部分特徵或行為
04/08 14:25, 37F

04/08 14:28, , 38F
不管三七二十一就判斷是病毒,只能手工加殼加花多測試
04/08 14:28, 38F

04/08 14:28, , 39F
防止逆向工程跟免殺技術是正反兩面
04/08 14:28, 39F

04/09 04:04, , 40F
要買正版,既然買了也順便買簽章吧(X 正版才不易被殺
04/09 04:04, 40F
文章代碼(AID): #1N1Gts2e (C_and_CPP)
文章代碼(AID): #1N1Gts2e (C_and_CPP)