実行ファイルをバイナリエディタ等で開くと、コード中にある
文字定数などは、そのまま読取ることができてしまいす。
アプリケーション内に定数値(例えばパスワード等)を保持しておく場合、
バイナリエディタで簡単に確認できないようにする為にはどのような
対策をとるべきなるのでしょうか?
よく使用される方法などがありましたらご教授ください。
宜しくお願い致します。
暗号
あるいは圧縮。
プログラム中で文字列を暗号化して格納、復号して検証するより
素の文字列のままプログラムして、マイナーな EXE Packer で圧縮したほうが
楽っちゃあ楽。
UPX なんかだとすぐ破られるんで注意。
圧縮である以上、どこかに復元手段はあるので、セキュリティ上では
よく練られた暗号や MD5 などのハッシュには及ばない。
メモリ覗かれてもバレるか。
その文字列の重要性がどの程度かによるかも。
認証のためだけなら、復号せんでもよろしいけど。
実行ファイルの圧縮をするにしても、使用するパスワードや
鍵データの値をそのままコードに埋め込むのは避けるべき
みたいですので、暗号やハッシュ関数、独自ロジックなどを
組み合わせてEXE内部で生成する方法をいろいろ考えてみようと
思います。
素早いご返答、ありがとうございました。
ふむ、それもそうですね。
暗号といわれたから復号と対で考えてしまった。
でも、復号しないならハッシュのほうがよろしいんでは?
絶対とは言い切れませんが、復号可能な暗号より強度はあるかと。
> 復号しないならハッシュのほうがよろしいんでは?
非可逆で値域が十分に広いものならなんでもいいのでは。
もちろんハッシュでもCRCでも。
#スレ主さんまだ見てるかな…
> 非可逆で値域が十分に広いものならなんでもいいのでは。
その通りです。
ただ、「暗号」というのは一般には可逆ではなかろうかと思ってこのように書きまし
た。
> もちろんハッシュでもCRCでも。
CRC もハッシュの一種だと思っていましたが。
CRC でも MD5 でも SHA1 でも、お好みで。
うーむ
非可逆で値域が十分に広く、同一のものからは同一の値が算出されるもので「ハッシ
ュ」と呼ばれないものがひょっとしてありますか?
もしあるならそれでもいいんですが、そういうものを一般に「ハッシュ」と呼ぶと思っ
ていました。
あ、あ、確かにそうですね。失礼。
非可逆で、というのは言い過ぎでした。
認証だけなら可逆(複合可能)でなくてもいい、くらいの意味でございます。
追記です。
懸案としてまだ相談中なのですが、とりあえずの対応として
定数値を複数個を独自法則に従い、ハッシュ関数にかけた値の
一部を認証値として使用するように変更しました。
「解決」後も書き込んでくださったシャノンさん、επιστημη さん、
どうもありがとうございました。