Guest User

Obfuscate anti-debug/ debuggable together

a guest
Sep 16th, 2022
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.86 KB | None | 0 0
  1. <Project>
  2. <PropertyGroup>
  3. <!-- Suppress nuget warnings -->
  4. <NoWarn>$(NoWarn);NU5128;NU5125</NoWarn>
  5. </PropertyGroup>
  6.  
  7. <Target Name="AfterInitialization" AfterTargets="Initialization" Condition="'$(Configuration)' == 'Release'">
  8. <PropertyGroup>
  9. <ObfuscateTest>false</ObfuscateTest>
  10. <GenerateNugetTest>false</GenerateNugetTest>
  11.  
  12. <ProjectParentDirectory>$([System.IO.Directory]::GetParent($(MSBuildProjectDirectory)))</ProjectParentDirectory>
  13. <WebApplicationGuid>{349C5851-65DF-11DA-9384-00065B846F21}</WebApplicationGuid>
  14. <GenerateNuget Condition="$(GenerateNuget) AND $(GenerateNugetTest)">false</GenerateNuget>
  15. <GenerateNuget Condition="$(GenerateNuget) AND $(ProjectTypeGuids.Split(';')[0]) == $(WebApplicationGuid)">false</GenerateNuget>
  16. <GenerateNuget Condition="$(GenerateNuget) AND $(OutputType) == 'WinExe'">false</GenerateNuget>
  17. <GenerateNuget Condition="$(GenerateNuget) AND Exists('$(MSBuildProjectDirectory)\.nugetignore')">false</GenerateNuget>
  18. <Obfuscate Condition="$(Obfuscate) AND $(ObfuscateTest)">false</Obfuscate>
  19. <Obfuscate Condition="$(Obfuscate) AND Exists('$(MSBuildProjectDirectory)\.obfuscateignore')">false</Obfuscate>
  20.  
  21. <ObfuscatedFolder>$(MSBuildThisFileDirectory)\Anti Debug</ObfuscatedFolder>
  22. <ObfuscatedFolder Condition="!$(GenerateNuget)">$(TargetDir)</ObfuscatedFolder>
  23. <ObfuscatorPath>C:\Program Files (x86)\Eziriz\.NET Reactor\dotNET_Reactor.Console.exe</ObfuscatorPath>
  24. <TimestampServer>http://timestamp.digicert.com</TimestampServer>
  25.  
  26. <NugetPath>$(MSBuildThisFileDirectory)nuget.exe</NugetPath>
  27. <NugetOutputFolder>C:\LocalNuget</NugetOutputFolder>
  28.  
  29. <!-- Signing section are turned off now during a very slow with self-certificate certficiates. Enable it later when purchase code signing-->
  30. <!-- -spcfile &quot;$(MSBuildThisFileDirectory)\Certificate.pfx&quot; -pvkpassword &quot;encrypted:OKeTYmOwxNYEsc5YhYllfg==&quot; -sha1_timestamp_server &quot;&quot; -sha256_timestamp_server &quot;$(TimestampServer)&quot; -->
  31. <ObfuscatorParameters>-antitamp 1 -anti_debug 1 -hide_calls 1 -hide_calls_internals 1 -control_flow_obfuscation 1 -flow_level 9 -resourceencryption 1 -antistrong 1 -virtualization 1 -necrobit 1 -mapping_file 1 -mapping_file_overwrite 1 -mapping_filename "&lt;ProtectedAssemblyLocation&gt;\&lt;AssemblyName&gt;.nrmap" </ObfuscatorParameters>
  32. <ObfuscatorParameters Condition="!$(GenerateNuget)">$(ObfuscatorParameters.Replace('-mapping_file 1', ''))</ObfuscatorParameters>
  33. </PropertyGroup>
  34. </Target>
  35.  
  36. <!-- Create Nuspec File -->
  37. <Target Name="GenerateNuspecFile" BeforeTargets="ResolveAssemblyReferences"
  38. Condition="'$(Configuration)' == 'Release' AND $(GenerateNuget)">
  39. <PropertyGroup>
  40. <DotIndex>$(AssemblyName.IndexOf('.'))</DotIndex>
  41. <OurAssembly>$(AssemblyName)</OurAssembly>
  42. <OurAssembly Condition ="$(DotIndex) != -1">$(AssemblyName.SubString(0, $(DotIndex)))</OurAssembly>
  43. </PropertyGroup>
  44.  
  45. <ItemGroup>
  46. <!-- Get all references -->
  47. <MyReference Include="@(ReferenceCopyLocalPaths)" Condition="%(extension) == '.dll'">
  48. <ReferenceDLL>%(identity)</ReferenceDLL>
  49. <ReferenceName>%(filename)</ReferenceName>
  50. <ReferenceExtension>%(extension)</ReferenceExtension>
  51. <IsOurAssembly>$([System.String]::Copy('%(MyReference.ReferenceName)').StartsWith('$(OurAssembly)'))</IsOurAssembly>
  52.  
  53. <FirstDir>$([System.IO.Directory]::GetParent(%(RelativeDir)))</FirstDir>
  54. <LibDir>$([System.IO.Path]::GetFileNameWithoutExtension(%(MyReference.FirstDir)))</LibDir>
  55. <SecondDir>$(FirstDir)</SecondDir>
  56. <SecondDir Condition="$(LibDir) != 'lib'">$([System.IO.Directory]::GetParent(%(MyReference.FirstDir)))</SecondDir>
  57. <VersionDir>$([System.IO.Directory]::GetParent(%(MyReference.SecondDir)))</VersionDir>
  58. <PackageDir>$([System.IO.Directory]::GetParent(%(MyReference.VersionDir)))</PackageDir>
  59. <PackageID>$([System.IO.Path]::GetFileName(%(MyReference.PackageDir)))</PackageID>
  60. <NuspecFile>%(MyReference.VersionDir)\%(MyReference.PackageID).nuspec</NuspecFile>
  61. </MyReference>
  62.  
  63. <!-- Get Non nuget references -->
  64. <ExcludedReference Condition="@(MyReference) != ''" Include="@(MyReference -> '%(PackageID)')" Exclude="@(PackageReference -> '%(identity)')"/>
  65.  
  66. <!-- Get nuget references after exclude non-nuget references -->
  67. <MyPackage Condition="@(MyReference) != ''" Include="@(MyReference -> '%(PackageID)')" Exclude="@(ExcludedReference -> '%(identity)')"/>
  68.  
  69. <!-- Read Nuspec File -->
  70. <NuspecContent Condition="@(MyPackage) != ''" Include="%(MyPackage.NuspecFile)">
  71. <Content>$([System.IO.File]::ReadAllText(%(MyPackage.NuspecFile)))</Content>
  72. <PackageIDRegex>&lt;id&gt;(.*?)&lt;/id&gt;</PackageIDRegex>
  73. <PackageID>$([System.Text.RegularExpressions.Regex]::Match('%(NuspecContent.Content)', '%(NuspecContent.PackageIDRegex)' ))</PackageID>
  74. <PackageID>$([System.String]::Copy('%(NuspecContent.PackageID)').Replace('&lt;id&gt;','').Replace('&lt;/id&gt;', '').Trim())</PackageID>
  75.  
  76. <VersionRegex>&lt;version&gt;(.*?)&lt;/version&gt;</VersionRegex>
  77. <Version>$([System.Text.RegularExpressions.Regex]::Match('%(NuspecContent.Content)', '%(NuspecContent.VersionRegex)' ))</Version>
  78. <Version>$([System.String]::Copy('%(NuspecContent.Version)').Replace('&lt;version&gt;','').Replace('&lt;/version&gt;', '').Trim())</Version>
  79. </NuspecContent>
  80. </ItemGroup>
  81.  
  82. <!-- Generate Nuspec File with dependencies-->
  83. <PropertyGroup>
  84. <NewLine>%0d%0a</NewLine>
  85. <Space2>%20%20</Space2>
  86. <Space4>$(Space2)$(Space2)</Space4>
  87. <Space6>$(Space4)$(Space2)</Space6>
  88. <HasDependencies>false</HasDependencies>
  89. <HasDependencies Condition="@(MyPackage) != ''">true</HasDependencies>
  90.  
  91. <Nuspec>$(Nuspec)&lt;?xml version="1.0" encoding="utf-8"?&gt;$(NewLine)</Nuspec>
  92. <Nuspec>$(Nuspec)&lt;package &gt;$(NewLine)</Nuspec>
  93. <Nuspec>$(Nuspec)$(Space2)&lt;metadata&gt;$(NewLine)</Nuspec>
  94. <Nuspec>$(Nuspec)$(Space4)&lt;id&gt;$id$&lt;/id&gt;$(NewLine)</Nuspec>
  95. <Nuspec>$(Nuspec)$(Space4)&lt;version&gt;$version$&lt;/version&gt;$(NewLine)</Nuspec>
  96. <Nuspec>$(Nuspec)$(Space4)&lt;title&gt;$title$&lt;/title&gt;$(NewLine)</Nuspec>
  97. <Nuspec>$(Nuspec)$(Space4)&lt;authors&gt;$author$&lt;/authors&gt;$(NewLine)</Nuspec>
  98. <Nuspec>$(Nuspec)$(Space4)&lt;owners&gt;$author$&lt;/owners&gt;$(NewLine)</Nuspec>
  99. <Nuspec>$(Nuspec)$(Space4)&lt;requireLicenseAcceptance&gt;false&lt;/requireLicenseAcceptance&gt;$(NewLine)</Nuspec>
  100. <Nuspec>$(Nuspec)$(Space4)&lt;licenseUrl&gt;https://company.com&lt;/licenseUrl&gt;$(NewLine)</Nuspec>
  101. <Nuspec>$(Nuspec)$(Space4)&lt;icon&gt;PackageIcon.png&lt;/icon&gt;$(NewLine)</Nuspec>
  102. <Nuspec>$(Nuspec)$(Space4)&lt;projectUrl&gt;http://company.com&lt;/projectUrl&gt;$(NewLine)</Nuspec>
  103. <Nuspec>$(Nuspec)$(Space4)&lt;description&gt;$description$&lt;/description&gt;$(NewLine)</Nuspec>
  104. <Nuspec>$(Nuspec)$(Space4)&lt;releaseNotes&gt;$description$&lt;/releaseNotes&gt;$(NewLine)</Nuspec>
  105. <Nuspec>$(Nuspec)$(Space4)&lt;copyright&gt;$copyright$&lt;/copyright&gt;$(NewLine)</Nuspec>
  106. <Nuspec>$(Nuspec)$(Space4)&lt;tags&gt;$title$ company company.com&lt;/tags&gt;$(NewLine)</Nuspec>
  107.  
  108. <Nuspec>$(Nuspec)$(Space4)&lt;dependencies&gt;$(NewLine)</Nuspec>
  109. <Nuspec Condition="$(HasDependencies)">$(Nuspec)$(Space6)&lt;group targetFramework=&quot;.NETFramework4.8&quot;&gt;$(NewLine)</Nuspec>
  110. <Nuspec Condition="$(HasDependencies)">$(Nuspec)@(NuspecContent -> '$(Space6)&lt;dependency id=&quot;%(PackageID)&quot; version=&quot;%(Version)&quot;/&gt;', '$(NewLine)')$(NewLine)</Nuspec>
  111. <Nuspec Condition="$(HasDependencies)">$(Nuspec)$(Space6)&lt;/group&gt;$(NewLine)</Nuspec>
  112. <Nuspec>$(Nuspec)$(Space4)&lt;/dependencies&gt;$(NewLine)</Nuspec>
  113.  
  114. <Nuspec>$(Nuspec)$(Space2)&lt;/metadata&gt;$(NewLine)</Nuspec>
  115. <Nuspec>$(Nuspec)$(Space2)&lt;files&gt;$(NewLine)</Nuspec>
  116. <Nuspec>$(Nuspec)$(Space4)&lt;file src="..\**\PackageIcon.png"/&gt;$(NewLine)</Nuspec>
  117. <Nuspec>$(Nuspec)$(Space2)&lt;/files&gt;$(NewLine)</Nuspec>
  118. <Nuspec>$(Nuspec)&lt;/package&gt;$(NewLine)</Nuspec>
  119. </PropertyGroup>
  120. <WriteLinesToFile Lines="$(Nuspec)" File="$(MSBuildProjectDirectory)\$(MSBuildProjectName).nuspec" Overwrite="true"/>
  121. </Target>
  122.  
  123. <Target Name="ExcludeUnusedReferences" AfterTargets="ResolveAssemblyReferences" Condition="'$(Configuration)' == 'Release'">
  124. <ItemGroup>
  125. <!-- Exclude .xml, .pdb files -->
  126. <FilesToExclude Include="@(_ReferenceRelatedPaths)"/>
  127. <!-- Exclude satellites files -->
  128. <FilesToExclude Include="@(ReferenceSatellitePaths)"/>
  129. <ReferenceCopyLocalPaths Remove="@(FilesToExclude)"/>
  130.  
  131. <!-- Exclude .dll nuget packages and take anti-debug obfuscated version -->
  132. <ReferenceCopyLocalPaths Remove="%(MyPackage.ReferenceDLL)" Condition="$(GenerateNuget) AND $(Obfuscate) AND @(MyPackage) != '' AND %(MyPackage.IsOurAssembly)"/>
  133. </ItemGroup>
  134.  
  135. <Message Condition="@(FilesToExclude) != ''" Text="Excluded Files @(FilesToExclude -> '%(FileName)%(Extension)', ', ')"
  136. Importance="high"/>
  137.  
  138. <Error Condition="$(GenerateNuget) AND $(Obfuscate) AND @(MyPackage) != '' AND %(MyPackage.IsOurAssembly) AND !Exists('$(ObfuscatedFolder)\%(MyPackage.ReferenceName)%(MyPackage.ReferenceExtension)')" Text="%(MyPackage.ReferenceName)%(MyPackage.ReferenceExtension) doesn't exists in $(ObfuscatedFolder) folder. Please rebuild references from their solutions."/>
  139. <Copy Condition="$(GenerateNuget) AND $(Obfuscate) AND @(MyPackage) != '' AND %(MyPackage.IsOurAssembly) AND Exists('$(ObfuscatedFolder)\%(MyPackage.ReferenceName)%(MyPackage.ReferenceExtension)')" SourceFiles="$(ObfuscatedFolder)\%(MyPackage.ReferenceName)%(MyPackage.ReferenceExtension)" DestinationFolder="$(TargetDir)"/>
  140. </Target>
  141.  
  142. <Target Name="ExcludeUnusedCopiedfiles" AfterTargets="CopyFilesToOutputDirectory" Condition="'$(Configuration)' == 'Release'">
  143. <!-- Remove *.xml, *.pdb, other unused files that copied from packages-->
  144. <ItemGroup>
  145. <FileToExclude Include="@(_SourceItemsToCopyToOutputDirectory -> '$(TargetDir)\%(FileName)%(Extension)')" Condition="%(Extension) == '.pdb' OR %(Extension) == '.xml'"/>
  146. <_SourceItemsToCopyToOutputDirectory Remove="@(FileToExclude)"/>
  147. </ItemGroup>
  148. <Message Condition="@(FileToExclude) != ''" Text="Excluded Files @(FileToExclude -> '%(FullPath)', ', ')"
  149. Importance="high"/>
  150. </Target>
  151.  
  152. <!-- Obfuscate Libraries and create Nuget package -->
  153. <Target Name="ObfuscateAndCreatePackage" Condition="'$(Configuration)' == 'Release' AND $(OutputType) == 'Library'"
  154. AfterTargets="AfterBuild" DependsOnTargets="AfterInitialization">
  155.  
  156. <Error Condition="$(GenerateNuget) AND !Exists('$(NugetPath)')" Text="Nuget path not found $(NugetPath)"/>
  157. <Error Condition="Exists('$(ObfuscatorPath)') == false" Text="Obfuscator path not found $(ObfuscatorPath)"/>
  158.  
  159. <!-- Obfuscate with anti-debug to Obfuscated folder or \Release path when GenerateNuget enabled -->
  160. <Exec Condition="$(Obfuscate)" Command="&quot;$(ObfuscatorPath)&quot; -file &quot;$(TargetPath)&quot; -targetfile &quot;$(ObfuscatedFolder)\$(TargetFileName)&quot; $(ObfuscatorParameters)"/>
  161.  
  162. <!-- Obfuscate without anti-debug to /Release path for Nuget package for Developers -->
  163. <Exec Condition="$(Obfuscate) AND $(GenerateNuget)" Command="&quot;$(ObfuscatorPath)&quot; -file &quot;$(TargetPath)&quot; -targetfile &quot;$(TargetPath)&quot; $(ObfuscatorParameters.Replace('-anti_debug 1','').Replace('-mapping_file 1', ''))"/>
  164.  
  165. <!-- Copy Package Icon to solution if not exists -->
  166. <Copy Condition="$(GenerateNuget) AND !Exists('$(ProjectParentDirectory)\PackageIcon.png')" SourceFiles="$(MSBuildThisFileDirectory)\PackageIcon.png;$(MSBuildThisFileDirectory)\PackageIcon.psd" DestinationFolder="$(ProjectParentDirectory)"/>
  167.  
  168. <!-- Create Nuget package for developers without anti-debug -->
  169. <Exec Condition="$(GenerateNuget)" Command="&quot;$(NugetPath)&quot; pack &quot;$(ProjectPath)&quot; -Prop Configuration=Release -OutputDirectory &quot;$(NugetOutputFolder)&quot;"/>
  170.  
  171. <!-- Copy end-user anti-debug version from Obfuscated folder to /Release path -->
  172. <Copy Condition="$(Obfuscate) AND $(GenerateNuget)" SourceFiles="$(ObfuscatedFolder)\$(TargetFileName)" DestinationFolder="$(TargetDir)"/>
  173.  
  174. <!-- Remove cached files -->
  175. <Delete Files="$(MSBuildProjectDirectory)\$(MSBuildProjectName).nuspec;$(TargetPath).hash"/>
  176.  
  177. <OnError ExecuteTargets="ObfuscateAndCreatePackageError"/>
  178. </Target>
  179. <Target Name="ObfuscateAndCreatePackageError">
  180. <Delete Files="$(TargetPath)"/>
  181. <Message Text="(Error in ObfuscateAndCreatePackage Target). $(TargetPath) has been removed." Importance="high"/>
  182. </Target>
  183.  
  184. </Project>
Advertisement
Add Comment
Please, Sign In to add comment