关于c#:如何发布被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中。但是,当我去通过Visual Studio 15中的AdHoc发布我的应用程序时,它会发布带有未混淆的dll的apk,因此我可以轻松地自己对应用程序进行反向工程,并查看所有原始代码。

这是我当前的设置:

  • 我创建了名为NormalObfuscate.crproj的ConfuserEx文件,并放入
    它与我的解决方案在文件夹中。
  • 在我的Android项目的属性中,在构建事件下,放置以下构建后事件:

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\
elease\\AppName.dll"

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

  • 我重建了解决方案
  • 我存档了该项目,并通过单击分发然后对apk进行了签名来发布了该项目。

完成所有这些操作后,我能够卸载apk,并且混淆的dll不在其中,即使它位于我的垃圾箱中\\
删除文件夹。有谁知道在压缩和发布应用程序时如何使存档管理器使用混淆的dll?


我最终使它以一种更round回的方式工作。

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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>\
ormalObfuscate.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\
elease"

copy"<Path to App>\\App\\App.Droid\\bin\\Confused\\App.dll""<Path to App>\\App\\App.Droid\\obj\
elease\\linksrc"

copy"<Path to App>\\App\\App.Droid\\bin\\Confused\\App.Droid.dll""<Path to App>\\App\\App.Droid\\bin\
elease"

copy"<Path to App>\\App\\App.Droid\\bin\\Confused\\App.Droid.dll""<Path to App>\\App\\App.Droid\\obj\
elease\\linksrc"

echo finished copying
echo finished ObfuscateRelease.bat

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