【问题标题】:PreEmptive Dotfuscator not working on XamarinPreEmptive Dotfuscator 不适用于 Xamarin
【发布时间】:2018-07-23 15:15:26
【问题描述】:

我正在使用 PreEmptive Obfuscator (Dotfuscator) 来混淆 Xamarin 应用程序。 我的问题是混淆器不会混淆我的项目 dll。当我在混淆后打开 dll 时,我仍然看到可读信息。当我单击构建/重建按钮时,混淆工具会自动打开 - 这证明我正确链接/配置了它。

可能是什么问题?请看下面的截图:

我的项目文件代码:

  <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
   <DotfuscatorXamarinCliPath>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>
    <DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>
    <DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile> 

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{88F1AA1B-4608-40F7-B14D-C7E28099A26E}</ProjectGuid>
    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>TestDotObfuscator</RootNamespace>
    <AssemblyName>TestDotObfuscator</AssemblyName>
    <FileAlignment>512</FileAlignment>
    <AndroidApplication>True</AndroidApplication>
    <AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidUseLatestPlatformSdk>True</AndroidUseLatestPlatformSdk>
    <TargetFrameworkVersion>v6.0</TargetFrameworkVersion>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>True</DebugSymbols>
    <DebugType>Full</DebugType>
    <Optimize>False</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidUseSharedRuntime>True</AndroidUseSharedRuntime>
    <AndroidLinkMode>None</AndroidLinkMode>
    <EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
    <AotAssemblies>false</AotAssemblies>
    <EnableLLVM>false</EnableLLVM>
    <BundleAssemblies>false</BundleAssemblies>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DotfuscatorXamarinEnabled>true</DotfuscatorXamarinEnabled> 
    <DebugSymbols>True</DebugSymbols>
    <DebugType>PdbOnly</DebugType>
    <Optimize>True</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidManagedSymbols>true</AndroidManagedSymbols>
    <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
    <AndroidLinkMode>SdkOnly</AndroidLinkMode>
    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
    <AotAssemblies>false</AotAssemblies>
    <EnableLLVM>false</EnableLLVM>
    <BundleAssemblies>false</BundleAssemblies>
    <AndroidCreatePackagePerAbi>true</AndroidCreatePackagePerAbi>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Core" />
    <Reference Include="Mono.Android" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="DB.cs" />
    <Compile Include="MainActivity.cs" />
    <Compile Include="Resources\Resource.Designer.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="GettingStarted.Xamarin" />
    <None Include="Resources\AboutResources.txt" />
    <None Include="Properties\AndroidManifest.xml" />
    <None Include="Assets\AboutAssets.txt" />
  </ItemGroup>
  <ItemGroup>
    <AndroidResource Include="Resources\layout\Main.axml">
      <SubType>Designer</SubType>
    </AndroidResource>
    <AndroidResource Include="Resources\values\Strings.xml" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Resources\drawable\" />
    <Folder Include="Resources\mipmap-hdpi\" />
    <Folder Include="Resources\mipmap-mdpi\" />
    <Folder Include="Resources\mipmap-xhdpi\" />
    <Folder Include="Resources\mipmap-xxhdpi\" />
    <Folder Include="Resources\mipmap-xxxhdpi\" />
  </ItemGroup>
  <ItemGroup>
    <None Include="DotfuscatorConfig.xml" />
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
        <Target Name="BeforeBuild">
        </Target>
        <Target Name="AfterBuild">
        </Target>
    -->
  <Import Project="..\..\PreEmptive.Dotfuscator.Xamarin.targets" />
</Project>

【问题讨论】:

  • 您在问题中提到“当我单击构建/重建按钮时,混淆工具会自动打开”-您的意思是说,每当您在 Visual 中构建项目时,Dotfuscator 用户界面(在您的屏幕截图中)就会打开工作室?您可以尝试在命令提示符下自己运行C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe,看看是否会打开用户界面或显示文本信息?
  • 是的,它会从命令提示符打开 GUI。
  • 那么 dotfuscatorCLI.exe 实际上不是 CLI,而是 GUI 可执行文件。改名了吗?在同一路径打开dotfuscator.exe 是否也会打开GUI,还是显示文本信息?
  • 是的,dotfuscator.exe 也会打开 GUI。它不加密文本。

标签: xamarin obfuscation dotfuscator


【解决方案1】:

安装 Dotfuscator Community Edition 时(在您的情况下为 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE),dotfuscator.exe 是图形用户界面 (GUI),dotfuscatorCLI.exe 是命令行界面 (CLI)。 (专业版的名称和路径不同。)

根据您编辑的问题和对 cme​​ts 的回复,您似乎以某种方式将 dotfuscatorCLI.exe 替换为 dotfuscator.exe 的副本。当 Visual Studio 构建集成调用 dotfuscatorCLI.exe 时,它希望命令行而不是 GUI 运行。

请卸载,然后重新安装 Dotfuscator 社区版:

  1. 关闭 Visual Studio 2017 的所有实例。
  2. 从“开始”菜单中,打开 Visual Studio 安装程序。
  3. 在“Visual Studio Community 2017”下,选择修改(可能在更多下拉菜单下)。
  4. 选择单个组件选项卡。
  5. 向下滚动到代码工具部分并取消选中PreEmptive Protection - Dotfuscator的复选框。
  6. 点击修改
  7. 卸载完成后,再次打开修改
  8. 选择单个组件选项卡。
  9. 向下滚动到代码工具部分并选中PreEmptive Protection - Dotfuscator复选框。
  10. 点击修改
  11. 安装完成后,打开命令提示符。
  12. 运行:cd "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE"
  13. 运行:dotfuscator.exe
  14. 验证图形用户界面 (GUI) 是否打开。
  15. 返回命令提示符并运行:dotfuscatorCLI.exe
  16. 确认帮助文本显示在命令提示符中,并且图形用户界面 (GUI) 没有打开。

然后,假设您已注册 Community Edition,您应该能够在 Visual Studio 中运行集成 Dotfuscator 的 Xamarin 构建,并且在您这样做时 GUI 应该打开。

免责声明:如 cmets 中所述,我也在 Dotfuscator 团队工作,并以该身份回答此问题。

【讨论】:

  • 我跟着乔的脚步。有效。但我的主要问题仍然存在 - 它不会加密 dll 中的文本。你知道可能的原因吗?
  • 正如我在对 Nathan 的回答的评论中提到的,字符串加密不是社区版的一部分。您需要integrate your Xamarin build with Professional Edition 并使用专业版 GUI 来启用和配置字符串加密。
  • 谢谢乔。我的问题已经得到解答。如何快速订购专业版?一天之内可以拿到吗?
  • @chosenOneThabs 请download an evaluation 开始使用,销售人员将与您联系,他们很乐意帮助您订购完整版。
  • 我正在尝试试用版,当我在发布模式下编译项目时出现此错误:命令 ""C:\Program Files (x86)\PreEmptive Solutions\Dotfuscator Professional版本评估 4.33.0\dotfuscator.exe" /p:InDir="obj\Release\DotfuscatorXamarin\dfin",OutDir="obj\Release\DotfuscatorXamarin\dfout",ReportDir="DotfuscatorReports\Release" "DotfuscatorConfig.xml""以代码 1 退出。
【解决方案2】:

听起来您可能将集成配置为使用 GUI 可执行文件,而不是 CLI(构建)可执行文件。如果您在每次构建 Xamarin 应用程序时都看到 Dotfuscator GUI 出现,那可能就是问题所在。

根据您使用的是 Dotfuscator Community Edition 还是 Dotfuscator Professional,可执行文件名称可能不同。对于 CE,请使用 dotfuscatorCLI.exe。对于 Pro,请使用 dotfuscator.exe

全面披露:我在制造 Dotfuscator 的公司 PreEmptive Solutions 工作。

【讨论】:

  • 这就是我正在使用的。我从 :C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE 引用两个 exe。我遵循了这些说明:dzone.com/articles/…
  • @chosenOneTabs 请查阅Dotfuscator User Guide中的官方说明。特别是,请确保在您的项目文件中将DotfuscatorXamarinCliPath 的值设置为以dotfuscatorCLI.exe 结尾的路径,因为您使用的是Community Edition。 (我也为 PreEmptive 工作。)
  • @JoeSewell 我尝试了此链接上的说明:preemptive.com/dotfuscator/pro/userguide/en/…,但我仍然遇到同样的问题。您是否有我可以下载并复制其配置设置的项目?如果我引用了正确的 exe 文件,为什么我的应用会打开 GUI?
  • @chosenOneThabs There is a sample for Professional Edition on GitHub,您可以参考,注意 CLI 可执行文件的路径和名称与 Community Edition 不同。您还可以尝试暂时重命名 GUI 可执行文件(dotfuscator.exe 文件)并构建以验证您在构建配置中没有引用它。
  • @JoeSewell 我配置我的应用程序的方式与此应用程序的配置方式相同:github.com/preemptive/protected-bugsweeper。唯一的区别是我指向 CLI exe。问题可能与我在 PC 上安装的 Dot Obfustor 版本有关。我通过 Visual Studio 2017 在工具选项下安装了它。如何确认我安装了正确的版本?还是这个版本有bug?
猜你喜欢
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2016-01-21
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多