Re: [問題] 如何寫出符合安全的C/C++ code
※ 引述《Clangpp (Clang++)》之銘言:
: 另外還看到很多新手居然把重要參數寫在 #define (preprocessor)中...
: (同事的說法 因為編成binary後還是明碼
: 甚至可以直接開檔改 所以建議重要參數不要放在 preprocessor)
突然想到一個方便的小實驗可以驗證上面這個說法,
寫這樣一段小程式:
#include <stdio.h>
const char *password = "CrystalBall";
int main(void) {
printf("Password = %s\n", password);
return 0;
}
和
#include <stdio.h>
#define PASSWORD "CrystalBall"
int main(void) {
printf("Password = %s\n", PASSWORD);
return 0;
}
把他們 compile 成執行檔(假設叫 a.out),然後用這指令:
strings a.out | grep 'CrystalBall'
試試看不同的方法,哪一種可以讓簡單的文字搜尋指令搜尋不到...
這樣不用反組譯也可以快快樂樂看見密碼~~~
如果你有 binary editor (vim -b 就辦得到) 也可以用 editor 開啟檔案搜尋。
--
桃樂絲: 可是, 如果你沒有頭腦, 為什麼會說話?
稻草人: ㄝ, 我也不知... 但是有些人沒有頭腦也能說超~多話呢。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.4.14
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1460001796.A.309.html
推
04/07 12:30, , 1F
04/07 12:30, 1F
→
04/07 12:30, , 2F
04/07 12:30, 2F
→
04/07 12:58, , 3F
04/07 12:58, 3F
推
04/07 17:39, , 4F
04/07 17:39, 4F
要儲存就絕對會被挖出來。像樓下那樣不儲存,只驗證,才比較實際點。
→
04/07 18:11, , 5F
04/07 18:11, 5F
→
04/07 18:19, , 6F
04/07 18:19, 6F
→
04/07 18:22, , 7F
04/07 18:22, 7F
在適合的應用上,這招是正解。你提出的瑕疵,可以補強。我過陣子再回文細說。
MD5 不要用了啦,如果要用常見的演算法,挑 SHA-2 家族或 SHA-3 比較好。
http://www.larc.usp.br/~pbarreto/hflounge.html
不說也猜得到,骷髏頭不能用,紅十字殘血不推薦,放大鏡是受過攻擊仍然健在。
(SHA-2 家族指 SHA-224, SHA-256, SHA-384, SHA-512 這四款)
→
04/07 18:50, , 8F
04/07 18:50, 8F
可以跟大家分享一下 IDA 這個工具嗎?
推
04/07 18:58, , 9F
04/07 18:58, 9F
→
04/07 18:59, , 10F
04/07 18:59, 10F
你的方法就是密碼學說的 confusion & diffusion 兩種方法之 diffusion (錯位)
至於 confusion 怎麼做呢? 產生一串和 password 一樣長的亂碼,xor 上去即可。
為了再還原出原始的 password 明文,錯位的排法、xor 的遮罩都要保留下來,
也因此這樣做也只能防簡單的 grep,仔細去看還是可以掘出解碼的方法。
***** 所有的雙向加解密演算法都一樣 *****
我管你是用 AES 還是 RSA,反正只要鑰匙藏在踏墊下都沒用。
→
04/07 19:00, , 11F
04/07 19:00, 11F
主要是要讓他拿去吐槽他同事 XD
順便讓原 PO 思考一下這個問題,所以才限制一下怪物等級,當作地下城第一層。
※ 編輯: Schottky (220.137.4.14), 04/07/2016 20:47:37
→
04/07 21:19, , 12F
04/07 21:19, 12F
→
04/07 21:20, , 13F
04/07 21:20, 13F
推
04/07 21:30, , 14F
04/07 21:30, 14F
→
04/07 21:32, , 15F
04/07 21:32, 15F
→
04/07 21:32, , 16F
04/07 21:32, 16F
推
04/07 21:33, , 17F
04/07 21:33, 17F
→
04/07 21:34, , 18F
04/07 21:34, 18F
→
04/07 21:34, , 19F
04/07 21:34, 19F
→
04/07 21:40, , 20F
04/07 21:40, 20F
→
04/07 21:40, , 21F
04/07 21:40, 21F
→
04/07 21:41, , 22F
04/07 21:41, 22F
推
04/07 23:05, , 23F
04/07 23:05, 23F
推
04/08 16:59, , 24F
04/08 16:59, 24F
討論串 (同標題文章)