您如何发布使用 ConfuserEx 混淆的 Xamarin.Android 应用程序?

How do you Publish a Xamarin.Android App that's Obfuscated with ConfuserEx?

我使用 Xamarin.Forms PCL 创建了一个 Android 应用程序,现在我想在发布它之前对其进行保护。我正在使用 ConfuserEx,尽管我也尝试过 .NET Reactor 并遇到了同样的问题。

我 运行 遇到的问题不在于混淆器本身,它正确地对我的 AppName.dll 文件做了它需要做的事情,将我的混淆 dll 放入文件夹 $(SolutionDir)AppName\AppName.Droid\bin\Confused\AppName.dll.但是,当我在 VisualStudio 15 中通过 AdHoc 发布我的应用程序时,它会发布带有非混淆 dll 的 apk,因此我可以轻松地自行对应用程序进行逆向工程并查看我的所有原始代码。

这是我当前的设置:

if /I "$(ConfigurationName)" == "Release" "$(SolutionDir)ConfuserEx\Code\Confuser.CLI.exe" "$(SolutionDir)NormalObfuscate.crproj"

if /I "$(ConfigurationName)" == "Release" xcopy /Y "$(SolutionDir)AppName\AppName.Droid\bin\Confused\AppName.dll" "$(SolutionDir)\AppName\AppName.Droid\bin\Release\AppName.dll"

if /I "$(ConfigurationName)" == "Release" xcopy /Y "$(SolutionDir)AppName\AppName.Droid\bin\Confused\AppName.dll" "$(SolutionDir)\AppName\AppName.Droid\obj\Release\linksrc\AppName.dll"

完成所有这一切后,我能够卸载 apk 并且混淆的 dll 不在那里,即使它在我的 bin\Release 文件夹中。有谁知道如何让存档管理器在压缩和发布应用程序时使用混淆的 dll?

我最终以一种更迂回的方式让它工作。

首先,在 App.Droid 的项目文件中,在 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 下添加 <AndroidBuildApplicationPackage>true</AndroidBuildApplicationPackage>。这将在您重建项目时生成一个未签名的 APK。

还在项目文件中添加以下行:

<Target Name="Obfuscate" AfterTargets="_CopyIntermediateAssemblies" Condition="'$(Configuration)' == 'Release'">
    <Exec Command="ObfuscateRelease.bat" WorkingDirectory="$(SolutionDir)" />
</Target>

这将在生成过程中 运行 一个名为 ObfuscateRelease.bat 的 bat 文件,您必须将其放在主解决方案文件夹中。

我的 ObfuscateRelease.bat 文件如下所示:

echo running ObfuscateRelease.bat
:: Call Confuser ex to obfuscate your project
START /WAIT "Obfuscating App.dll" "<Path to Confuser>\ConfuserEx\Code\Confuser.CLI.exe" "<Path to Confuser Ex file>\NormalObfuscate.crproj"
:: copy confused files into the release folders so it is packaged into the app
echo starting to copy
copy "<Path to App>\App\App.Droid\bin\Confused\App.dll" "<Path to App>\App\App\App.Droid\bin\Release"
copy "<Path to App>\App\App.Droid\bin\Confused\App.dll" "<Path to App>\App\App.Droid\obj\Release\linksrc"
copy "<Path to App>\App\App.Droid\bin\Confused\App.Droid.dll" "<Path to App>\App\App.Droid\bin\Release"
copy "<Path to App>\App\App.Droid\bin\Confused\App.Droid.dll" "<Path to App>\App\App.Droid\obj\Release\linksrc"
echo finished copying
echo finished ObfuscateRelease.bat

然后重建您的项目。您应该在构建输出中看到回显的行。构建完成后,您将拥有应用程序的签名(带有调试别名)和未签名版本。然后你可以sign the app manually。 (我制作了另一个 bat 文件以更轻松地执行执行此操作的步骤。)