自作でソフトウェアを作成しているのですが、その中でINIファイルに設定を書き出しています。
しかし、実体のあるテキストファイル(INI)で保存すると、簡単に改ざん(ユーザーの意図していない悪質な改ざん)をされてしまうことになります。
ソフトウェアの性質上、INIファイルに保存されているデータをevalすることがあるのですが、
もしそこが改ざんされていれば大変なことになりかねません。
そこで、INIファイルの改ざんを検出、または改ざんされないようにしたいのですが、どのような手段があるでしょうか。
自分で考えたのは、
アプリケーション終了時に
・INIファイルのMD5ハッシュを取得、それを記憶。
・INIファイルのタイムスタンプを記憶。
をして、次回起動時に現在のINIファイルのMD5,タイムスタンプと比較して、改ざんを検出するというものです。
ですが、この方法だと結局はMD5のハッシュ値やタイムスタンプをどこかに保存しておかねばならず、
そうなるとそれらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます。
どうすると、一番効率的で安全でしょうか。
レジストリも結局は改ざんされてしまいます。
そもそも、完全に改ざんを防ぐことはできないだろうと思っていますので、
出来るだけ改ざんされにくい方法、または改ざんを検出しやすい方法をご教授いただければと思います。
様々な意見を頂きたいので、既に回答が出ている場合も追加で回答頂けると幸いです。
No.1ベストアンサー
- 回答日時:
質問者さんも気づいているように、データとチェックロジック(ハッシュ値も含む)を同じ PC 上においたら改竄はできちゃうよ。
だから、せいぜい .ini ファイルを難読化して(↑の状態は暗号化とはいわない)、改竄する気をそぐことぐらいしかできないなぁ
ということで、ユーザが自由に操作できない、ネットワーク上のサーバ(S)を使うことにするね。
あと、話がややこしくなるから、前提として、プログラムの開始で .ini ファイルを読み込むところから、終了の .ini を書き込むまでは安全だとするよ。
1) .ini のデータをべつのサーバ(S)に保存する
サーバ(S)との受送信のタイミングで改竄可能だけど、前提があるので無視。
欠点はサーバに繋がらないと .ini ファイルが読めなくてプログラムが開始でできないこと。
2)公開鍵暗号技術を利用
.ini ファイルを保存するときは、サーバ(S)に秘密鍵で暗号化してもらう。
.ini ファイルを読み込むときはローカルに保存してある公開鍵で復号する。
これなら .ini ファイルを保存するときだけ、サーバ(S)に繋がればOk!。
ネットワーク接続がそもそも不可なら、暗号ロジックをプログラムに組み込むしかないなぁ(単なる難読化になるけど)。そうなると、アクティベーションキー方式で、鍵がかえられるようにしたほうがいいね。
こんなところかな?
お礼が遅くなり申し訳ありません。
たしかに、ローカルに保存して置く以上改ざんは防げないですよね。
暗号化(難読化)やサーバへのアップロードする方法がよさそうですね。
No.3
- 回答日時:
安直な方法ですが…
1)iniファイルに書き出す値そのものを暗号化する
2)1つの値を複数のキーに持たせ、かつ異なるキーワードで暗号化する
3)複数キーを起動時に照合する
これで改変の有無は検出できるのでは?
後はソーシャルエンジニアリング的手法として、目立つところにそれっぽいダミーのiniファイルを置いて、書き換えているふりをしているけど値は適当で、実体は別のところにある…なんてのも一時的には騙されてくれるかも知れません。
お礼が遅くなり申し訳御座いません。
ダミーはいいですね。
一時的にでも効果が期待できそうですね。
それに技術的にもそれほど難しいことでもありませんし。
ありがとうございました
No.2
- 回答日時:
> 自分で考えたのは、
> アプリケーション終了時に
> ・INIファイルのMD5ハッシュを取得、それを記憶。
> ・INIファイルのタイムスタンプを記憶。
> をして、次回起動時に現在のINIファイルのMD5,タイムスタンプと比較して、改ざんを検出するというものです。
>
>ですが、この方法だと結局はMD5のハッシュ値やタイムスタンプをどこかに保存しておかねばならず、
>そうなるとそれらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます。
保存先を実行ファイルの中、数カ所に分けてなどすれば簡単には改竄し難くなるのでは。
『それらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます』そこまでする方は少ないかと思いますよ。
要するに、少しでもやれば書き換えれる方法に辿り着く者は減る。それがより面倒にすれば更に減るのだと思います。
インストーラで実行ファイル中に埋め込んだって、インストール前のアーカイブから抽出したデータとバイナリ差分とればわかるかも知れませんが、そこまでする者はずっと減るのでは。
MD5ハッシュもちょっと値を組み替えるだけでもそのまま使うより減らせるかも知れませんし。
お礼が遅くなり申し訳御座いません。
やっぱり完全な改ざん防止は出来ないようですね。
難読化に努めたいと考えています。
ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 【統計】効果検証としてのT検定・F検定 5 2022/10/21 11:08
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- PDF ワードで作った文書のPDF化 5 2023/04/10 16:56
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- 事件・犯罪 財務省の元官僚の佐川宣寿氏。この人、森友問題の公文書改ざん命令の件での刑事罰は受けないのか? 1 2022/11/27 08:51
- 法人税 電子帳簿保存法について 1 2022/04/07 11:17
- CAD・DTP JWW-CADでDXF変換後の線が連動して消える 2 2023/01/13 11:09
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- 政治 農地被買収者問題調査会設置法案を、参議院(旧貴族院)で審議することができなかったのはなぜ? 2 2022/10/30 08:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの特定行の削除
-
docxをmht形式で保存したファイ...
-
OneDrive必要なものでしょうか
-
File.delete()にてファイルを削...
-
EXCELVBAにて文字列にして「01...
-
vbsからのExcelマクロ呼び出し...
-
エクセルのファイル:「自分」が...
-
Googleドライブについて
-
自動で.xlsを閉じて指定フォル...
-
HTMLのファイル移動について
-
xlsファイルが開かない。
-
一つのフォルダーに50個のエク...
-
エクセルの拡張子XLSのファイル...
-
[Unity]シーンファイルの中が消...
-
VBAにおいて、ファイルの移...
-
Excel: ファイル名になぜ、[...
-
FTPのgetとputの使いわけ。
-
WINDOWS CMDからゴミ箱のファ...
-
batでファイル名を変更したい(...
-
Excelファイルを比較し、差分箇...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
iCloud for Windowsをアンイン...
-
vbsからのExcelマクロ呼び出し...
-
CSVファイルの特定行の削除
-
EXCELVBAにて文字列にして「01...
-
OneDrive必要なものでしょうか
-
Excel: ファイル名になぜ、[...
-
ファイルが移動してもリンクの...
-
複数のExcelファイルにある同名...
-
VBAにおいて、ファイルの移...
-
彼女の過去の恋愛に嫉妬してし...
-
Googleドライブについて
-
WINDOWS CMDからゴミ箱のファ...
-
[Unity]シーンファイルの中が消...
-
エクセルの拡張子XLSのファイル...
-
batでファイル名を変更したい(...
-
Excelに貼り付けた画像を圧縮す...
-
エクセルのファイル:「自分」が...
-
5000個のtiffファイルをpdfへ変...
-
VBA ファイル一覧を取得して全...
-
HTMLのリンクで、EXCELをIEでは...
おすすめ情報