<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Skater</title>
    <description>The latest articles on DEV Community by Skater (@rustemsoft).</description>
    <link>https://dev.to/rustemsoft</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F830209%2Fbf269d5a-47d2-4a8c-a003-ff97d1d4b02e.jpeg</url>
      <title>DEV Community: Skater</title>
      <link>https://dev.to/rustemsoft</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rustemsoft"/>
    <language>en</language>
    <item>
      <title>How to Never Manually Obfuscate a .NET Assembly Again (Visual Studio CLI Guide)</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Mon, 19 Oct 2026 03:49:00 +0000</pubDate>
      <link>https://dev.to/rustemsoft/how-to-never-manually-obfuscate-a-net-assembly-again-visual-studio-cli-guide-4c9n</link>
      <guid>https://dev.to/rustemsoft/how-to-never-manually-obfuscate-a-net-assembly-again-visual-studio-cli-guide-4c9n</guid>
      <description>&lt;p&gt;If you are still opening a desktop GUI, hunting for your release DLL, and clicking an "Obfuscate" button every time you want to publish a C# or VB.NET application, you are leaving your CI/CD pipeline vulnerable to simple human error.&lt;/p&gt;

&lt;p&gt;In my day-to-day work as a Senior Software Developer building tools at Rustemsoft, I constantly see teams accidentally ship unprotected intermediate language (IL) simply because someone forgot a manual step. When we designed Opaquer .NET Obfuscator as the successor to Skater, one of the primary goals was to make protection invisible to the developer's daily workflow.&lt;/p&gt;

&lt;p&gt;The easiest way to achieve this zero-touch security is by wiring Opaquer's Command Line Interface (CLI) directly into your Visual Studio Post-Build events. Here is the hands-on guide to setting it up. &lt;/p&gt;

&lt;p&gt;The Concept: In-Place Overwrites&lt;br&gt;
The trick to seamless automation is overwriting the compiler's output immediately. By telling Opaquer to read the newly built assembly and write the obfuscated version back to the exact same file path, the rest of your pipeline (testing, packaging, publishing) doesn't need to be updated. It just blindly consumes the protected binary. &lt;/p&gt;

&lt;p&gt;Note: You will need the Pro or Enterprise edition of Opaquer for this, as the free Basic edition only includes the GUI, not the CLI engine. &lt;/p&gt;

&lt;p&gt;Step 1: The One Visual Studio Setting You Must Change&lt;br&gt;
Before adding any scripts, there is a crucial "gotcha." Opaquer modifies your assemblies in place. If Visual Studio is configured to build multiple projects in parallel, another project in your solution might try to lock or read your DLL while Opaquer is right in the middle of rewriting it. &lt;/p&gt;

&lt;p&gt;To prevent these file-lock exceptions, you must restrict parallel execution. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to Tools → Options → Projects and Solutions → Build and Run. &lt;/li&gt;
&lt;li&gt;Change the Maximum number of parallel project builds to 1. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 2: The Post-Build Command&lt;br&gt;
Right-click your project in Solution Explorer, head to Properties, and find the Build Events tab. In the Post-build event command line box, you are going to drop in the following script: &lt;/p&gt;

&lt;p&gt;DOS&lt;br&gt;
&lt;code&gt;if "$(ConfigurationName)" == "Release" (&lt;br&gt;
  "C:\Program Files (x86)\RustemSoft\Opaquer\Opaquer.exe" ^&lt;br&gt;
    -SOURCE="$(TargetPath)" ^&lt;br&gt;
    -OUTPUT="$(TargetPath)" ^&lt;br&gt;
    -KEY="$(ProjectDir)KeyFile.snk" ^&lt;br&gt;
    -WRITELOG="$(TargetDir)Opaquer.log" ^&lt;br&gt;
    -ALLPRIVATE ^&lt;br&gt;
    -CONCEALSTRINGS ^&lt;br&gt;
    -FLOW&lt;br&gt;
)&lt;/code&gt;&lt;br&gt;
What is happening here?&lt;/p&gt;

&lt;p&gt;• if "$(ConfigurationName)" == "Release": We only run this on Release builds. You don't want to slow down your local Debug loops with heavy control-flow obfuscation. &lt;/p&gt;

&lt;p&gt;• -SOURCE and -OUTPUT: Both point to $(TargetPath), executing the in-place overwrite we talked about earlier. &lt;/p&gt;

&lt;p&gt;• -KEY: If your assembly is strong-named, obfuscation breaks the signature. Pointing to your .snk file ensures Opaquer re-signs it on the way out. &lt;/p&gt;

&lt;p&gt;• -ALLPRIVATE, -CONCEALSTRINGS, -FLOW: This combo enforces private member renaming, string encryption, and control-flow mangling without needing to reference a saved GUI profile. &lt;/p&gt;

&lt;p&gt;Step 3: Making it CI/CD Friendly&lt;br&gt;
While pasting the command directly into Visual Studio works, I always recommend extracting it into a .bat file for production codebases. This keeps your .csproj files clean, makes the obfuscation logic easily version-controlled, and allows headless agents (like Azure DevOps or GitHub Actions) to trigger it easily. &lt;/p&gt;

&lt;p&gt;Create an obfuscate.bat file in your project directory: &lt;/p&gt;

&lt;p&gt;DOS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;@echo &lt;span class="na"&gt;off&lt;/span&gt;
&lt;span class="nb"&gt;setlocal&lt;/span&gt;

&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="kd"&gt;OPAQUER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files (x86)\RustemSoft\Opaquer\Opaquer.exe"&lt;/span&gt;
&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="kd"&gt;ASSEMBLY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="vm"&gt;%~dp0&lt;/span&gt;&lt;span class="kd"&gt;bin&lt;/span&gt;\Release\net8.0\MyApp.dll
&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="kd"&gt;KEYFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="vm"&gt;%~dp0&lt;/span&gt;&lt;span class="kd"&gt;KeyFile&lt;/span&gt;.snk
&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="kd"&gt;LOGFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="vm"&gt;%~dp0&lt;/span&gt;&lt;span class="kd"&gt;bin&lt;/span&gt;\Release\net8.0\Opaquer.log

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="kd"&gt;Obfuscating&lt;/span&gt; &lt;span class="nv"&gt;%ASSEMBLY%&lt;/span&gt; ...
&lt;span class="nv"&gt;%OPAQUER%&lt;/span&gt; &lt;span class="na"&gt;-SOURCE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;%ASSEMBLY%&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="na"&gt;-OUTPUT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;%ASSEMBLY%&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="na"&gt;-KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;%KEYFILE%&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="na"&gt;-WRITELOG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;%LOGFILE%&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="na"&gt;-ALLPRIVATE -CONCEALSTRINGS -FLOW

&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;%ERRORLEVEL%&lt;/span&gt; &lt;span class="ow"&gt;neq&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="kd"&gt;Opaquer&lt;/span&gt; &lt;span class="kd"&gt;failed&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="k"&gt;exit&lt;/span&gt; &lt;span class="kd"&gt;code&lt;/span&gt; &lt;span class="nv"&gt;%ERRORLEVEL%&lt;/span&gt;
  &lt;span class="k"&gt;exit&lt;/span&gt; &lt;span class="na"&gt;/b &lt;/span&gt;&lt;span class="nv"&gt;%ERRORLEVEL%&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="kd"&gt;Done&lt;/span&gt;. &lt;span class="kd"&gt;Log&lt;/span&gt; &lt;span class="kd"&gt;written&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;%LOGFILE%&lt;/span&gt;
&lt;span class="nb"&gt;endlocal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, in your Visual Studio Post-Build event, just call the script: call "$(ProjectDir)obfuscate.bat" &lt;/p&gt;

&lt;p&gt;A Quick Warning on Setup Projects&lt;br&gt;
If you are utilizing Visual Studio Setup/Deployment projects to build MSI installers, be careful. Relying on the "Primary Output" of a project can sometimes cause the setup builder to snatch the assembly before the post-build obfuscation finishes. &lt;/p&gt;

&lt;p&gt;To fix this, either obfuscate your application project completely before building the installer, or attach a Pre-Build event directly to the deployment project itself so the binaries are secured right before packaging. &lt;/p&gt;

&lt;p&gt;By pushing this logic into your build pipeline, you guarantee that whatever code leaves your machine is encrypted, protected, and ready for production.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>obfuscator</category>
      <category>csharp</category>
      <category>programming</category>
    </item>
    <item>
      <title>Stop Letting Obfuscation Break Your Reflection Code: A Practical .NET Survival Guide</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Mon, 05 Oct 2026 02:50:54 +0000</pubDate>
      <link>https://dev.to/rustemsoft/stop-letting-obfuscation-break-your-reflection-code-a-practical-net-survival-guide-11je</link>
      <guid>https://dev.to/rustemsoft/stop-letting-obfuscation-break-your-reflection-code-a-practical-net-survival-guide-11je</guid>
      <description>&lt;p&gt;You've finished your .NET application, run it through an obfuscator, and everything looks great.&lt;br&gt;
Then production starts throwing exceptions:&lt;br&gt;
TypeLoadException&lt;br&gt;
MissingMethodException&lt;br&gt;
JsonSerializationException&lt;br&gt;
Nothing changed in your business logic. Unit tests passed before protection. Yet the obfuscated build suddenly behaves differently.&lt;br&gt;
If this sounds familiar, you're probably dealing with one of the most common .NET protection pitfalls: reflection-aware code colliding with aggressive symbol renaming. The source article discusses this exact challenge and explains that reflection-dependent applications require special handling during obfuscation. &lt;/p&gt;




&lt;p&gt;The Day Reflection Meets Obfuscation&lt;br&gt;
Most obfuscators protect applications by renaming classes, methods, properties, and fields.&lt;br&gt;
For example:&lt;br&gt;
MyApp.DataProcessor&lt;br&gt;
might become:&lt;br&gt;
a.a&lt;br&gt;
and&lt;br&gt;
ProcessData()&lt;br&gt;
might become:&lt;br&gt;
b()&lt;br&gt;
Direct method calls usually continue working because the compiler and obfuscator maintain the internal references. The source article explains that standard .NET calls are linked through metadata and can be updated consistently during obfuscation. &lt;br&gt;
Reflection doesn't have that luxury.&lt;br&gt;
Reflection often depends on textual names at runtime.&lt;/p&gt;




&lt;p&gt;A Real-World Example&lt;br&gt;
Imagine a plugin system:&lt;br&gt;
Type pluginType =&lt;br&gt;
    Type.GetType("MyApp.DataProcessor");&lt;br&gt;
object plugin =&lt;br&gt;
    Activator.CreateInstance(pluginType);&lt;br&gt;
Before obfuscation:&lt;br&gt;
Lookup Target:&lt;br&gt;
"MyApp.DataProcessor"&lt;br&gt;
Metadata:&lt;br&gt;
"MyApp.DataProcessor"&lt;br&gt;
Result:&lt;br&gt;
Success&lt;br&gt;
After aggressive renaming:&lt;br&gt;
Lookup Target:&lt;br&gt;
"MyApp.DataProcessor"&lt;br&gt;
Metadata:&lt;br&gt;
"a.a"&lt;br&gt;
Result:&lt;br&gt;
Failure&lt;br&gt;
The runtime still searches for the original name, but that name no longer exists in assembly metadata. The analyzed document specifically identifies Type.GetType() and related reflection APIs as common failure points after renaming. &lt;/p&gt;




&lt;p&gt;Reflection Is Everywhere, Even When You Don't Think It Is&lt;br&gt;
Many developers assume reflection is limited to specialized frameworks.&lt;br&gt;
In reality, it powers a surprising amount of modern .NET infrastructure.&lt;br&gt;
Applications frequently rely on:&lt;br&gt;
• Dynamic plugin loading&lt;br&gt;
• Dependency injection frameworks&lt;br&gt;
• JSON serialization&lt;br&gt;
• Runtime factory patterns&lt;br&gt;
• WPF bindings and XAML&lt;br&gt;
• Assembly scanning&lt;br&gt;
• Custom attribute discovery&lt;br&gt;
The source article highlights reflection APIs such as Type.GetType(), Activator.CreateInstance(), GetMethod(), and dynamic assembly loading as areas that should be reviewed before obfuscation. &lt;/p&gt;




&lt;p&gt;The Wrong Solution: Disable Obfuscation Everywhere&lt;br&gt;
A common reaction is:&lt;br&gt;
"Reflection is breaking. Let's turn off obfuscation."&lt;br&gt;
That fixes the runtime issue but removes much of the protection you were trying to achieve.&lt;br&gt;
A better approach is understanding which identifiers form part of your runtime contract.&lt;br&gt;
Only those identifiers need to remain stable.&lt;br&gt;
Everything else can still be heavily protected.&lt;/p&gt;




&lt;p&gt;Think in Terms of Contracts&lt;br&gt;
Here's a useful way to evaluate your codebase:&lt;br&gt;
Public Runtime Contracts&lt;br&gt;
These are names your application actively searches for:&lt;br&gt;
GetMethod("ProcessData")&lt;br&gt;
Type.GetType("MyApp.DataProcessor")&lt;br&gt;
These identifiers may need to stay unchanged.&lt;br&gt;
Internal Implementation&lt;br&gt;
This is the actual business logic:&lt;br&gt;
public void ProcessData(string payload)&lt;br&gt;
{&lt;br&gt;
    // processing logic&lt;br&gt;
}&lt;br&gt;
The name may remain visible, but the implementation can still be protected using control-flow transformations, string encryption, anti-tamper features, and other techniques. The source article notes that excluding names from renaming does not prevent additional protection layers from being applied. &lt;/p&gt;




&lt;p&gt;How to Find Reflection Risks Before They Become Bugs&lt;br&gt;
Before obfuscating a project, audit the codebase for patterns like:&lt;br&gt;
Type.GetType(&lt;br&gt;
GetMethod(&lt;br&gt;
GetProperty(&lt;br&gt;
Activator.CreateInstance(&lt;br&gt;
Assembly.GetType(&lt;br&gt;
Assembly.LoadFrom(&lt;br&gt;
Each occurrence should raise a question:&lt;br&gt;
Will this lookup still succeed if the target name changes?&lt;br&gt;
If the answer is no, that member should become part of your protection strategy.&lt;br&gt;
The source article recommends identifying reflection-dependent members before configuring obfuscation rules. &lt;/p&gt;




&lt;p&gt;Serialization Can Fail Too&lt;br&gt;
Many teams first encounter this issue through JSON processing rather than explicit reflection code.&lt;br&gt;
For example:&lt;br&gt;
public class Customer&lt;br&gt;
{&lt;br&gt;
    public string FirstName { get; set; }&lt;br&gt;
}&lt;br&gt;
If a serializer expects:&lt;br&gt;
{&lt;br&gt;
  "firstName": "Alice"&lt;br&gt;
}&lt;br&gt;
but property names have been aggressively renamed, deserialization can fail.&lt;br&gt;
The analyzed article identifies JSON serialization as another common metadata-related problem after obfuscation. &lt;/p&gt;




&lt;p&gt;WPF Developers Face an Additional Challenge&lt;br&gt;
WPF introduces another metadata dependency layer.&lt;br&gt;
XAML references classes, controls, resources, and bindings using names that must remain synchronized with compiled metadata.&lt;br&gt;
The source article explains that WPF applications often require dedicated XAML/BAML-aware processing to prevent runtime parsing failures after obfuscation. &lt;br&gt;
If you're protecting a desktop application, always include XAML validation in your testing process.&lt;/p&gt;




&lt;p&gt;The Production Checklist I Recommend&lt;br&gt;
Before shipping an obfuscated build:&lt;br&gt;
✅ Scan for Reflection&lt;br&gt;
Review every runtime type and method lookup.&lt;br&gt;
✅ Define Exclusions Carefully&lt;br&gt;
Preserve only the identifiers required by runtime contracts.&lt;br&gt;
✅ Keep Strong Protection Enabled&lt;br&gt;
Continue using:&lt;br&gt;
• String encryption&lt;br&gt;
• Control-flow protection&lt;br&gt;
• Anti-tamper mechanisms&lt;br&gt;
• Anti-decompilation features&lt;br&gt;
The source article specifically recommends keeping string encryption and control-flow protection active even when selected names are excluded from renaming. &lt;br&gt;
✅ Test the Obfuscated Binary&lt;br&gt;
Not the original assembly.&lt;br&gt;
Not the Debug build.&lt;br&gt;
Test the protected output you'll actually distribute.&lt;br&gt;
The analyzed article recommends running validation and integration testing against obfuscated assemblies before release. &lt;/p&gt;




&lt;p&gt;A Simple Rule to Remember&lt;br&gt;
If the runtime must discover a component by name, that name is no longer an implementation detail.&lt;br&gt;
It's a contract.&lt;br&gt;
Successful .NET protection isn't about hiding every identifier. It's about preserving the metadata your application needs while aggressively hardening the code that attackers want to understand.&lt;br&gt;
When you treat reflection targets as contracts instead of obfuscation candidates, you can keep dynamic loading, serialization, plugins, and WPF functionality working while still gaining meaningful resistance against reverse engineering. The source article demonstrates this selective-protection philosophy as the recommended solution for reflection-dependent .NET applications. &lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>obfuscator</category>
      <category>codeprotection</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Obfuscating an Entire .NET Assembly</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Mon, 30 Jun 2025 02:59:53 +0000</pubDate>
      <link>https://dev.to/rustemsoft/obfuscating-an-entire-net-assembly-33pn</link>
      <guid>https://dev.to/rustemsoft/obfuscating-an-entire-net-assembly-33pn</guid>
      <description>&lt;p&gt;To fully protect your .NET application, you'll want to apply comprehensive obfuscation to the entire assembly. Here's how to do this with Skater .NET Obfuscator:&lt;/p&gt;

&lt;p&gt;Complete Obfuscation Process&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Load Your Assembly
Open Skater .NET Obfuscator&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Go to File → Open and select your .exe or .dll file&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enable Full Obfuscation Features
In the settings panel, enable all relevant obfuscation techniques:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;plaintext&lt;br&gt;
☑ Control Flow Obfuscation&lt;br&gt;
☑ Renaming Obfuscation (all classes/methods/properties)&lt;br&gt;
☑ String Encryption&lt;br&gt;
☑ Resource Encryption&lt;br&gt;
☑ Anti-Debug Protection&lt;br&gt;
☑ Anti-Tamper Protection&lt;br&gt;
☑ IL Code Protection&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure Aggressive Settings
For maximum protection:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set renaming to "Unprintable" or "Unicode" mode&lt;/p&gt;

&lt;p&gt;Enable "Deep Control Flow" obfuscation&lt;/p&gt;

&lt;p&gt;Apply "Maximum" encryption level to strings/resources&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Exclusion Handling (If Needed)
If certain elements must remain unobfuscated (e.g., public API methods):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use the "Exclusions" tab&lt;/p&gt;

&lt;p&gt;Add specific classes/methods to the exclusion list&lt;/p&gt;

&lt;p&gt;Mark them with [Obfuscation(Exclude=true)] in your source code&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run Full Obfuscation
Click the "Obfuscate" button and save the output to a new file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Command Line Version for Full Obfuscation&lt;br&gt;
bash&lt;br&gt;
SkaterConsole.exe YourApp.exe /controlflow:aggressive /rename:advanced /strings /resources /antitamper /anticrack /out:ProtectedApp.exe&lt;br&gt;
Post-Obfuscation Verification Steps&lt;br&gt;
Test the obfuscated assembly thoroughly for functionality&lt;/p&gt;

&lt;p&gt;Verify protection using decompilers like:&lt;/p&gt;

&lt;p&gt;dnSpy&lt;/p&gt;

&lt;p&gt;ILSpy&lt;/p&gt;

&lt;p&gt;dotPeek&lt;/p&gt;

&lt;p&gt;Check that:&lt;/p&gt;

&lt;p&gt;All meaningful names are gone&lt;/p&gt;

&lt;p&gt;Control flow appears complex&lt;/p&gt;

&lt;p&gt;Strings are encrypted&lt;/p&gt;

&lt;p&gt;Resources are not easily extractable&lt;/p&gt;

&lt;p&gt;Best Practices for Full Assembly Obfuscation&lt;br&gt;
Maintain debug symbols (PDB files) for your unobfuscated version&lt;/p&gt;

&lt;p&gt;Implement strong naming before obfuscation if your assembly is signed&lt;/p&gt;

&lt;p&gt;Combine with runtime protections like license checks&lt;/p&gt;

&lt;p&gt;Update regularly as new versions of Skater may offer improved techniques&lt;/p&gt;

&lt;p&gt;Consider layered protection (Skater + another obfuscator for critical components)&lt;/p&gt;

&lt;p&gt;Remember that while obfuscation makes reverse engineering harder, determined attackers may still decompile your code. Use obfuscation as part of a broader protection strategy.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What are the different obfuscation techniques used in .NET?</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Wed, 01 Jan 2025 23:29:09 +0000</pubDate>
      <link>https://dev.to/rustemsoft/what-are-the-different-obfuscation-techniques-used-in-net-56gd</link>
      <guid>https://dev.to/rustemsoft/what-are-the-different-obfuscation-techniques-used-in-net-56gd</guid>
      <description>&lt;p&gt;In .NET, obfuscation employs various techniques to make code more challenging to reverse engineer by obscuring its logic and structure. Common techniques include control flow obfuscation, variable and method renaming, string encryption, data transformation, dummy code insertion, dependency merging, advanced overload renaming, address obfuscation, and code compression.&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Points About These Techniques:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Control Flow Obfuscation:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Alters the program's logical structure by introducing unnecessary loops, conditional statements, and jumps, complicating the analysis of the code's execution path.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Renaming:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Replaces meaningful names of variables and methods with random or nonsensical ones to obscure their purpose.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;String Encryption:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Encrypts sensitive strings in the code, requiring runtime decryption to reveal their original values.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Transformation:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Applies mathematical operations or transformations to data, making it difficult to interpret directly.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dummy Code Insertion:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Adds irrelevant code snippets that do not affect functionality but significantly complicate reverse engineering efforts.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dependency Merging:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Combines multiple assemblies into one, simplifying the obfuscation process and reducing entry points for analysis.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Overload Renaming:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Assigns identical names to methods with different parameter types, further confusing the structure of the code.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Address Obfuscation:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Modifies memory addresses to obscure specific code locations and hinder analysis.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Compression:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Reduces the size of the compiled assembly by removing superfluous information while maintaining functionality, making the code harder to read.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://skaterpro.net" rel="noopener noreferrer"&gt;Skater .NET Obfuscator&lt;/a&gt; implements all of the techniques list above. Main features of Skater to handle common .NET obfuscation tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prohibits reverse engineering&lt;/li&gt;
&lt;li&gt;Obfuscated application usually is not recompilable&lt;/li&gt;
&lt;li&gt;Processes any .NET application, executable or assembly&lt;/li&gt;
&lt;li&gt;Encrypts string constants&lt;/li&gt;
&lt;li&gt;Compatible with any .NET framework from 1.0 through 4.8. It supports latest .NET 9&lt;/li&gt;
&lt;li&gt;Control flow obfuscation stops decompilers and deobfuscators&lt;/li&gt;
&lt;li&gt;Scrambles class names, method names, field names etc.&lt;/li&gt;
&lt;li&gt;Protects XAML (baml) files in WPF application&lt;/li&gt;
&lt;li&gt;It works well on both (x86 and x64) platforms&lt;/li&gt;
&lt;li&gt;Provides .NET Licensing features&lt;/li&gt;
&lt;li&gt;Implements .NET Code Extension for small .NET applications protection&lt;/li&gt;
&lt;li&gt;Implements assemblies linking; linkage unites .NET assemblies into a single dll or exe&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Important Considerations When Using Obfuscation:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Balancing Protection and Performance:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Excessive obfuscation can negatively impact application performance, so it is important to strike an appropriate balance.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Not a Complete Security Solution:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Obfuscation alone cannot fully protect your code; determined attackers with advanced skills can still reverse engineer it. It should be used as part of a comprehensive security strategy.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Impact on Debugging:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Obfuscated code is more challenging to debug. To mitigate this, consider maintaining a separate, unobfuscated build for debugging purposes.  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By combining these techniques thoughtfully and considering their trade-offs, obfuscation can effectively enhance the security of .NET applications while minimizing performance and development challenges.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Obfuscation is not feasible for certain .NET assemblies</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Mon, 30 Dec 2024 03:21:43 +0000</pubDate>
      <link>https://dev.to/rustemsoft/obfuscation-is-not-feasible-for-certain-net-assemblies-pjd</link>
      <guid>https://dev.to/rustemsoft/obfuscation-is-not-feasible-for-certain-net-assemblies-pjd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqg1mz97uaoffemg0fpsf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqg1mz97uaoffemg0fpsf.png" alt="Image description" width="670" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, code obfuscation is impossible for certain .NET assemblies.&lt;/p&gt;

&lt;p&gt;There are several possible reasons for this issue. One possibility is that the assembly you want to protect has internal component referencing problems. This can occur when some referenced DLLs or NuGet packages have coupling issues within a project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmd2uk9sn9nr1qnekgml1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmd2uk9sn9nr1qnekgml1.png" alt="Image description" width="440" height="528"&gt;&lt;/a&gt;&lt;br&gt;
In earlier versions of the .NET Framework (1.0 through 4.8), assemblies did not encounter such issues because the .NET compiler would halt the build process with a compilation error if there were unresolved references, preventing the creation of the final .exe or .dll. However, in modern .NET versions, the compilers no longer enforce strict reference checks, allowing the final assembly to be compiled even if some binary file references are missing or inaccurate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uxluxb9gghezteu3ohc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uxluxb9gghezteu3ohc.png" alt="Image description" width="721" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this scenario, the Skater Obfuscator code compiler is unable to identify all external components referenced by the assembly, causing the obfuscation process to fail. The assembly includes implicitly defined references to external components specified in the project to which it belongs.&lt;/p&gt;

&lt;p&gt;To proceed, you have the following options:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Press 1&lt;/strong&gt; in the popup window to disregard these broken references. This will allow the obfuscation to continue, but the resulting assembly may contain internal errors and may not function correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Press 2&lt;/strong&gt; to proceed with obfuscation 'as is.' Be aware that the process might fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Press Cancel&lt;/strong&gt; to terminate the process.&lt;/p&gt;

&lt;p&gt;In conclusion, Skater .NET Obfuscator navigates around this obstacle by excluding the compiler warning from the obfuscated code. However, we highly recommend addressing these issues by making the necessary corrections to your project before attempting to obfuscate the assembly.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>obfuscation</category>
      <category>programming</category>
    </item>
    <item>
      <title>I'm trying to obfuscate an .exe file obtained after compiling my .NET 8 project with the "produce a single file" option.</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Sun, 01 Sep 2024 18:08:10 +0000</pubDate>
      <link>https://dev.to/rustemsoft/im-trying-to-obfuscate-an-exe-file-obtained-after-compiling-my-net-8-project-with-the-produce-a-single-file-option-2mgl</link>
      <guid>https://dev.to/rustemsoft/im-trying-to-obfuscate-an-exe-file-obtained-after-compiling-my-net-8-project-with-the-produce-a-single-file-option-2mgl</guid>
      <description>&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;br&gt;
I'm trying to obfuscate an .exe file obtained after compiling my .NET 8 project with the "produce a single file" option, the problem is that no obfuscator works on it, I wanted to know if anyone knows why?&lt;br&gt;
&lt;strong&gt;Answer:&lt;/strong&gt;&lt;br&gt;
Skater Obfuscator protects .NET 8 assemblies. It supports .NET 8 projects where the publish output is a DLL file (Framework-dependent deployment). When the publish output is an EXE file that calls .NET 8.0 DLL (Self-contained deployment) the final DLL has to be obfuscated as well. There are two types of .NET 8.0 apps can be built:&lt;/p&gt;

&lt;p&gt;Framework-dependent deployment. As the name implies, framework-dependent deployment (FDD) relies on the presence of a shared system-wide version of .NET 8 on the target system. Because .NET 8 is already present, your app is also portable between installations of .NET 8. Your app contains only its own code and any third-party dependencies that are outside of the .NET 8.0 libraries. FDDs contain .dll files that can be launched by using the dotnet utility from the command line. For example, dotnet app.dll runs an application named app.&lt;/p&gt;

&lt;p&gt;Self-contained deployment. Unlike FDD, a self-contained deployment (SCD) doesn't rely on the presence of shared components on the target system. All components, including both the .NET 8 libraries and the .NET 8 runtime, are included with the application and are isolated from other .NET 8 applications. SCDs include an executable (such as app.exe on Windows platforms for an application named app), which is a renamed version of the platform-specific .NET 6 host, and a .dll file (such as app.dll), which is the actual application. The .NET 8 app development is following the Self-Contained Deployment (SCD) concept. Let’s take a look at what the final binaries were compiled in the output folder of the WindowsFormsApp project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdui10plqzvv4dzaxw657.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdui10plqzvv4dzaxw657.png" alt="Image description" width="624" height="368"&gt;&lt;/a&gt;&lt;br&gt;
You can see two main assemblies presented inside the output folder: WindowsFormsApp.exe WindowsFormsApp.dll This pair of files represents the .NET 8 Self-Contained Deployment (SCD) concept. The final output for that Windows Forms app includes the WindowsFormsApp.exe executable, which is a renamed version of the platform-specific .NET 8 host, and the WindowsFormsApp.dll library file, which is the actual application. So, the WindowsFormsApp.exe executable is the app’s starter with necessary predefined .NET 8 utilities compiled inside the exe. Ideally the exe file is cross-platform executable. The executable is binary file compiled in machine codes. This file is cannot be decompiled and do not need to be obfuscated.&lt;/p&gt;

&lt;p&gt;Finally, you have to concentrate on WindowsFormsApp.dll assembly protection. &lt;a href="https://www.linkedin.com/pulse/skater-net-obfuscator-protects-your-8-projects-skater-net-obfuscator-4vutc/" rel="noopener noreferrer"&gt;Read instructions how Skater secures .NET 8 source codes &lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why .NET developers have to obfuscate source codes?</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Sun, 25 Aug 2024 16:24:19 +0000</pubDate>
      <link>https://dev.to/rustemsoft/why-net-developers-have-to-obfuscate-source-codes-4me5</link>
      <guid>https://dev.to/rustemsoft/why-net-developers-have-to-obfuscate-source-codes-4me5</guid>
      <description>&lt;p&gt;.NET developers often obfuscate their source code for several reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Protect Intellectual Property&lt;/strong&gt;: Obfuscation makes it harder for others to understand or reverse-engineer the code, which helps protect proprietary algorithms, business logic, and other intellectual property.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prevent Reverse Engineering&lt;/strong&gt;: Obfuscated code is more challenging to decompile and analyze. This reduces the risk of someone reverse-engineering the application to find vulnerabilities or replicate the functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhance Security&lt;/strong&gt;: While obfuscation is not a security solution by itself, it adds an extra layer of security. It can help to obscure the structure of the code and make it more difficult for attackers to find and exploit vulnerabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reduce Risk of Code Tampering&lt;/strong&gt;: Obfuscation can make it harder for malicious actors to tamper with the code. This is particularly important for applications distributed over the internet or in environments where code integrity is crucial.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Protecting Data and Business Logic&lt;/strong&gt;: For applications that involve sensitive data or complex business logic, obfuscation can prevent others from gaining insights into the underlying processes and data handling mechanisms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Safeguard against Software Piracy&lt;/strong&gt;: By making the code less understandable, obfuscation can deter unauthorized modifications and help protect against software piracy.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While obfuscation helps with these goals, it’s worth noting that it’s not foolproof. Determined attackers with the right tools and skills might still be able to deobfuscate and analyze the code. Therefore, it’s typically used as part of a broader security strategy rather than a standalone solution.&lt;/p&gt;

&lt;p&gt;.NET developers use several methods to protect application source code, including:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Obfuscation&lt;/strong&gt;: Transforms code into a form that's harder to understand and reverse-engineer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Encryption&lt;/strong&gt;: Encrypts code at runtime, decrypting it only when needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong Naming&lt;/strong&gt;: Uses digital signatures to ensure the integrity of assemblies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Licensing and Activation&lt;/strong&gt;: Implements mechanisms to control and restrict usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Access Security (CAS)&lt;/strong&gt;: Limits what code can do based on its origin and permissions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure Coding Practices&lt;/strong&gt;: Adopts practices to minimize vulnerabilities and secure data handling.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each method adds layers of protection against unauthorized access and tampering.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There is a definitive leader among .NET code obfuscators. &lt;a href="https://skaterpro.net" rel="noopener noreferrer"&gt;Skater .NET Obfuscator&lt;/a&gt; is a widely-used code protection tool renowned for its powerful obfuscation capabilities. It integrates seamlessly with Visual Studio, providing extensive protection. Skater is also recognized for its robust features and user-friendly interface. Assessing your specific needs, including ease of use, protection level, and cost, will guide you in selecting the best tool for your requirements.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dotnet</category>
      <category>obfuscator</category>
      <category>protectcode</category>
      <category>csharp</category>
    </item>
    <item>
      <title>How to encrypt Strings in .NET code obfuscation?</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Sun, 11 Aug 2024 02:35:03 +0000</pubDate>
      <link>https://dev.to/rustemsoft/how-to-encrypt-strings-in-net-code-obfuscation-3io4</link>
      <guid>https://dev.to/rustemsoft/how-to-encrypt-strings-in-net-code-obfuscation-3io4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;The string encryption function enables the encryption of literal string data type values. You can choose to encrypt all strings or mark certain strings for obfuscation. Additionally, you have the option to select a cryptographic method for encrypting the strings. Only the strings specified will be encrypted or obfuscated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Discussing the &lt;a href="https://skater.today" rel="noopener noreferrer"&gt;Skater .NET Obfuscator&lt;/a&gt;, it's evident that strings can offer significant hints to anyone attempting to reverse-engineer code, so safeguarding string data is crucial. While it won't stop a determined hacker from decoding the strings and accessing the data, it can hinder an attacker's efforts to crack a licensing routine, who would typically search for strings related to licensing to find the relevant code section. Skater enhances security by encrypting the strings within your .NET assembly, incorporating a decryption routine that executes at runtime to restore the original strings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strings Protection Special Features
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Strings are crucial components of code, and it is logical to create them in native code. Skater produces a C++ DLL that contains the protected strings. This new option secures algorithms by encoding strings in native code and storing them in a separate machine-code DLL. Although native code can be reverse-engineered, it is a challenging task, and the strings are encrypted within the DLL. Choosing the "&lt;strong&gt;Strings Stored in Separate DLL (recommended)&lt;/strong&gt;" option, Skater will generate a C++ DLL to house the protected strings. This DLL will be placed in the same directory as your output assembly path. You must then define the name of the Separate DLL file, which defaults to 'appExtension'. It is essential to include the Separate Strings DLL in your product distribution package and install it alongside your final assembly; otherwise, your .NET assembly will not function. This method ensures that decompilers cannot view or decode the string objects in the output assembly, rendering the string values completely invisible.&lt;/li&gt;
&lt;li&gt;The Skater .NET Obfuscator utilizes virtual cloud storage to safeguard essential parts of the source code. It secures your algorithms by encrypting strings and storing them in a Cloud Vault, all while maintaining the .NET user interface. Skater extracts string values, encrypts them, and then uploads them to a virtual vault. This method is secure against reverse engineering because it's housed on a protected web host. Additionally, strings are encrypted for protection in the Cloud Vault. To observe this, re-obfuscate the ConsoleApplication1.exe executable using Skater .NET Obfuscator. Open the exe file with Skater Obfuscator, and this time, navigate to the Strings tab and choose '&lt;strong&gt;Strings Stored in protected virtual Cloud Vault&lt;/strong&gt;' as the '&lt;strong&gt;Strings Store Location&lt;/strong&gt;'.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yexate6j9t2awuxr8d7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yexate6j9t2awuxr8d7.png" alt="Image description" width="608" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The **Strings **tab-page is divided into two sections. Using this page, you can navigate through the String values in the assembly structure and select or deselect them for the obfuscation process. The right section allows you to modify specific settings, while the left section presents the structure of your assembly, enabling you to alter the appearance of the panes. The left section offers a hierarchical view of your assembly's structure in a tree-like format. This tree is considered an object containing multiple objects, such as assembly classes, methods, fields, etc. By selecting a particular String value, it will be encrypted. In the right pane, toggling the checkboxes will select or deselect groups of String values for inclusion in the obfuscation process.&lt;/p&gt;

&lt;p&gt;The "Do not obfuscate Strings with length less than" field allows you to exclude strings from the encryption process based on their length. For example, if you enter '3', a string like 'ab' will not be encrypted, even if selected. However, a string of length '3' or more, such as 'abc', will be encrypted.&lt;/p&gt;

&lt;p&gt;For encrypting your String values, you can apply a cryptographic algorithm and must provide a password for the encryption. This password will be encrypted and stored within your obfuscated assembly. Alternatively, you can choose to store the password in a separate file outside the assembly. This file must be placed in the same directory as your deployed assembly.&lt;/p&gt;

&lt;p&gt;Skater allows you to adjust the size of two panes using a special center splitter. As you hover the mouse pointer over the central vertical edge, the cursor changes to show that both panes are resizable. By clicking once on the plus or minus icon adjacent to a member node in the left pane's tree, you can expand or collapse that member node. The absence of plus or minus icons next to a node indicates that the member node does not contain any objects beyond that level. A brief description of the selected member is displayed in the Status bar.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>obfuscator</category>
      <category>protectcode</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Skater Private Keys Depot. How to manage Keys?</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Sun, 08 Jan 2023 16:22:35 +0000</pubDate>
      <link>https://dev.to/rustemsoft/skater-private-keys-depot-how-to-manage-keys-3bni</link>
      <guid>https://dev.to/rustemsoft/skater-private-keys-depot-how-to-manage-keys-3bni</guid>
      <description>&lt;p&gt;Rustemsoft presents a modern key management system that provides cloud data encryption approaches to secure your data keys.&lt;/p&gt;

&lt;p&gt;A usual problem for developers is managing secret keys used to protect communication between applications and services. Skater Private Keys that are managed identically, rule out the need for developers to manipulate with these credentials.&lt;/p&gt;

&lt;p&gt;App developers can safely add the keys into Skater Private Keys Depot, and then apps can access Skater Private Keys Depot to retrieve stored credentials. Managed Private Keys Depot provide an automatically managed secret Key in Skater Private Keys Depot for applications to use when connecting to specific resources. &lt;a href="https://qr.ae/prKg7h"&gt;Applications can use managed Skater Depot to obtain Keys without having to manage any credentials.&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Skater Obfuscator protects .NET 7 today</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Sun, 04 Dec 2022 21:50:06 +0000</pubDate>
      <link>https://dev.to/rustemsoft/skater-obfuscator-protects-net-7-today-4p8c</link>
      <guid>https://dev.to/rustemsoft/skater-obfuscator-protects-net-7-today-4p8c</guid>
      <description>&lt;p&gt;.NET 7 is the latest version of .NET that was released in Nov 2022. Not only is .NET 7 a much improved version of the framework compared to its predecessors, but it also introduces some of the coolest features we've seen in some of the most popular platforms and languages. This article talks about the latest updates and new features introduced in in .NET 7.0.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="http://skater.today/obfuscator_dot_net7.html"&gt;http://skater.today/obfuscator_dot_net7.html&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Obfuscate .NET Strings then hide them into Cloud</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Tue, 11 Oct 2022 19:57:56 +0000</pubDate>
      <link>https://dev.to/rustemsoft/obfuscate-net-strings-then-hide-them-into-cloud-2hn3</link>
      <guid>https://dev.to/rustemsoft/obfuscate-net-strings-then-hide-them-into-cloud-2hn3</guid>
      <description>&lt;p&gt;Strings are vital code parts. It makes sense to store them in a separate location away from a distributed assembly. Skater puts the protected Strings somewhere in a cloud. This Skater’s option protects algorithms by encoding Strings and store them into a virtual cloud Vault. Maybe that technic can be reverse engineered but it is a very tough job. Plus, Strings are encrypt-protected in the Vault.&lt;br&gt;
&lt;a href="https://www.linkedin.com/pulse/protect-net-string-values-hiding-them-virtual-cloud-net-obfuscator/"&gt;Read more on LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>obfuscate</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Answer: How to add a watermark to a .Net DLL or EXE (to trace the copyright)?</title>
      <dc:creator>Skater</dc:creator>
      <pubDate>Sun, 28 Aug 2022 20:03:37 +0000</pubDate>
      <link>https://dev.to/rustemsoft/answer-how-to-add-a-watermark-to-a-net-dll-or-exe-to-trace-the-copyright-414e</link>
      <guid>https://dev.to/rustemsoft/answer-how-to-add-a-watermark-to-a-net-dll-or-exe-to-trace-the-copyright-414e</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7Gn-iPj_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/stackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/36434199/how-to-add-a-watermark-to-a-net-dll-or-exe-to-trace-the-copyright/66065598#66065598" rel="noopener noreferrer"&gt;
            &lt;span class="title-flare"&gt;answer&lt;/span&gt; re: How to add a watermark to a .Net DLL or EXE (to trace the copyright)?
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Feb  5 '21&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/36434199/how-to-add-a-watermark-to-a-net-dll-or-exe-to-trace-the-copyright/66065598#66065598" rel="noopener noreferrer"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y9mJpuJP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/stackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          1
        &lt;/div&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wif5Zq3z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/stackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;There is done a lot of research into adding a non-modifiable watermark to .NET assemblies that is hard to remove again, but sadly many of these programs do not prevent recompilation of watermarked .NET DLL/EXE. Skater .NET obfuscator dev team was working on the option of adding a unremovable watermark…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/36434199/how-to-add-a-watermark-to-a-net-dll-or-exe-to-trace-the-copyright/66065598#66065598" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Answer&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
