XamarinプロジェクトはドットネットDLLアセンブリにコンパイルされており、apkファイルにパックされ、DotPeekのようなリフレクターに簡単に反映されます。Xamarinプロジェクトの難読化
私の最初の質問は 私たちのコードを保護するにはどうすればよいですか?
私の2番目の質問です:SmartAssemblyのような 実行(Do)難読化ツールは、XamarinのプロジェクトやXamarinプロジェクトで使用可能なそれらをサポートしないのだろうか?
XamarinプロジェクトはドットネットDLLアセンブリにコンパイルされており、apkファイルにパックされ、DotPeekのようなリフレクターに簡単に反映されます。Xamarinプロジェクトの難読化
私の最初の質問は 私たちのコードを保護するにはどうすればよいですか?
私の2番目の質問です:SmartAssemblyのような 実行(Do)難読化ツールは、XamarinのプロジェクトやXamarinプロジェクトで使用可能なそれらをサポートしないのだろうか?
のAPKのためのあなたの.NETコード(の.dll)を保護するための最良の方法は、Ahead Of Time(AOT)コンパイルを有効にするには、次のとおりです。
AOTコンパイルは、アプリケーションのILコード(.dll)をネイティブ命令にコンパイルします。 APKにパッケージ化された最終コードは、管理されたILコードではなく、X86、armなどの命令です。
AOTコンパイルは、エンタープライズ以上のライセンスでのみ利用できます。
AOTはリバースエンジニアリングの難しさを増していますが、まだ100%ばかばかしいわけではありません。最終的なバイナリは、IDAプロのようなソフトウェアを使用して根っこのデバイスから引き出し、リバースエンジニアリングすることができます。 DotPeekを使用するよりもはるかに難しいですが、まだ可能です。
AOTコンパイルを有効にすることには注意が必要です。アプリケーションで参照されるすべてのアセンブリをコンパイルする必要があるため、アプリケーションのビルド時間が大幅に増加します。私の経験から、AOTが有効になっているビルド時間で200%〜300%の増加が予想されることが示されました。
さらに、AOTコンパイルによって最終的なAPKサイズが増加します。
AOTコンパイルはエンタープライズライセンスでのみ利用可能でした。 Xamarinは無料ですので、Visual Studio Communityで利用できますか? –
これを強調してくれてありがとう、本当にAOTはEnterpriseライセンスでのみ利用可能です。回答を更新しています。 – matthewrdev
これによると:https://developer.xamarin.com/guides/android/deployment%2C_testing%2C_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/#aot結果のネイティブコードは、コンパイルされていないアセンブリと共にAPKに含まれています。これは、コンパイルされたバージョンとコンパイルされていないバージョンの両方が含まれていることを意味し、AOTは難読化に本当に役立たないのでしょうか? – HelloWorld
最初の質問では、Xamarinコードを難読化するツールを使用することは可能です。たとえば、Crypto Obfuscator,Babel ObfuscatorおよびDotfuscator
2番目の質問では、SmartAssemblyの難読化が可能です。 Windows Phoneの部分hereを確認します。
コードを完全に100%保護して、コードの逆コンパイルや参照を防ぐことはできません。
すべてのメソッドと変数をハッシュして、難読化されたコードを理解する何らかの種類のアプリケーションインタープリタを作成するのに別の時間を費やすこともできますが、それも調査され、 。
も参照してください:How can I protect my .NET assemblies from decompilation?
DotfuscatorはXamarinをサポートしており、指示はオンラインで(Dotfuscator Professionalまたは無料Community Edition)、どのように統合するのですか。本質的には、プロセスは次のとおりです。
全開示を、元の場所に戻って
ほとんどの(すべて?)難読化ツールは、CILベースのアセンブリ(任意の.Net/Mono環境の同じプロ/コンシューマ)を話しているので動作します。 Xamarin.Androidの場合、VS Enterpriseユーザーの場合は、[ネイティブコードでアセンブリを有効にする]を有効にすることもできます。これにより、アセンブリがNDKベースのランタイムライブラリに埋め込まれます。リバースエンジニアは抽出するポインティング/エンディングポイントを見つけるのに多くの時間を費やす必要がありますが、どの難読化を使用していても、CILベースの難読化のようにREに時間を費やすことができます。 – SushiHangover
なぜiOSタグを使用しますか? Xamarin.iOSはすでにAOTを使用してネイティブにコンパイルします。 –
@LexLi言及してくれてありがとう。タグを削除しました。 –