1. ホーム
  2. c++

[解決済み】リバースエンジニアリングから実行ファイルを保護する?

2022-04-19 23:28:14

質問

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が迷い込んで、代わりにもっと簡単なことに取り組んでしまう可能性を高めることになります。