C# 如何使用Xamarin Android APK的.Net反应器模糊dll
我是Xamarin Android的新手。我使用Visual Studio 2015社区版创建了一个应用程序。我已将解决方案配置设置为Release 对于模糊处理,我使用.Net Reactor 这就是我试图混淆的方式 1:构建应用程序后,我将转到Bin\Release文件夹 2:混淆App.dll 3:在Bin\Release、Obj\Release和Obj\Release\assemblies中用模糊化的dll替换原始dll 4:转到工具->安卓->发布 但是,当我试图发布时,模糊的dll将被原始dll替换 那么我做错了什么?我必须手动打包apk文件吗。如果是这种情况,我该怎么做呢?1)发布未混淆的应用程序.apk,将其重命名为.zip 2) 将文件Mono.Android.dll从文件夹“assemblies”移到文件夹YourProjectName\bin\Release中 3) 创建一个新的.NET Reactor项目,设置正确的设置(取消选中Anti-ILDASM,并且模糊处理过程重命名反射或序列化中使用的字段。为避免应用程序崩溃,应设置忽略某些类型或方法的排除项。)。 将此项目文件保存到您的文件夹\YourProjectName\bin\Release中 4) 创建文件混淆android.bat,在此处插入代码:C# 如何使用Xamarin Android APK的.Net反应器模糊dll,c#,android,xamarin.android,obfuscation,net-reactor,C#,Android,Xamarin.android,Obfuscation,Net Reactor,我是Xamarin Android的新手。我使用Visual Studio 2015社区版创建了一个应用程序。我已将解决方案配置设置为Release 对于模糊处理,我使用.Net Reactor 这就是我试图混淆的方式 1:构建应用程序后,我将转到Bin\Release文件夹 2:混淆App.dll 3:在Bin\Release、Obj\Release和Obj\Release\assemblies中用模糊化的dll替换原始dll 4:转到工具->安卓->发布 但是,当我试图发布时,模糊的dll将
"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
将此文件移到您的projectname\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>
混淆android.bat
6) 全部保存并重新加载项目
7) 运行发布。我在Xamarin Studio中获得了我的Xamarin Android项目,通过挂接MSBuild与.NET Reactor很好地混淆。将此标记添加到csproj文件的底部:
<Target Name="AfterCompile">
<Exec Command=""C:\Program Files (x86)\Eziriz\.NET Reactor\dotNET_Reactor.exe" -file "$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" -targetfile "$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" -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时,这已经不起作用了。给我一个“错误MSB4018:“链接程序集”任务意外失败。”
**编辑
正如Ajit指出的那样,我通过将PostBuild设置为true并挂接到“PostBuildEvent”事件来克服“LinkAssembly”任务错误
但是,未将模糊化的DLL添加到apk文件中。我通过解压缩.apk文件(只需将文件扩展名更改为.zip或.rar)并反编译其中的DLL文件来测试这一点。它没有被混淆
我查看了bin/Release和obj/Release文件夹,其中的DLL被模糊化了。但由于某些原因,apk中的DLL不是经过模糊处理的DLL
也许PostBuildEvent在创建apk文件的过程中太晚了
以下是我当前的设置:
将后期生成设置为true:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
...
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
</PropertyGroup>
...
真的
然后挂钩到“PostBuildEvent”事件,而不是“AfterCompile”
<Target Name="PostBuildEvent">
<Exec Command=""C:\Program Files (x86)\Eziriz\.NET Reactor\dotNET_Reactor.exe" -file "$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" -targetfile "$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" -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项目,以测试问题是否是由我的项目的复杂性引起的(使用第三方控件、公共实用程序库作为解决方案中的第二个项目等)。“LinkAssembly”错误仍然存在,因此可能是我的环境/设置造成的
我有一个GitHub帐户,但还没有下载应用程序,所以我无法上传整个项目文件夹结构,所以我只是将整个解决方案压缩并上传。可在以下位置获取:
我不得不删除obj/Debug文件夹的内容,因为它有78MB的文件,使zip文件小于25MB,GitHub才允许
.NET Reactor项目位于bin\Release\文件夹中。我手动运行它并创建位于bin\Release\TestObfuscate\u Secure文件夹中的模糊化DLL。obfuscate.bat文件也在bin\Release\文件夹中,它基本上只是将bin\Release\TestObfuscate\u Secure文件夹中的DLL复制到bin\Release\文件夹中。这个空白的简单解决方案仍然会抛出“LinkAssemblies”错误。现在,与xamarin一起使用.net reactor非常容易:
- Xamarin Android(或其他需要的)平台项目的项目文件路径,选中启用
- 要发布的配置
- Net Reactor项目文件复制到您在步骤2中创建的项目文件
构建过程将是MSBuild编译,然后reactor将应用其处理,然后VS将打包/aot为平台部署/分发设置的任何内容。不起作用。当我尝试发布时,它正在用原始dll替换模糊处理的dll。尝试指定文件的绝对链接。当我尝试发布时,项目将“bin\Release\obfuscated.dll”替换为“bin\Release\un obfuscated.dll”。我还替换了“obj\release\”和“obj\release\assemblies”等中的dll。但它们也被替换。这是我的视频指南(俄语):好的。成功了。但我有一个问题。混淆的android.bat和…有什么区别?它可以工作。尝试postbuild事件,并检查它是否在未启用模糊处理的情况下正确编译。Ajit,您可以发布您的csproj xml吗?您在这里使用的是“”还是命令?您是按照Polyariz的建议,手动将模糊处理的DLL插入apk并对apk进行签名,还是使用由生成生成的apk?PropertyGroup Condition=“'$(配置)|$(平台)=='Release | AnyCPU'”>pdbonly true bin\Release\TRACE prompt 4 False SdkOnly“obfuscate.bat”是的,我正在属性组中添加后期生成事件,我正在获取“链接程序集”