外面有什么东西可以混淆吗?我已经尝试过用于Android的Crypto混淆器,当我使用dex2jar解译时,我发现混淆程序和普通程序集没有区别。到目前为止,我已经浏览了以下链接:
http://forums.xamarin.com/discussion/14962/light-obfuscation
发布于 2014-06-16 14:51:37
您在xamarin.com上引用了一篇论坛文章(“轻度混淆”)。在这里,现在我添加了一个关于如何与.NET的Xamarin和Babel混淆的解释。
我将在此重复一遍:
您不需要拥有完整的Visual就可以轻松和舒适地进行混淆。现在,我在(在Windows中)中使用了.NET的Babel。我没有试着让Babel在Mac上运行,也许这是可能的。
因此,这里我将解释如何在Xamarin Studio中混淆您的Android应用程序:
好的一点是,Xamarin使用了MSBuild机制,并且Babel可以集成到MSBuild过程中。
对我来说(安装Babel除外)只需要两个步骤:
(第1步)
使用文本编辑器编辑.csproj文件。Xamarin Studio不能运行。
<Project>
[... All existing stuff ...]
<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=6.4.0.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" />
<Target Name="AfterBuild" Condition=" '$(Configuration)' != 'Debug' ">
<Babel InputFile="$(TargetPath)" OutputFile="$(TargetPath)" GenerateDebug="true"
[...]
RulesFiles="babel.xml"
SuppressIldasm="false" ObfuscateTypes="true" ObfuscateProperties="true" ObfuscateEvents="true" ObfuscateMethods="true"
ObfuscateFields="true" VirtualFunctions="true" FlattenNamespaces="false"
StringEncryption="true"
/>
</Target>
</Project>每当您构建应用程序并且构建模式不是Debug (所以它是发行版)时,这个任务就会被应用。您可以指定一个xml文件,在该文件中可以为混淆过程定义细粒度规则。(例如排除某些类别等)
顺便提一句:经验法则是:将每个类、接口、委托或枚举定义为“内部”,而不是“公共”。默认情况下,必须在程序集之外可见的类型(公共类型)不会被混淆。默认情况下,内部类型将被混淆。我标记为"public“的唯一类是"MainActivity”。
(第2步)
当我开始第一次尝试我的应用程序时,我收到了以下错误消息:
BABEL : error : Could not resolve assembly: 'Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065'我首先无法理解这一点,因为Hello应用程序毫无问题地被混淆了。经过几个小时的研究,我发现了错误的原因。我的活动(我的游戏只有一个活动)具有以下属性:
[Activity(
Label = "The name of my game",
MainLauncher = true,
WindowSoftInputMode = SoftInput.AdjustPan,
ConfigurationChanges = ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.Orientation | ConfigChanges.ScreenSize
)]“标签”和"MainLauncher“并不是问题所在。但"WindowSoftInputMode“和"ConfigurationChanges”是问题所在。
为了修复它,我完全删除了活动(.)属性,并手动将必要的信息添加到.cs文件中。这样,混淆就没有问题了。
您可能想知道为什么Activity属性会导致问题。我意识到,当将该属性应用于带有“ILSpy”和"ConfigurationChanges“的C#活动类时,也会出现问题。所以我认为这不是巴别尔的问题,而是扎马林的问题。原因可能是,虽然"Label“和"MainLauncher”是基本类型(string和bool),但其他两种类型则不是。它们的类型是在Mono.Android.dll中定义的,这似乎是以一种错误的方式引用的。最好的情况是,如果Xamarin删除了编译后的dll的属性,因为它只用于生成步骤中的AndroidManifest.xml。
https://stackoverflow.com/questions/22687397
复制相似问题