我已经使用Xamarin.Forms PCL创建了一个Android应用程序,现在我想在发布之前保护它。我使用ConfuserEx,虽然我也尝试过.NET Reactor并遇到了同样的问题。
我遇到的问题不在于混淆器本身,它正确地执行了我需要对AppName.dll文件执行的操作,将我混淆的dll放入文件夹$(SolutionDir)AppName\AppName.Droid\bin\Confused\AppName.dll
。但是,当我通过VisualStudio 15中的AdHoc发布我的应用程序时,它会发布带有非混淆dll的apk,因此我可以轻松地自行对应用程序进行逆向工程并查看我的所有原始代码。
这是我目前的设置:
NormalObfuscate.crproj
的ConfuserEx文件并放入
它在我的解决方案的文件夹中。 if / I" $(ConfigurationName)" =="发布" " $(SolutionDir)ConfuserEx \代码\ Confuser.CLI.exe" " $(SolutionDir)NormalObfuscate.crproj"
if / I" $(ConfigurationName)" =="发布" xcopy / Y" $(SolutionDir)AppName \ AppName.Droid \ bin \ Confused \ AppName.dll" " $(SolutionDir)\ AppName的\ AppName.Droid \ BIN \发布\ AppName.dll"
if / I" $(ConfigurationName)" =="发布" xcopy / Y" $(SolutionDir)AppName \ AppName.Droid \ bin \ Confused \ AppName.dll" " $(SolutionDir)\ AppName的\ AppName.Droid \ OBJ \发布\ linksrc \ AppName.dll"
在完成所有这些之后,我能够卸载apk并且混淆的dll不在那里,即使它在我的bin \ Release文件夹中。在压缩和发布应用程序时,有谁知道如何让存档管理器使用模糊的dll?
答案 0 :(得分:1)
我最终以更迂回的方式开始工作。
首先,在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文件,以便更轻松地执行这样做的步骤。)