如何使用.Net Reactor混淆了Xamarin Android APK

时间:2016-06-11 14:14:18

标签: c# android xamarin.android obfuscation net-reactor

我是Xamarin Android的新手。我使用Visual Studio 2015 Community Edition创建了一个App。我已将解决方案配置设置为Release。

对于混淆,我使用.Net Reactor。

这就是我试图混淆的方式

1:构建应用程序后,我将转到Bin \ Release文件夹

2:混淆App.dll

3:用Bin \ Release,Obj \ Release和Obj \ Release \ assemblies中的模糊dll替换原始dll

4:转到工具 - > Android->发布

但是,当我尝试发布时,混淆的dll将被原始dll替换。

那么我做错了什么?我是否必须手动打包apk文件。如果是这样的话,我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

1)发布未混淆的应用程序.apk,将其重命名为.zip。

2)将文件 Mono.Android.dll 从文件夹“ assemblies ”移到文件夹 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)运行发布。

答案 1 :(得分:1)

我在Xamarin Studio中获得了我的Xamarin Android项目,通过挂钩到MSBuild来使用.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时,这不再起作用了。给我一个&#34;错误MSB4018:&#34; LinkAssemblies&#34;任务意外失败。&#34;

**编辑 我超越了LinkAssemblies&#39;通过将PostBuild设置为true并挂钩到&#39; PostBuildEvent&#39;来解决任务错误事件而不是Ajit所指出的。

但是,混淆的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>

然后挂钩&#39; PostBuildEvent&#39;事件代替&#39; AfterCompile&#39;

  <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项目来测试问题是否可能是由于我的项目的复杂性(使用第三方控件,常用实用程序库作为解决方案中的第二个项目等)引起的。 &#39; LinkAssemblies&#39;错误仍然存​​在,所以它可能是我的环境/设置。

我有一个GitHub帐户但是没有下载该应用程序,所以我无法上传整个项目文件夹结构,所以我只是压缩整个解决方案并上传了。它可以在这里找到:

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

我不得不删除obj / Debug文件夹的内容,因为它有78MB的文件使zip文件低于25MB,GitHub允许。

.NET Reactor项目位于bin \ Release \文件夹中。我手动运行它并创建bin \ Release \ TestObfuscate_Secure文件夹中的混淆DLL。 obfuscate.bat文件也位于bin \ Release \文件夹中,它基本上只是将bin \ Release \ TestObfuscate_Secure文件夹中的DLL复制到bin \ Release \文件夹中。这个空白的简单解决方案仍然会引发LinkAssemblies&#39;错误。

答案 2 :(得分:1)

.xamarin现在已经非常容易使用.net反应器:

  1. 适用于Visual Studio适当版本的反应堆ide安装扩展(菜单Visual Studio)

  2. 在Reactor中的
  3. 中为您的xamarin解决方案创建一个项目。您可以使用菜单“保护主题-> Xamarin”或使用自己的设置。不要忘记添加其他文件(您的Forms共享项目和其他所需文件)。保存项目,记下其路径。

  4. 在Visual Studio ide菜单中的“工具”->“反应器自动化”中设置:

  • 您的Xamarin Android(或其他所需)平台项目的项目文件路径,请选中“启用”。
  • 要发布的配置,
  • 将Net Reactor Project文件复制到您在步骤2中创建的文件。

单击确定,就是这样。

构建过程将是MSBuild编译,然后反应器将应用其处理,然后VS将打包/打包为平台部署/分发设置的所有内容。