试图使用Crypto模糊我的项目打破了它

时间:2013-08-17 01:06:35

标签: c# .net obfuscation

我正在试图通过不同的混淆选项,为了做到这一点,我首先尝试使用Crypto。

以下是我遵循的步骤:

  1. 打开Cypto向导并选择一些选项。
  2. 选择我的解决方案文件。
  3. 完成了向导,我看到的是有一些Dll很好地混淆但是我的项目现在没有建立。我注意到的两件事是我的文件夹中有这个奇怪的.OBPROJ文件,它负责删除我以前的所有旧程序集,然后再对它们进行模糊处理。

    我看到我的18个未能构建的项目中有4个出现以下错误:

    System.IO.FileNotFoundException: File 'C:\Dropbox\CPTFramework_old\CommonLib\obj\Debug\CommonLib.dll' not found.
    

    所有失败的4个项目都非常相似。现在,我不确定它对OBj / Debug文件夹中的dll文件做了什么,但文件绝对不存在。

    我注意到的另一件事是,所有项目,当单独构建时,确实构建良好。所以我的解决方案文件肯定出现了问题。但我无法找出究竟发生了什么变化。

4 个答案:

答案 0 :(得分:3)

我最近也遇到过同样的问题,虽然已经过时,但其他任何人都可以找到答案。

它与您的构建顺序有关。我发现VS中的构建顺序并不总是与实际的构建顺序相对应。我建议在构建失败后查看输出窗口,看看哪些项目是第一个和最后一个(你需要这些项目来配置加密)。显然,不要忘记忽略任何设置项目或项目未在发布模式下构建的项目。

所需要的只是使用正确的第一个和最后一个项目重新配置加密,重新加载您的解决方案并构建它。

答案 1 :(得分:3)

有类似的问题。经过多次努力,找到了解决方案。

在多核处理器中,VS将并行运行构建,这使得Cyrpto混淆器在最后一个项目构建完成之前运行。

在VS 2013中将最大并行项目构建数量设为1 将解决此问题。

TOOLS - 选项.. - 构建并运行

enter image description here

答案 2 :(得分:1)

基本上,错误发生在

1:您曾经指定一个项目是第一个或最后一个,并且在您的解决方案中,这不是或不再是这种情况。 2:你有一个像Newtonsoft.Json那样的依赖

案例1: 在“as previous startup specified”项目中添加依赖项时,我碰巧遇到了同样的问题。我再次运行向导然后将2个项目标记为第一个......

还会发生在几个项目中使用相同的共享dll,其中一个是第一个,另一个是第一个,然后根据编译的内容开始手动更新项目。

理想情况下,不需要设置第一个或最后一个,因为构建顺序已经在解决方案中,但我不在LogicNP工作......

要解决问题,请查看文件在VS的输出中抱怨,因为那是可能具有错误“第一”标志的文件。

然后右键单击项目并从弹出窗口中选择“卸载项目”。再次右键单击卸载的项目,然后选择编辑;或者在文本编辑器中打开.csproj文件。

滚动到文件底部,查找看起来像这样的文字......          假     假     发布| AnyCPU         .. \ CATS.Settings_Release_AnyCPU.obproj              

查看CO_FirstProject和CO_LastProject标记,并确保它们具有正确的True和False选项,因为“向导”不会更新当前配置。

还有一点需要注意,它还会创建一个全新的加密文件,所有旧设置都不见了....

案例2: 你依赖于像Newtonsoft.Json.dll这样的东西,你要做的是1.将该dll复制到一个安全的非构建相关位置。 2.将输出设置选项卡中的dll链接到正确的主程序集 一个。从“以下主装配中的嵌入式相关装配”列表中选择它 湾现在单击“其他依赖项/文件”并添加该文件 Now you should have something like this 如果找到更多我无法编译的情况,我会更新帖子,或者联系我,因为找到这样的错误会非常令人沮丧......

答案 3 :(得分:0)

我刚刚遇到同样的问题,这是基于Crypto帮助文档的答案,它通过抑制其MSBuild集成完全消除了对Crypto的解决方案依赖性。

  • 编辑运行加密向导时选择的第一个和最后一个项目的csproj / vbproj文件:删除之间的所有内容 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '....'"><Import Project="..." /> (包括)在项目文件的末尾。

所以在我的情况下,我在第一个项目中删除了:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <CO_FirstProject>True</CO_FirstProject>
    <CO_LastProject>False</CO_LastProject>
    <CO_Config>Release|AnyCPU</CO_Config>
    <CO_ProjectFilePath>..\.."ALL MY DLL/EXE HERE"
  </PropertyGroup>
  <Import Project="C:\Program Files (x86)\LogicNP Software\Crypto Obfuscator For .Net 2015\CryptoObfuscator.targets" />
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '....' "> 

在我的上一篇:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <CO_FirstProject>False</CO_FirstProject>
    <CO_LastProject>True</CO_LastProject>
    <CO_Config>Release|AnyCPU</CO_Config>
    <CO_ProjectFilePath>..\MySln_Release_AnyCPU.obproj</CO_ProjectFilePath>
  </PropertyGroup>
  <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <CO_ObjFiles Include="ALL MY DLL/EXE HERE">
      <InProject>false</InProject>
    </CO_ObjFiles>
    <CO_BinFiles Include="..ALL MY DLL/EXE HERE">
      <InProject>false</InProject>
    </CO_BinFiles>
  </ItemGroup>
  <Import Project="C:\Program Files (x86)\LogicNP Software\Crypto Obfuscator For .Net 2015\CryptoObfuscator.targets" />

建立并瞧!