5

Xamarin Android は初めてです。Visual Studio 2015 Community Edition を使用してアプリを作成しました。ソリューション構成をリリースに設定しました。

難読化には .Net Reactor を使用しました。

これは私が難読化しようとした方法です

1: アプリをビルドしたら、Bin\Release フォルダーに移動します。

2: App.dll を難読化する

3: 元の dll を、Bin\Release、Obj\Release、および Obj\Release\assemblies で難読化された dll に置き換えます。

4: [ツール] -> [Android] -> [発行] に移動します。

ただし、難読化された dll を公開しようとすると、元の dll に置き換えられます。

それで、私は何を間違っていますか?apk ファイルを手動でパックする必要がありますか。その場合、どうすればそれを行うことができますか?

4

3 に答える 3

1

1) 難読化されていないアプリケーション .apk を公開し、名前を .zip に変更します。

2) ファイルMono.Android.dllを "assembly" フォルダーからYourProjectName \bin\Releaseフォルダーに移動します。

3) 新しい .NET Reactor プロジェクトを作成し、適切な設定を行います ( Anti ILDASMのチェックを外します。また、難読化プロセスは、リフレクションまたはシリアル化で使用されるフィールドの名前を変更します。アプリのクラッシュを回避するには、一部のタイプまたはメソッドを無視するための除外を設定する必要があります。 .)。このプロジェクト ファイルをYourXamarinFolder\YourProjectName\bin\Releaseに保存します。

4) ファイルobfuscate_android.batを作成し、ここにコードを挿入します。

 "C:\Program Files (x86)\Eziriz\.NET Reactor\dotNET_Reactor.exe" -project "NET_Reactor_Project_Name.nrproj"
  copy "YourProjectName_Secure\YourProjectName.dll" "YourProjectName.dll"
  DEL "YourProjectName_Secure\*.dll" "YourProjectName_Secure\*.pdb" /q

このファイルをYourProjectName\bin\Releaseに移動します。

5) Xamarin プロジェクトをアンロードし、YourProjectName.csproj を編集します。次のブロックを見つけます。

<PropertyGroup Condition = " '$ (Configuration) | $ (Platform)' == 'Release | AnyCPU'">
<! -- Insert here the link to obfuscate_android.bat -->
<PostBuildEvent>obfuscate_android.bat </ PostBuildEvent>
 </ PropertyGroup>

6) すべて保存してプロジェクトをリロード

7) パブリッシュを実行します。

于 2016-06-25T18:45:09.910 に答える
1

MSBuild にフックすることで、Xamarin Studio で Xamarin Android プロジェクトを .NET Reactor で問題なく難読化することができました。次のマークアップを csproj ファイルの末尾に追加します。

  <Target Name="AfterCompile">
    <Exec Command="&quot;C:\Program Files (x86)\Eziriz\.NET Reactor\dotNET_Reactor.exe&quot; -file &quot;$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)&quot; -targetfile &quot;$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)&quot; -suppressildasm 1 -obfuscation 1 -stringencryption 1 -antitamp 1 -control_flow_obfuscation 1 -flow_level 9 -resourceencryption 1 -mono 1 -exception_handling 1" Condition="'$(ConfigurationName)' == 'Release'" />
  </Target>
</Project>

Visual Studio 2015 で Xamarin にアップグレードすると、これは機能しなくなりました。「エラー MSB4018: "LinkAssemblies" タスクが予期せず失敗しました。」

**編集 Ajitが指摘したように、PostBuildをtrueに設定し、代わりに「PostBuildEvent」イベントにフックすることで、「LinkAssemblies」タスクエラーを回避しました。

ただし、難読化された DLL は apk ファイルに追加されません。.apk ファイルを解凍し (ファイル拡張子を .zip または .rar に変更するだけ)、内部の DLL ファイルを逆コンパイルすることで、これをテストしました。難読化されていませんでした。

bin/Release フォルダーと obj/Release フォルダーを調べたところ、そこにある DLL は難読化されています。しかし、何らかの理由で、apk の DLL は難読化された DLL ではありません。

おそらく、apk ファイルを作成するプロセスで PostBuildEvent が遅すぎますか?

これが私の現在の設定です:

PostBuild を true に設定します。

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
    <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
  </PropertyGroup>

そして、'AfterCompile' の代わりに 'PostBuildEvent' イベントにフックします。

  <Target Name="PostBuildEvent">
    <Exec Command="&quot;C:\Program Files (x86)\Eziriz\.NET Reactor\dotNET_Reactor.exe&quot; -file &quot;$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)&quot; -targetfile &quot;$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)&quot; -suppressildasm 1 -obfuscation 1 -stringencryption 1 -antitamp 1 -control_flow_obfuscation 1 -flow_level 9 -resourceencryption 1 -mono 1 -exception_handling 1" Condition="'$(ConfigurationName)' == 'Release'" />
  </Target>
</Project>

** 更新 VS 2015 で単純な空の Android プロジェクトを作成して、プロジェクトの複雑さが問題の原因であるかどうかをテストしました (サードパーティ コントロールの使用、ソリューションの 2 番目のプロジェクトとしての共通ユーティリティ ライブラリなど)。「LinkAssemblies」エラーは引き続き発生するため、おそらく私の環境/セットアップです。

私は GitHub アカウントを持っていますが、アプリをダウンロードしていないため、プロジェクト フォルダー構造全体をアップロードできませんでした。そのため、ソリューション全体を圧縮してアップロードしました。ここから入手できます:

https://github.com/nbcruz/TestObfuscate/blob/master/TestObfuscate.zip

GitHub が許可する 25 MB 未満の zip ファイルを作成するには、78 MB のファイルがあったため、obj/Debug フォルダーの内容を削除する必要がありました。

.NET Reactor プロジェクトは、bin\Release\ フォルダー内にあります。手動で実行し、難読化された DLL を bin\Release\TestObfuscate_Secure フォルダー内に作成します。obfuscate.bat ファイルも bin\Release\ フォルダー内にあり、基本的には bin\Release\TestObfuscate_Secure フォルダー内の DLL を bin\Release\ フォルダーにコピーするだけです。この空の単純なソリューションでも、「LinkAssemblies」エラーがスローされます。

于 2016-12-30T19:04:14.043 に答える