What is Obfuscation?
On 10月 25, 2021 by adminWhat is Code Obfuscation?
Code Obfuscation is the process of modifying an executable so it is no longer useful to a hacker but remain fully functional.Why do you be the Obfuscation is the process of executable? このプロセスは実際のメソッド命令またはメタデータを変更することがありますが、プログラムの出力は変更されません。 はっきり言って、十分な時間と労力があれば、ほとんどすべてのコードをリバースエンジニアリングすることが可能です。 しかし、Java、Android、iOS、または.NET(Xamarin、C#、VB.NET、F#など)のような一部のプラットフォームでは、無料のデコンパイラは、実質的に時間と労力をかけずに実行ファイルまたはライブラリからソースコードを簡単にリバースエンジニアリングすることができます。 自動化されたコード難読化により、プログラムのリバースエンジニアリングは困難であり、経済的にも実現不可能です。
なぜコード難読化ツールを使用するのですか?
アプリケーションをリバース エンジニアリングしにくくすることにより、企業秘密(知的財産)の盗難、不正アクセス、ライセンスやその他のコントロールのバイパス、および脆弱性の発見から保護することができます。 これは、Java や C#、VB.NET、Managed C++、F# などの .NET 言語など、何らかの中間レベルの命令を作成する言語に対して最も効果的です。 難読化およびアプリケーションセキュリティ技術の代表的な例としては、以下のものがあります。
Rename Obfuscation
Rename は、メソッドや変数の名前を変更します。 これは、逆コンパイルされたソースを人間が理解しにくくするものですが、プログラムの実行には影響を与えません。 新しい名前は、「a」、「b」、「c」、または数字、印字不可能な文字、または見えない文字などの異なるスキームを利用することができます。 また、異なるスコープを持つ名前であれば、オーバーロードすることも可能です。 名前の難読化は、ほとんどの .NET (C# など)、iOS、Java、および Android 難読化ツールで使用される基本的な変換です。
String Encryption
管理下の実行ファイルで、すべての文字列は明確に発見および読み取りが可能です。 メソッドや変数の名前が変更された場合でも、バイナリ内の文字列参照を検索することにより、文字列を使用して重要なコード セクションを特定することができます。 これには、ユーザーに表示されるメッセージ(特にエラーメッセージ)も含まれます。 この種の攻撃に対して効果的な障壁を提供するために、文字列の暗号化では実行ファイル内の文字列を隠し、必要な場合にのみ元の値を復元します。 実行時に文字列を復号化すると、通常、わずかな実行時パフォーマンス低下が発生します。
Control Flow Obfuscation
Control Flow Obfuscation は、条件分岐および反復構造を合成して、有効な実行可能ロジックが作成できるが、逆コンパイルすると決定不能な意味的結果をもたらすものです。 より簡単に言うと、分解されたコードをハッカーが理解するのが非常に困難なスパゲッティ ロジックのように見せてしまうのです。 これらのテクニックはメソッドのランタイム パフォーマンスに影響を与える可能性があります。
Instruction Pattern Transformation
コンパイラが作成する一般的な命令を他の、あまり目立たない構成に変換することです。 これらは完全に合法な機械語命令ですが、Java や C# などの高レベル言語にはきれいにマッピングされない場合があります。 たとえば、Java や .NET ランタイムのスタック ベースの性質を利用した一時的な変数キャッシュです。
Dummy Code Insertion
プログラムの論理に影響を与えないコードを実行ファイルに挿入しますが、デコンパイラーは壊れますし、リバース エンジニアリングしたコードの解析がはるかに難しくなります。
使用されていないコードおよびメタデータの削除
アプリケーションからデバッグ情報、必須ではないメタデータおよび使用されているコードを削除すると、アプリケーションのサイズが小さくなり、攻撃者が利用できる情報が少なくなります。 この手順により、ランタイムパフォーマンスが若干向上する可能性があります。
バイナリ リンク/マージ
この変換は、複数の入力実行可能ファイル/ライブラリを 1 つまたは複数の出力バイナリに結合します。 リンクは、特に名前の変更および刈り込みと一緒に使用した場合、アプリケーションをより小さくするために使用されます。 これは、実際には決して実行されない潜在的に不正なコードを導入する方法ですが、逆コンパイルされた出力を理解しようとする攻撃者を混乱させるものです。 改ざんが検出された場合、アプリケーションのシャットダウン、機能の制限、ランダム クラッシュの呼び出し (クラッシュの理由を隠す)、またはその他のカスタム アクションの実行が可能です。 8235>
Anti-Debug
ハッカーがアプリケーションの海賊版や偽造、データの窃盗、またはインフラストラクチャ ソフトウェアの重要な部分の動作の変更を試みる場合、ほぼ確実にリバース エンジニアリングとデバッガーによるアプリケーションのステッピングから始めるでしょう。 難読化装置は、実運用アプリケーションがデバッガ内で実行されているかどうかを検出するコードを注入することで、アプリケーションの自己防衛を重ねることができます。 デバッガが使用されると、機密データを破損したり(盗まれないように)、ランダムなクラッシュを引き起こしたり(クラッシュがデバッグチェックの結果であることを偽る)、その他のカスタムアクションを実行したりすることができます。
アプリケーションを難読化すべきでしょうか
信頼されていない環境で実行され、知的財産を持ち、機密情報へのアクセスを提供し、ゲート機能を持つソフトウェアをリリースする場合は、難読化とランタイム アプリの自己保護の利用を強く検討してください。 難読化により、攻撃者がコードを確認し、アプリケーションを分析することがより困難になります。 また、ハッカーがアプリケーションをデバッグしたり、改ざんしたりすることも難しくなります。 最終的な目標は、アプリケーションから企業秘密(IP)、認証情報、セキュリティ脆弱性などの有用な情報を引き出したり発見したりすることを困難にする保護レイヤーを追加することです。 また、アプリケーションのロジックを変更したり、悪意のあるコードでアプリケーションを再パッケージ化することをより困難にしなければなりません。
コメントを残す