[解決済み】リバースエンジニアリングから実行ファイルを保護する?
質問
C/C++のコードを逆アセンブルやリバースエンジニアリングから保護する方法について考えています。 通常、私は自分のコードでこのような行為を決して容認しません。しかし、私が現在取り組んでいるプロトコルは、様々な人々のセキュリティのために、決して検査されたり理解されたりしてはなりません。
今、これは私にとって新しいテーマで、インターネットはあまり参考になりません。 リバースエンジニアリングの防止 の情報が大量に描かれています。 リバースエンジニアリングの方法
これまでに思いついたものをいくつか紹介します。
- コードインジェクション(実際の関数呼び出しの前後にダミー関数を呼び出す)。
- コードの曖昧さ(バイナリの逆アセンブルを揶揄するもの)
-
スタートアップ・ルーチンを自分で書く(デバッガがバインドしにくくなる)
void startup(); int _start() { startup( ); exit (0) } void startup() { /* code here */ }
-
デバッガのランタイムチェック(検出されたら強制終了)
-
関数トランポリン
void trampoline(void (*fnptr)(), bool ping = false) { if(ping) fnptr(); else trampoline(fnptr, true); }
-
無意味な確保と解放(スタック変化の多さ)
- 無意味なダミーコールとトランポリン(逆アセンブルの出力で大量にジャンプする)
- 大量のキャスト(難読化された逆アセンブルのため)
これらは私が思いついたことの一部ですが、どれも適切な時間枠があれば、コードアナリストが回避したり、解明したりできるものばかりです。 他に何か代替案はありますか?
解決方法は?
アンバーが言ったことは、まさにその通りです。 リバースエンジニアリングを難しくすることはできても、防ぐことはできないのです。 あなたは決して リバース・エンジニアリングの防止に依存するセキュリティー .
とはいえ、私が見た中で最も優れたリバースエンジニアリング対策技術は、コードを難読化することではなく、人々がコードの仕組みを理解するために通常使用するツールを破壊することに焦点を置いていました。 ディスアセンブラやデバッガなどを破る創造的な方法を見つけることは、単にひどいスパゲッティコードを大量に生成するよりも効果的で、知的にも満足できる可能性が高いのです。 しかし、これは、J Random Crackerが迷い込んで、代わりにもっと簡単なことに取り組んでしまう可能性を高めることになります。
関連
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Pythonのコードをユーザーに読まれないようにするにはどうしたらいいですか?
-
[解決済み] gccでC/C++のソースからアセンブラ出力を得るにはどうしたらいいですか?
-
[解決済み] C++11逆レンジベースforループ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】'std::cout'への未定義の参照