diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 507e20b..c10368e 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -2,15 +2,18 @@
version: 2
updates:
-
- # Maintain dependencies for GitHub Actions
+
- package-ecosystem: "github-actions"
directory: "/"
schedule:
- interval: "daily"
-
- # Maintain dependencies for nuget
+ interval: "weekly"
+ open-pull-requests-limit: 3
+
- package-ecosystem: "nuget"
directory: "/"
schedule:
- interval: "daily"
+ interval: "weekly"
+ open-pull-requests-limit: 5
+ ignore:
+ - dependency-name: "*"
+ versions: ["*-preview*", "*-beta*", "*-alpha*"]
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 84502d0..691a37f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -16,7 +16,7 @@ on:
workflow_dispatch:
env:
- CI_REQ_DOTNET_SDK_VER: 6.0.x
+ CI_REQ_DOTNET_SDK_VER: 9.0.x
jobs:
build:
@@ -27,37 +27,56 @@ jobs:
shell: pwsh
strategy:
matrix:
- platform: [netframework, net6.0-win32, net6.0-win64, net6.0-win-arm, net6.0-win-arm64, net6.0-linux64, net6.0-linux-arm, net6.0-linux-arm64, net6.0-osx64, netcoreapp3.1-win32, netcoreapp3.1-win64, netcoreapp3.1-win-arm, netcoreapp3.1-win-arm64, netcoreapp3.1-linux64, netcoreapp3.1-linux-arm, netcoreapp3.1-linux-arm64, netcoreapp3.1-osx64]
+ platform: [netframework, net9.0-win32, net9.0-win64, net9.0-win-arm64, net9.0-linux64, net9.0-linux-arm, net9.0-linux-arm64, net9.0-osx64, net6.0-win32, net6.0-win64, net6.0-win-arm, net6.0-win-arm64, net6.0-linux64, net6.0-linux-arm, net6.0-linux-arm64, net6.0-osx64, netcoreapp3.1-win32, netcoreapp3.1-win64, netcoreapp3.1-win-arm, netcoreapp3.1-win-arm64, netcoreapp3.1-linux64, netcoreapp3.1-linux-arm, netcoreapp3.1-linux-arm64, netcoreapp3.1-osx64]
include:
- platform: netframework
build-dir: net48
+ - platform: net9.0-win32
+ build-dir: net9.0\win-x86\publish
+
+ - platform: net9.0-win64
+ build-dir: net9.0\win-x64\publish
+
+ - platform: net9.0-win-arm64
+ build-dir: net9.0\win-arm64\publish
+
+ - platform: net9.0-linux64
+ build-dir: net9.0\linux-x64\publish
+
+ - platform: net9.0-linux-arm
+ build-dir: net9.0\linux-arm\publish
+
+ - platform: net9.0-linux-arm64
+ build-dir: net9.0\linux-arm64\publish
+
+ - platform: net9.0-osx64
+ build-dir: net9.0\osx-x64\publish
- platform: net6.0-win32
build-dir: net6.0\win-x86\publish
- platform: net6.0-win64
build-dir: net6.0\win-x64\publish
-
+
- platform: net6.0-win-arm
build-dir: net6.0\win-arm\publish
- platform: net6.0-win-arm64
build-dir: net6.0\win-arm64\publish
-
+
- platform: net6.0-linux64
build-dir: net6.0\linux-x64\publish
- platform: net6.0-linux-arm
build-dir: net6.0\linux-arm\publish
-
+
- platform: net6.0-linux-arm64
build-dir: net6.0\linux-arm64\publish
- platform: net6.0-osx64
build-dir: net6.0\osx-x64\publish
-
-
+
- platform: netcoreapp3.1-win32
build-dir: netcoreapp3.1\win-x86\publish
@@ -89,15 +108,19 @@ jobs:
submodules: true
- name: Setup .NET
- uses: actions/setup-dotnet@v3
+ uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{env.CI_REQ_DOTNET_SDK_VER}}
+ cache: true
+ cache-dependency-path: '**/packages.lock.json'
- name: Setup MSBuild
- uses: microsoft/setup-msbuild@v1.3
+ uses: microsoft/setup-msbuild@v2
- name: Setup NuGet
- uses: NuGet/setup-nuget@v1.2.0
+ uses: nuget/setup-nuget@v2
+ with:
+ nuget-version: 'latest'
- name: Restore NuGet packages for NETReactorSlayer.GUI
run: nuget restore NETReactorSlayer.GUI\NETReactorSlayer.GUI.csproj -PackagesDirectory .\packages\
@@ -114,17 +137,19 @@ jobs:
run: Copy-Item -Path bin\Release\${{matrix.build-dir}}\* -Destination C:\builtfiles\NETReactorSlayer-${{matrix.platform}} -Recurse
- name: Upload NETReactorSlayer
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: ${{ contains(matrix.platform, 'netframework') && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) }}
with:
name: NETReactorSlayer-${{matrix.platform}}
path: C:\builtfiles\NETReactorSlayer-${{matrix.platform}}
if-no-files-found: error
+ compression-level: 6
- name: Upload NETReactorSlayer.CLI
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: ${{ !contains(matrix.platform, 'netframework') && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/'))}}
with:
name: NETReactorSlayer.CLI-${{matrix.platform}}
path: C:\builtfiles\NETReactorSlayer-${{matrix.platform}}
if-no-files-found: error
+ compression-level: 6
\ No newline at end of file
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index fd66167..50211ec 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -24,26 +24,28 @@ jobs:
fail-fast: false
matrix:
language: [ 'csharp' ]
- dotnet-version: [ '6.0.x' ]
+ dotnet-version: [ '9.0.x' ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Initialize CodeQL
- uses: github/codeql-action/init@v2
+ uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- name: Setup .NET
- uses: actions/setup-dotnet@v3
+ uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ matrix.dotnet-version }}
+ cache: true
+ cache-dependency-path: '**/packages.lock.json'
- name: Build
run: dotnet build NETReactorSlayer.sln
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v2
+ uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
\ No newline at end of file
diff --git a/NETReactorSlayer-x64.CLI/NETReactorSlayer-x64.CLI.csproj b/NETReactorSlayer-x64.CLI/NETReactorSlayer-x64.CLI.csproj
index a627057..8158d8d 100644
--- a/NETReactorSlayer-x64.CLI/NETReactorSlayer-x64.CLI.csproj
+++ b/NETReactorSlayer-x64.CLI/NETReactorSlayer-x64.CLI.csproj
@@ -3,27 +3,32 @@
-
- AnyCPU
+ x86
..\bin\$(Configuration)\
Exe
+ net9.0;net6.0;net7.0;net48;netcoreapp3.1
+ x64
-
-
-
+
+ False
+
+
+
+ False
+
-
+
+ False
+
-
-
-
-
-
-
-
+
+ False
+
-
+
+
+
-
\ No newline at end of file
+
diff --git a/NETReactorSlayer-x64.CLI/Program.cs b/NETReactorSlayer-x64.CLI/Program.cs
index 2c09f21..afe4949 100644
--- a/NETReactorSlayer-x64.CLI/Program.cs
+++ b/NETReactorSlayer-x64.CLI/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License
using System;
-namespace NETReactorSlayerr_x64.CLI
+namespace NETReactorSlayer_x64.CLI
{
internal class Program
{
diff --git a/NETReactorSlayer-x64.CLI/packages.lock.json b/NETReactorSlayer-x64.CLI/packages.lock.json
new file mode 100644
index 0000000..28069fa
--- /dev/null
+++ b/NETReactorSlayer-x64.CLI/packages.lock.json
@@ -0,0 +1,259 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETCoreApp,Version=v3.1": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA==",
+ "dependencies": {
+ "System.Reflection.Emit": "4.7.0",
+ "System.Reflection.Emit.Lightweight": "4.7.0"
+ }
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw=="
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Reflection.Emit": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ=="
+ },
+ "System.Reflection.Emit.Lightweight": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA=="
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ ".NETCoreApp,Version=v3.1/win-x64": {},
+ ".NETFramework,Version=v4.8": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw=="
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A==",
+ "dependencies": {
+ "System.Memory": "4.5.4",
+ "System.Threading.Tasks.Extensions": "4.5.2"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "4.5.3",
+ "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw=="
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.2",
+ "contentHash": "BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2"
+ }
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ ".NETFramework,Version=v4.8/win-x64": {},
+ "net6.0": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "6.0.11"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "6.0.11",
+ "contentHash": "xqC1HIbJMBFhrpYs76oYP+NAskNVjc6v73HqLal7ECRDPIp4oRU5pPavkD//vNactCn9DA2aaald/I5N+uZ5/g=="
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net6.0/win-x64": {},
+ "net7.0": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "8.0.5"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "8.0.0"
+ }
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net7.0/win-x64": {
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
+ }
+ },
+ "net9.0": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "eqWHDZqYPv1PvuvoIIx5pF74plL3iEOZOl/0kQP+Y0TEbtgNnM2W6k8h8EPYs+LTJZsXuWa92n5W5sHTWvE3VA=="
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net9.0/win-x64": {}
+ }
+}
\ No newline at end of file
diff --git a/NETReactorSlayer.CLI/NETReactorSlayer.CLI.csproj b/NETReactorSlayer.CLI/NETReactorSlayer.CLI.csproj
index d0227bf..4d96cfd 100644
--- a/NETReactorSlayer.CLI/NETReactorSlayer.CLI.csproj
+++ b/NETReactorSlayer.CLI/NETReactorSlayer.CLI.csproj
@@ -3,12 +3,20 @@
-
- AnyCPU
+ x86
..\bin\$(Configuration)\
Exe
- true
+ net9.0;net6.0;net7.0;net48;netcoreapp3.1
+ x86
+
+
+
+
+ 8
+
+
+ 8
diff --git a/NETReactorSlayer.CLI/Program.cs b/NETReactorSlayer.CLI/Program.cs
index ba8f342..551db58 100644
--- a/NETReactorSlayer.CLI/Program.cs
+++ b/NETReactorSlayer.CLI/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.CLI/packages.lock.json b/NETReactorSlayer.CLI/packages.lock.json
new file mode 100644
index 0000000..52a557d
--- /dev/null
+++ b/NETReactorSlayer.CLI/packages.lock.json
@@ -0,0 +1,259 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETCoreApp,Version=v3.1": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA==",
+ "dependencies": {
+ "System.Reflection.Emit": "4.7.0",
+ "System.Reflection.Emit.Lightweight": "4.7.0"
+ }
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw=="
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Reflection.Emit": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ=="
+ },
+ "System.Reflection.Emit.Lightweight": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA=="
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ ".NETCoreApp,Version=v3.1/win-x86": {},
+ ".NETFramework,Version=v4.8": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw=="
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A==",
+ "dependencies": {
+ "System.Memory": "4.5.4",
+ "System.Threading.Tasks.Extensions": "4.5.2"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "4.5.3",
+ "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw=="
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.2",
+ "contentHash": "BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2"
+ }
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ ".NETFramework,Version=v4.8/win-x86": {},
+ "net6.0": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "6.0.11"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "6.0.11",
+ "contentHash": "xqC1HIbJMBFhrpYs76oYP+NAskNVjc6v73HqLal7ECRDPIp4oRU5pPavkD//vNactCn9DA2aaald/I5N+uZ5/g=="
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net6.0/win-x86": {},
+ "net7.0": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "8.0.5"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "8.0.0"
+ }
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net7.0/win-x86": {
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
+ }
+ },
+ "net9.0": {
+ "dnlib": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Transitive",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Transitive",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "eqWHDZqYPv1PvuvoIIx5pF74plL3iEOZOl/0kQP+Y0TEbtgNnM2W6k8h8EPYs+LTJZsXuWa92n5W5sHTWvE3VA=="
+ },
+ "netreactorslayer.core": {
+ "type": "Project",
+ "dependencies": {
+ "Lib.Harmony": "[2.3.6, )",
+ "NETReactorSlayer.De4dot": "[6.4.0, )",
+ "SharpZipLib": "[1.4.2, )",
+ "dnlib": "[4.5.0, )"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net9.0/win-x86": {}
+ }
+}
\ No newline at end of file
diff --git a/NETReactorSlayer.Core/Abstractions/IContext.cs b/NETReactorSlayer.Core/Abstractions/IContext.cs
index 46c111a..91ff2bf 100644
--- a/NETReactorSlayer.Core/Abstractions/IContext.cs
+++ b/NETReactorSlayer.Core/Abstractions/IContext.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Reflection;
using dnlib.DotNet;
using NETReactorSlayer.Core.Helper;
+using System.Reflection;
namespace NETReactorSlayer.Core.Abstractions
{
diff --git a/NETReactorSlayer.Core/Abstractions/IInfo.cs b/NETReactorSlayer.Core/Abstractions/IInfo.cs
index d9e0270..a652fd0 100644
--- a/NETReactorSlayer.Core/Abstractions/IInfo.cs
+++ b/NETReactorSlayer.Core/Abstractions/IInfo.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Abstractions/ILogger.cs b/NETReactorSlayer.Core/Abstractions/ILogger.cs
index 80fade1..81a9a20 100644
--- a/NETReactorSlayer.Core/Abstractions/ILogger.cs
+++ b/NETReactorSlayer.Core/Abstractions/ILogger.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Abstractions/IOptions.cs b/NETReactorSlayer.Core/Abstractions/IOptions.cs
index 599f349..4c11a45 100644
--- a/NETReactorSlayer.Core/Abstractions/IOptions.cs
+++ b/NETReactorSlayer.Core/Abstractions/IOptions.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using NETReactorSlayer.De4dot.Renamer;
+using System.Collections.Generic;
namespace NETReactorSlayer.Core.Abstractions
{
diff --git a/NETReactorSlayer.Core/Abstractions/IStage.cs b/NETReactorSlayer.Core/Abstractions/IStage.cs
index d9d9cce..c81b2e6 100644
--- a/NETReactorSlayer.Core/Abstractions/IStage.cs
+++ b/NETReactorSlayer.Core/Abstractions/IStage.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Context.cs b/NETReactorSlayer.Core/Context.cs
index 3da1bc6..2ee3872 100644
--- a/NETReactorSlayer.Core/Context.cs
+++ b/NETReactorSlayer.Core/Context.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,15 +13,16 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Reflection;
using dnlib.DotNet;
using dnlib.DotNet.Writer;
using dnlib.PE;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Reflection;
+using System.Runtime.InteropServices;
using ILogger = NETReactorSlayer.Core.Abstractions.ILogger;
namespace NETReactorSlayer.Core
@@ -71,7 +72,7 @@ public bool Load()
Process.Start(new ProcessStartInfo(Process.GetCurrentProcess().MainModule?.FileName,
$"--del-temp {Process.GetCurrentProcess().Id} \"{Options.SourcePath}\"")
- { WindowStyle = ProcessWindowStyle.Hidden });
+ { WindowStyle = ProcessWindowStyle.Hidden });
Logger.Info("Native stub unpacked.");
}
@@ -125,6 +126,16 @@ public void Save()
}
}
+
+
+ // https://www.cnblogs.com/Fred1987/p/18603592
+
+ //copy from,https://gist.github.com/6rube/34b561827f0805f73742541b8b8bb770
+
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)]
+
+ static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
+
private bool LoadAssembly()
{
try
diff --git a/NETReactorSlayer.Core/Helper/ArrayFinder.cs b/NETReactorSlayer.Core/Helper/ArrayFinder.cs
index 8791689..a670ee0 100644
--- a/NETReactorSlayer.Core/Helper/ArrayFinder.cs
+++ b/NETReactorSlayer.Core/Helper/ArrayFinder.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -95,7 +95,7 @@ public static Value[] GetInitializedArray(
emulator.Emulate(instr);
}
- done:
+ done:
if (i != newarrIndex + 1)
i--;
newarrIndex = i;
@@ -105,7 +105,7 @@ public static Value[] GetInitializedArray(
private static int FindNewarr(MethodDef method, int arraySize)
{
- for (var i = 0;; i++)
+ for (var i = 0; ; i++)
{
if (!FindNewarr(method, ref i, out var size))
return -1;
diff --git a/NETReactorSlayer.Core/Helper/AssemblyModule.cs b/NETReactorSlayer.Core/Helper/AssemblyModule.cs
index 8a8a1dc..e78b452 100644
--- a/NETReactorSlayer.Core/Helper/AssemblyModule.cs
+++ b/NETReactorSlayer.Core/Helper/AssemblyModule.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.IO;
using dnlib.DotNet;
+using System.IO;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Helper/CodeVirtualizationUtils.cs b/NETReactorSlayer.Core/Helper/CodeVirtualizationUtils.cs
index 9383d1a..f350c4b 100644
--- a/NETReactorSlayer.Core/Helper/CodeVirtualizationUtils.cs
+++ b/NETReactorSlayer.Core/Helper/CodeVirtualizationUtils.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Linq;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
+using System.Linq;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Helper/DeobUtils.cs b/NETReactorSlayer.Core/Helper/DeobUtils.cs
index 428cd8a..00cc17c 100644
--- a/NETReactorSlayer.Core/Helper/DeobUtils.cs
+++ b/NETReactorSlayer.Core/Helper/DeobUtils.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,12 +13,12 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
+using ICSharpCode.SharpZipLib.Zip.Compression;
using System;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
-using dnlib.DotNet;
-using ICSharpCode.SharpZipLib.Zip.Compression;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Helper/DumpedMethodsRestorer.cs b/NETReactorSlayer.Core/Helper/DumpedMethodsRestorer.cs
index df7b79d..0e5a1d7 100644
--- a/NETReactorSlayer.Core/Helper/DumpedMethodsRestorer.cs
+++ b/NETReactorSlayer.Core/Helper/DumpedMethodsRestorer.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,12 +13,12 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using dnlib.DotNet.MD;
using dnlib.PE;
+using System.Collections.Generic;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Helper/EncryptedResource.cs b/NETReactorSlayer.Core/Helper/EncryptedResource.cs
index fb39653..1092a18 100644
--- a/NETReactorSlayer.Core/Helper/EncryptedResource.cs
+++ b/NETReactorSlayer.Core/Helper/EncryptedResource.cs
@@ -1,21 +1,11 @@
-/*
- Copyright (C) 2021 CodeStrikers.org
- This file is part of NETReactorSlayer.
- NETReactorSlayer is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- NETReactorSlayer is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with NETReactorSlayer. If not, see .
-*/
+
using System;
+using System.Collections;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
+using System.Runtime.InteropServices;
using de4dot.blocks;
using de4dot.blocks.cflow;
using dnlib.DotNet;
@@ -72,6 +62,7 @@ private EmbeddedResource GetEncryptedResource(IContext context)
return null;
}
+ public static string DecrypterVer = "";
private IDecrypter GetDecrypter()
{
if (!DecrypterMethod.IsStatic || !DecrypterMethod.HasBody)
@@ -79,18 +70,41 @@ private IDecrypter GetDecrypter()
var localTypes = new LocalTypes(DecrypterMethod);
+ //if (DecrypterV2.CouldBeResourceDecrypter(localTypes, AdditionalTypes))
+ //{
+ DecrypterV5 dec_v5 = new DecrypterV5(DecrypterMethod);
+ if (dec_v5.Initialize())
+ {
+ DecrypterVer = "V5 (trial)";
+ return dec_v5;
+ }
+ //}
+
if (DecrypterV1.CouldBeResourceDecrypter(DecrypterMethod, localTypes, AdditionalTypes))
+ {
+ DecrypterVer = "V1";
return new DecrypterV1(DecrypterMethod);
-
+ }
if (DecrypterV3.CouldBeResourceDecrypter(localTypes, AdditionalTypes))
+ {
+ DecrypterVer = "V3";
return new DecrypterV3(DecrypterMethod);
+ }
if (DecrypterV4.CouldBeResourceDecrypter(DecrypterMethod, localTypes, AdditionalTypes))
+ {
+ DecrypterVer = "V4";
return new DecrypterV4(DecrypterMethod);
+ }
+
+ if (DecrypterV2.CouldBeResourceDecrypter(localTypes, AdditionalTypes))
+ {
+
+ DecrypterVer = "V2";
+ return new DecrypterV2(DecrypterMethod);
+ }
- return DecrypterV2.CouldBeResourceDecrypter(localTypes, AdditionalTypes)
- ? new DecrypterV2(DecrypterMethod)
- : null;
+ return null;
}
public static bool IsKnownDecrypter(MethodDef method, IList additionalTypes, bool checkResource)
@@ -171,30 +185,6 @@ where instr.OpCode.Code is Code.Call or Code.Callvirt or Code.Newobj
.Any(calledMethod => calledMethod.FullName.Contains(fullName));
}
- public static bool TryGetLdcValue(Instruction instruction, out int value)
- {
- value = 0;
-
- if (!instruction.IsLdcI4() &&
- !instruction.OpCode.Equals(OpCodes.Ldc_I8) &&
- !instruction.OpCode.Equals(OpCodes.Ldc_R4) &&
- !instruction.OpCode.Equals(OpCodes.Ldc_R8))
- return false;
-
- try
- {
- value = instruction.IsLdcI4() ?
- instruction.GetLdcI4Value() :
- Convert.ToInt32(instruction.Operand);
-
- return true;
- }
- catch
- {
- return false;
- }
- }
-
public MethodDef DecrypterMethod { get; }
public EmbeddedResource EmbeddedResource { get; private set; }
private IList AdditionalTypes { get; }
@@ -278,7 +268,7 @@ public DecrypterV2(MethodDef method)
_decrypterMethod = method;
_locals = new List(_decrypterMethod.Body.Variables);
if (!Initialize())
- throw new ApplicationException("Could not initialize decrypter");
+ throw new ApplicationException("Could not initialize decrypter V2");
}
public static bool CouldBeResourceDecrypter(StringCounts stringCounts,
@@ -363,6 +353,7 @@ private bool Find(IList instrs, out int startIndex, out int endInde
return false;
if (!FindEnd(instrs, emuStartIndex, out var emuEndIndex))
return false;
+
startIndex = emuStartIndex;
endIndex = emuEndIndex;
tmpLocal = _emuLocal;
@@ -386,6 +377,11 @@ private bool FindEnd(IList instrs, int startIndex, out int endIndex
return false;
}
+ // https://www.cnblogs.com/Fred1987/p/18603592
+ //copy from,https://gist.github.com/6rube/34b561827f0805f73742541b8b8bb770
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)]
+ static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
+
private bool FindStart(IList instrs, out int startIndex, out Local tmpLocal)
{
var i = 0;
@@ -397,6 +393,7 @@ private bool FindStart(IList instrs, out int startIndex, out Local
(local = CheckLocal(instrs[i + 4], true)) != null && CheckLocal(instrs[i + 5], true) != null &&
instrs[i + 6].OpCode.Code.Equals(Code.Add) && CheckLocal(instrs[i + 7], false) == local)
{
+
var instr = instrs[i + 8];
var newStartIndex = i + 8;
if (instr.IsBr())
@@ -577,45 +574,28 @@ private uint CalculateMagic(uint input)
goto Emulate;
if (!_instructions[index].IsLdloc())
goto Emulate;
- if (!TryGetLdcValue(_instructions[index + 1], out var value) || value != 0)
+ if (!_instructions[index + 1].OpCode.Equals(OpCodes.Ldc_I4_0) &&
+ (!_instructions[index + 1].IsLdcI4() || _instructions[index + 1].GetLdcI4Value() != 0))
goto Emulate;
if (!_instructions[index + 2].OpCode.Equals(OpCodes.Bne_Un) &&
!_instructions[index + 2].OpCode.Equals(OpCodes.Bne_Un_S))
goto Emulate;
if (!_instructions[index + 3].IsLdloc())
goto Emulate;
- if (!TryGetLdcValue(_instructions[index + 4], out value) || value != 1)
+ if (!_instructions[index + 4].OpCode.Equals(OpCodes.Ldc_I4_1) &&
+ (!_instructions[index + 4].IsLdcI4() || _instructions[index + 4].GetLdcI4Value() != 1))
goto Emulate;
if (!_instructions[index + 5].OpCode.Equals(OpCodes.Sub))
goto Emulate;
if (!_instructions[index + 6].IsStloc())
goto Emulate;
-
- switch (_instrEmulator.GetLocal(CheckLocal(_instructions[index + 6], false).Index))
- {
- case Int32Value int32:
- {
- if (int32.Value != Int32Value.Zero.Value)
- index += 7;
- break;
- }
- case Int64Value int64:
- {
- if (int64.Value != Int64Value.Zero.Value)
- index += 7;
- break;
- }
- case Real8Value real8Value:
- {
- if (!real8Value.Value.Equals(new Real8Value(0).Value))
- index += 7;
- break;
- }
- }
+ if (_instrEmulator.GetLocal(CheckLocal(_instructions[index + 6], false)
+ .Index) is Int32Value local && local.Value != Int32Value.Zero.Value)
+ index += 7;
}
catch { }
- Emulate:
+ Emulate:
_instrEmulator.Emulate(_instructions[index]);
index++;
}
@@ -645,7 +625,7 @@ public DecrypterV3(MethodDef method)
_decrypterMethod = method;
_locals = new List(_decrypterMethod.Body.Variables);
if (!Initialize())
- throw new ApplicationException("Could not initialize decrypter");
+ throw new ApplicationException("Could not initialize decrypter V3");
}
public static bool CouldBeResourceDecrypter(StringCounts stringCounts,
@@ -703,45 +683,28 @@ private uint CalculateMagic(uint input)
goto Emulate;
if (!_instructions[index].IsLdloc())
goto Emulate;
- if (!TryGetLdcValue(_instructions[index + 1], out var value) || value != 0)
+ if (!_instructions[index + 1].OpCode.Equals(OpCodes.Ldc_I4_0) &&
+ (!_instructions[index + 1].IsLdcI4() || _instructions[index + 1].GetLdcI4Value() != 0))
goto Emulate;
if (!_instructions[index + 2].OpCode.Equals(OpCodes.Bne_Un) &&
!_instructions[index + 2].OpCode.Equals(OpCodes.Bne_Un_S))
goto Emulate;
if (!_instructions[index + 3].IsLdloc())
goto Emulate;
- if (!TryGetLdcValue(_instructions[index + 4], out value) || value != 1)
+ if (!_instructions[index + 4].OpCode.Equals(OpCodes.Ldc_I4_1) &&
+ (!_instructions[index + 4].IsLdcI4() || _instructions[index + 4].GetLdcI4Value() != 1))
goto Emulate;
if (!_instructions[index + 5].OpCode.Equals(OpCodes.Sub))
goto Emulate;
if (!_instructions[index + 6].IsStloc())
goto Emulate;
-
- switch (_instrEmulator.GetLocal(CheckLocal(_instructions[index + 6], false).Index))
- {
- case Int32Value int32:
- {
- if (int32.Value != Int32Value.Zero.Value)
- index += 7;
- break;
- }
- case Int64Value int64:
- {
- if (int64.Value != Int64Value.Zero.Value)
- index += 7;
- break;
- }
- case Real8Value real8Value:
- {
- if (!real8Value.Value.Equals(new Real8Value(0).Value))
- index += 7;
- break;
- }
- }
+ if (_instrEmulator.GetLocal(CheckLocal(_instructions[index + 6], false)
+ .Index) is Int32Value local && local.Value != Int32Value.Zero.Value)
+ index += 7;
}
catch { }
- Emulate:
+ Emulate:
_instrEmulator.Emulate(_instructions[index]);
index++;
}
@@ -950,7 +913,7 @@ public DecrypterV4(MethodDef method)
_iv = GetDecryptionIV(_decrypterMethod);
_locals = new List(_emuMethod.Body.Variables);
if (!Initialize())
- throw new ApplicationException("Could not initialize decrypter");
+ throw new ApplicationException("Could not initialize decrypter V4");
}
public static bool CouldBeResourceDecrypter(MethodDef method, StringCounts stringCounts,
@@ -1230,45 +1193,28 @@ private uint CalculateMagic(uint input)
goto Emulate;
if (!_instructions[index].IsLdloc())
goto Emulate;
- if (!TryGetLdcValue(_instructions[index + 1], out var value) || value != 0)
+ if (!_instructions[index + 1].OpCode.Equals(OpCodes.Ldc_I4_0) &&
+ (!_instructions[index + 1].IsLdcI4() || _instructions[index + 1].GetLdcI4Value() != 0))
goto Emulate;
if (!_instructions[index + 2].OpCode.Equals(OpCodes.Bne_Un) &&
!_instructions[index + 2].OpCode.Equals(OpCodes.Bne_Un_S))
goto Emulate;
if (!_instructions[index + 3].IsLdloc())
goto Emulate;
- if (!TryGetLdcValue(_instructions[index + 4], out value) || value != 1)
+ if (!_instructions[index + 4].OpCode.Equals(OpCodes.Ldc_I4_1) &&
+ (!_instructions[index + 4].IsLdcI4() || _instructions[index + 4].GetLdcI4Value() != 1))
goto Emulate;
if (!_instructions[index + 5].OpCode.Equals(OpCodes.Sub))
goto Emulate;
if (!_instructions[index + 6].IsStloc())
goto Emulate;
-
- switch (_instrEmulator.GetLocal(CheckLocal(_instructions[index + 6], false).Index))
- {
- case Int32Value int32:
- {
- if (int32.Value != Int32Value.Zero.Value)
- index += 7;
- break;
- }
- case Int64Value int64:
- {
- if (int64.Value != Int64Value.Zero.Value)
- index += 7;
- break;
- }
- case Real8Value real8Value:
- {
- if (!real8Value.Value.Equals(new Real8Value(0).Value))
- index += 7;
- break;
- }
- }
+ if (_instrEmulator.GetLocal(CheckLocal(_instructions[index + 6], false)
+ .Index) is Int32Value local && local.Value != Int32Value.Zero.Value)
+ index += 7;
}
catch { }
- Emulate:
+ Emulate:
_instrEmulator.Emulate(_instructions[index]);
index++;
}
@@ -1316,6 +1262,154 @@ private static void WriteUInt32(IList ary, int index, uint value)
private DecrypterVersion _decrypterVersion = DecrypterVersion.V6X;
}
+
+ private class DecrypterV5 : IDecrypter
+ {
+ public DecrypterV5(MethodDef method)
+ {
+ _key = GetDecryptionKey(method);
+ _iv = GetDecryptionIV(method);
+ _decrypterMethod = method;
+ //_locals = new List(_decrypterMethod.Body.Variables);
+ //if (!Initialize())
+ // throw new ApplicationException("Could not initialize decrypter V5");
+ }
+
+ public static bool CouldBeResourceDecrypter(StringCounts stringCounts,
+ IEnumerable additionalTypes)
+ {
+ var requiredTypes = new List
+ {
+ "System.Int32",
+ "System.Byte[]"
+ };
+ requiredTypes.AddRange(additionalTypes);
+ return stringCounts.All(requiredTypes);
+ }
+
+ public unsafe byte[] Decrypt(EmbeddedResource resource)
+ {
+ byte[] encrypted = resource.CreateReader().ToArray();
+ byte[] decrypted = new byte[encrypted.Length];
+ uint sum = 0U;
+
+ byte[] new_key = null;
+ if (_key != null && _iv != null)
+ {
+ new_key = _key;
+ for (int i = 0; i < _iv.Length; i++)
+ {
+ new_key[i] ^= _iv[i];
+ }
+ }
+
+ for (var i = 0; i < encrypted.Length; i += 4)
+ {
+ if (new_key != null)
+ sum += ReadUInt32(new_key, i % new_key.Length);
+
+ sum += Enc_key;
+ WriteUInt32(decrypted, i, sum ^ ReadUInt32(encrypted, i));
+ }
+
+
+
+
+
+ return decrypted;
+ }
+
+ public bool Initialize()
+ {
+ var origInstrs = _decrypterMethod.Body.Instructions;
+
+ // IL_0DB6: ldloc.s V_60
+ // IL_0DB8: stloc.s V_60
+ // IL_0DBA: ldloc.s V_60
+ // IL_0DBC: ldc.i4 702695222
+ // IL_0DC1: add
+ // IL_0DC2: stloc.s V_60
+ for (int i = 0; i < origInstrs.Count - 11; i++)
+ {
+ if (origInstrs[i].IsLdloc() && origInstrs[i + 1].IsStloc() &&
+ origInstrs[i + 2].IsLdloc() && origInstrs[i + 3].IsLdcI4() &&
+ origInstrs[i + 4].OpCode == OpCodes.Add && origInstrs[i + 5].IsStloc())
+ {
+ Local local1 = origInstrs[i].GetLocal(_decrypterMethod.Body.Variables);
+ if (local1 == null) continue;
+ Local local2 = origInstrs[i + 1].GetLocal(_decrypterMethod.Body.Variables);
+ if (local2 == null || local1 != local2) continue;
+ Local local3 = origInstrs[i + 2].GetLocal(_decrypterMethod.Body.Variables);
+ if (local3 == null || local1 != local3) continue;
+ Local local4 = origInstrs[i + 5].GetLocal(_decrypterMethod.Body.Variables);
+ if (local4 == null || local1 != local4) continue;
+
+ Enc_key = (uint)origInstrs[i + 3].GetLdcI4Value();
+ //MessageBox(new IntPtr(0), Enc_key.ToString(), "MessageBox", 0);
+
+ return true;
+
+
+ }
+
+ if (origInstrs[i].IsLdcI4() &&
+ origInstrs[i + 1].OpCode == OpCodes.Add && origInstrs[i + 2].IsStloc() &&
+ origInstrs[i + 3].IsLdloc() && origInstrs[i + 4].IsLdloc() && origInstrs[i + 5].OpCode == OpCodes.Ldc_I4_1 &&
+ origInstrs[i + 6].OpCode == OpCodes.Sub && (origInstrs[i + 7].OpCode == OpCodes.Bne_Un || origInstrs[i + 7].OpCode == OpCodes.Bne_Un_S) &&
+ origInstrs[i + 8].IsLdloc() && origInstrs[i + 9].OpCode == OpCodes.Ldc_I4_0 && (origInstrs[i + 10].OpCode == OpCodes.Ble || origInstrs[i + 10].OpCode == OpCodes.Ble_S))
+ {
+ Enc_key = (uint)origInstrs[i].GetLdcI4Value();
+ //MessageBox(new IntPtr(0), Enc_key.ToString(), "MessageBox", 0);
+
+ return true;
+ }
+
+
+ }
+ return false;
+ }
+
+ // https://www.cnblogs.com/Fred1987/p/18603592
+ //copy from,https://gist.github.com/6rube/34b561827f0805f73742541b8b8bb770
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)]
+ static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
+
+ private static uint ReadUInt32(byte[] ary, int index)
+ {
+ var sizeLeft = ary.Length - index;
+ if (sizeLeft >= 4)
+ return BitConverter.ToUInt32(ary, index);
+ return sizeLeft switch
+ {
+ 1 => ary[index],
+ 2 => (uint)(ary[index] | (ary[index + 1] << 8)),
+ 3 => (uint)(ary[index] | (ary[index + 1] << 8) | (ary[index + 2] << 16)),
+ _ => throw new ApplicationException("Can't read data")
+ };
+ }
+
+ private static void WriteUInt32(IList ary, int index, uint value)
+ {
+ var num = ary.Count - index;
+ if (num >= 1)
+ ary[index] = (byte)value;
+ if (num >= 2)
+ ary[index + 1] = (byte)(value >> 8);
+ if (num >= 3)
+ ary[index + 2] = (byte)(value >> 16);
+ if (num >= 4)
+ ary[index + 3] = (byte)(value >> 24);
+ }
+
+ private uint Enc_key;
+ private readonly byte[] _key, _iv;
+ private readonly MethodDef _decrypterMethod;
+ //private List _instructions;
+ //private bool _isNewDecrypter;
+ //private List _locals;
+ //private DecrypterVersion _decrypterVersion = DecrypterVersion.V6X;
+ }
+
#endregion
}
}
\ No newline at end of file
diff --git a/NETReactorSlayer.Core/Helper/FieldTypes.cs b/NETReactorSlayer.Core/Helper/FieldTypes.cs
index 93d8625..8f02c21 100644
--- a/NETReactorSlayer.Core/Helper/FieldTypes.cs
+++ b/NETReactorSlayer.Core/Helper/FieldTypes.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System.Collections.Generic;
using System.Linq;
-using dnlib.DotNet;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Helper/InvalidMethodBody.cs b/NETReactorSlayer.Core/Helper/InvalidMethodBody.cs
index b0c3988..c312948 100644
--- a/NETReactorSlayer.Core/Helper/InvalidMethodBody.cs
+++ b/NETReactorSlayer.Core/Helper/InvalidMethodBody.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Helper/LocalTypes.cs b/NETReactorSlayer.Core/Helper/LocalTypes.cs
index 2cb55d5..70098af 100644
--- a/NETReactorSlayer.Core/Helper/LocalTypes.cs
+++ b/NETReactorSlayer.Core/Helper/LocalTypes.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
+using System.Collections.Generic;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Helper/MethodBodyHeader.cs b/NETReactorSlayer.Core/Helper/MethodBodyHeader.cs
index 49d31df..e0080c9 100644
--- a/NETReactorSlayer.Core/Helper/MethodBodyHeader.cs
+++ b/NETReactorSlayer.Core/Helper/MethodBodyHeader.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Helper/MethodBodyParser.cs b/NETReactorSlayer.Core/Helper/MethodBodyParser.cs
index f77641d..269f38b 100644
--- a/NETReactorSlayer.Core/Helper/MethodBodyParser.cs
+++ b/NETReactorSlayer.Core/Helper/MethodBodyParser.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.IO;
using System;
using System.IO;
-using dnlib.IO;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Helper/MethodCallRemover.cs b/NETReactorSlayer.Core/Helper/MethodCallRemover.cs
index 90ce4a6..d06ac3e 100644
--- a/NETReactorSlayer.Core/Helper/MethodCallRemover.cs
+++ b/NETReactorSlayer.Core/Helper/MethodCallRemover.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,12 +13,12 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
+using System.Collections.Generic;
+using System.Linq;
namespace NETReactorSlayer.Core.Helper
{
@@ -40,9 +40,9 @@ public static long RemoveCalls(IContext context, List methods)
{
_methodRefInfos = new MethodDefAndDeclaringTypeDict>();
foreach (var type in context.Module.GetTypes())
- foreach (var method in type.Methods.Where(x => x.HasBody && x.Body.HasInstructions))
- foreach (var methodToRem in methods)
- Add(method, methodToRem);
+ foreach (var method in type.Methods.Where(x => x.HasBody && x.Body.HasInstructions))
+ foreach (var methodToRem in methods)
+ Add(method, methodToRem);
return context.Module.GetTypes().Sum(type =>
type.Methods.Where(x => x.HasBody && x.Body.HasInstructions)
diff --git a/NETReactorSlayer.Core/Helper/MyPEImage.cs b/NETReactorSlayer.Core/Helper/MyPEImage.cs
index 024157e..50bb4e2 100644
--- a/NETReactorSlayer.Core/Helper/MyPEImage.cs
+++ b/NETReactorSlayer.Core/Helper/MyPEImage.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,12 +13,12 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet.MD;
using dnlib.IO;
using dnlib.PE;
+using System;
+using System.Linq;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Helper/NativeUnpacker.cs b/NETReactorSlayer.Core/Helper/NativeUnpacker.cs
index 2f00339..d10fec3 100644
--- a/NETReactorSlayer.Core/Helper/NativeUnpacker.cs
+++ b/NETReactorSlayer.Core/Helper/NativeUnpacker.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,12 +13,12 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.Linq;
using dnlib.DotNet;
using dnlib.PE;
using ICSharpCode.SharpZipLib.Zip.Compression;
+using System;
+using System.Collections.Generic;
+using System.Linq;
namespace NETReactorSlayer.Core.Helper
{
@@ -78,9 +78,9 @@ private byte[] GetKeyData()
{
_isNet1X = false;
foreach (var item in from item in _baseOffsets
- let code = _peImage.OffsetReadBytes(item, _decryptMethodPattern.Length)
- where DeobUtils.IsCode(_decryptMethodPattern, code)
- select item)
+ let code = _peImage.OffsetReadBytes(item, _decryptMethodPattern.Length)
+ where DeobUtils.IsCode(_decryptMethodPattern, code)
+ select item)
return GetKeyData(item);
var net1XCode = _peImage.OffsetReadBytes(0x207E0, _startMethodNet1XPattern.Length);
@@ -121,8 +121,8 @@ private static void Decrypt(IReadOnlyList keyData, IList data, int o
var transformTemp = new ushort[256, 256];
for (var i = 0; i < 256; i++)
- for (var j = 0; j < 256; j++)
- transformTemp[i, j] = 0x400;
+ for (var j = 0; j < 256; j++)
+ transformTemp[i, j] = 0x400;
var counter = 0x0B;
byte newByte = 0;
var ki = 0;
@@ -166,8 +166,8 @@ private static void Decrypt(IReadOnlyList keyData, IList data, int o
}
for (var i = 0; i < 256; i++)
- for (var j = 0; j < 256; j++)
- transform[(byte)transformTemp[i, j], j] = (byte)i;
+ for (var j = 0; j < 256; j++)
+ transform[(byte)transformTemp[i, j], j] = (byte)i;
for (var i = 0; i < count; i += 1024, offset += 1024)
{
diff --git a/NETReactorSlayer.Core/Helper/QuickLZ.cs b/NETReactorSlayer.Core/Helper/QuickLZ.cs
index 304056e..fbd3cf6 100644
--- a/NETReactorSlayer.Core/Helper/QuickLZ.cs
+++ b/NETReactorSlayer.Core/Helper/QuickLZ.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Helper/QuickLZBase.cs b/NETReactorSlayer.Core/Helper/QuickLZBase.cs
index 58edbe0..61ad1a8 100644
--- a/NETReactorSlayer.Core/Helper/QuickLZBase.cs
+++ b/NETReactorSlayer.Core/Helper/QuickLZBase.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Helper/SimpleDeobfuscator.cs b/NETReactorSlayer.Core/Helper/SimpleDeobfuscator.cs
index f8071bd..0b10750 100644
--- a/NETReactorSlayer.Core/Helper/SimpleDeobfuscator.cs
+++ b/NETReactorSlayer.Core/Helper/SimpleDeobfuscator.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,14 +13,14 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.Linq;
using de4dot.blocks;
using de4dot.blocks.cflow;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Stages;
+using System;
+using System.Collections.Generic;
+using System.Linq;
namespace NETReactorSlayer.Core.Helper
{
@@ -31,7 +31,7 @@ public static void Deobfuscate(MethodDef method)
const SimpleDeobfuscatorFlags flags = 0;
if (method == null || Check(method, SimpleDeobFlags.HasDeobfuscated))
return;
- Deobfuscate(method, delegate(Blocks blocks)
+ Deobfuscate(method, delegate (Blocks blocks)
{
const bool disableNewCfCode = (flags & SimpleDeobfuscatorFlags.DisableConstantsFolderExtraInstrs) > 0U;
var cflowDeobfuscator =
@@ -166,6 +166,7 @@ protected override void OnInlinedMethod(MethodDef methodToInline, bool inlinedMe
if (!inlinedMethod || methodToInline.IsPublic)
return;
Cleaner.AddMethodToBeRemoved(methodToInline);
+ // CodeExplorer was edit:
MethodInliner.InlinedMethods++;
}
}
diff --git a/NETReactorSlayer.Core/Helper/StringCounts.cs b/NETReactorSlayer.Core/Helper/StringCounts.cs
index 061400c..487571e 100644
--- a/NETReactorSlayer.Core/Helper/StringCounts.cs
+++ b/NETReactorSlayer.Core/Helper/StringCounts.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Helper/TheAssemblyResolver.cs b/NETReactorSlayer.Core/Helper/TheAssemblyResolver.cs
index a3a8720..409f2b4 100644
--- a/NETReactorSlayer.Core/Helper/TheAssemblyResolver.cs
+++ b/NETReactorSlayer.Core/Helper/TheAssemblyResolver.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,12 +13,12 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
-using dnlib.DotNet;
namespace NETReactorSlayer.Core.Helper
{
diff --git a/NETReactorSlayer.Core/Info.cs b/NETReactorSlayer.Core/Info.cs
index 8afb8f2..9adaa00 100644
--- a/NETReactorSlayer.Core/Info.cs
+++ b/NETReactorSlayer.Core/Info.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Logger.cs b/NETReactorSlayer.Core/Logger.cs
index 9b7b05b..51b18dc 100644
--- a/NETReactorSlayer.Core/Logger.cs
+++ b/NETReactorSlayer.Core/Logger.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,10 +13,10 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using NETReactorSlayer.Core.Abstractions;
using System;
using System.Collections.Generic;
using System.Reflection;
-using NETReactorSlayer.Core.Abstractions;
namespace NETReactorSlayer.Core
{
@@ -105,17 +105,17 @@ public void PrintLogo()
Console.Clear();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(@"
- ░█▄─░█ ░█▀▀▀ ▀▀█▀▀
- ░█░█░█ ░█▀▀▀ ─░█──
- ░█──▀█ ░█▄▄▄ ─░█──
+ ???��?? ????? ?????
+ ?????? ????? ��??����
+ ??����?? ????? ��??����
- ░█▀▀█ ░█▀▀▀ ─█▀▀█ ░█▀▀█ ▀▀█▀▀ ░█▀▀▀█ ░█▀▀█
- ░█▄▄▀ ░█▀▀▀ ░█▄▄█ ░█─── ─░█── ░█──░█ ░█▄▄▀
- ░█─░█ ░█▄▄▄ ░█─░█ ░█▄▄█ ─░█── ░█▄▄▄█ ░█─░█
+ ????? ????? ��???? ????? ????? ?????? ?????
+ ????? ????? ????? ??������ ��??���� ??����?? ?????
+ ??��?? ????? ??��?? ????? ��??���� ?????? ??��??
- ░█▀▀▀█ ░█─── ─█▀▀█ ░█──░█ ░█▀▀▀ ░█▀▀█
- ─▀▀▀▄▄ ░█─── ░█▄▄█ ░█▄▄▄█ ░█▀▀▀ ░█▄▄▀
- ░█▄▄▄█ ░█▄▄█ ░█─░█ ──░█── ░█▄▄▄ ░█─░█
+ ?????? ??������ ��???? ??����?? ????? ?????
+ ��????? ??������ ????? ?????? ????? ?????
+ ?????? ????? ??��?? ����??���� ????? ??��??
");
Console.ForegroundColor = ConsoleColor.White;
diff --git a/NETReactorSlayer.Core/NETReactorSlayer.Core.csproj b/NETReactorSlayer.Core/NETReactorSlayer.Core.csproj
index 365bca2..564948d 100644
--- a/NETReactorSlayer.Core/NETReactorSlayer.Core.csproj
+++ b/NETReactorSlayer.Core/NETReactorSlayer.Core.csproj
@@ -1,4 +1,4 @@
-
+
@@ -6,6 +6,9 @@
..\bin\$(Configuration)\
Library
+ True
+ AnyCPU
+ net48;net6.0;net7.0;net9.0;netcoreapp3.1
@@ -18,8 +21,8 @@
..\Libs\netcoreapp3.1\de4dot.blocks.dll
-
-
+
+
diff --git a/NETReactorSlayer.Core/Options.cs b/NETReactorSlayer.Core/Options.cs
index 4ed105e..c50e5e1 100644
--- a/NETReactorSlayer.Core/Options.cs
+++ b/NETReactorSlayer.Core/Options.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,12 +13,12 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Stages;
using NETReactorSlayer.De4dot.Renamer;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
using MemberInfo = System.Reflection.MemberInfo;
namespace NETReactorSlayer.Core
@@ -126,36 +126,36 @@ public Options(IReadOnlyList args)
RemoveStage(typeof(SymbolRenamer));
break;
case "--rename":
- {
- var chars = value.ToCharArray();
- RenamerFlags = RenamerFlags.RenameMethodArgs | RenamerFlags.RenameGenericParams;
- foreach (var @char in chars)
- switch (@char)
- {
- case 'n':
- RenamerFlags |= RenamerFlags.RenameNamespaces;
- break;
- case 't':
- RenamerFlags |= RenamerFlags.RenameTypes;
- break;
- case 'm':
- RenamerFlags |= RenamerFlags.RenameMethods;
- break;
- case 'f':
- RenamerFlags |= RenamerFlags.RenameFields;
- break;
- case 'p':
- RenamerFlags |= RenamerFlags.RenameProperties | RenamerFlags.RestoreProperties |
- RenamerFlags.RestorePropertiesFromNames;
- break;
- case 'e':
- RenamerFlags |= RenamerFlags.RenameEvents | RenamerFlags.RestoreEvents |
- RenamerFlags.RestoreEventsFromNames;
- break;
- }
+ {
+ var chars = value.ToCharArray();
+ RenamerFlags = RenamerFlags.RenameMethodArgs | RenamerFlags.RenameGenericParams;
+ foreach (var @char in chars)
+ switch (@char)
+ {
+ case 'n':
+ RenamerFlags |= RenamerFlags.RenameNamespaces;
+ break;
+ case 't':
+ RenamerFlags |= RenamerFlags.RenameTypes;
+ break;
+ case 'm':
+ RenamerFlags |= RenamerFlags.RenameMethods;
+ break;
+ case 'f':
+ RenamerFlags |= RenamerFlags.RenameFields;
+ break;
+ case 'p':
+ RenamerFlags |= RenamerFlags.RenameProperties | RenamerFlags.RestoreProperties |
+ RenamerFlags.RestorePropertiesFromNames;
+ break;
+ case 'e':
+ RenamerFlags |= RenamerFlags.RenameEvents | RenamerFlags.RestoreEvents |
+ RenamerFlags.RestoreEventsFromNames;
+ break;
+ }
- break;
- }
+ break;
+ }
}
}
@@ -217,7 +217,7 @@ private void RemoveStage(MemberInfo memberInfo) =>
new MethodDecrypter(),
new ControlFlowDeobfuscator(),
new AntiManipulationPatcher(),
- new MethodInliner(),
+ new MethodInliner(), // one before
new ProxyCallFixer(),
new StringDecrypter(),
new ResourceResolver(),
@@ -225,6 +225,7 @@ private void RemoveStage(MemberInfo memberInfo) =>
new CosturaDumper(),
new TokenDeobfuscator(),
new BooleanDecrypter(),
+ new MethodInliner(), // one after BooleanDecrypter
new StrongNamePatcher(),
new TypeRestorer(),
new Cleaner(),
diff --git a/NETReactorSlayer.Core/Program.cs b/NETReactorSlayer.Core/Program.cs
index b09864b..322755b 100644
--- a/NETReactorSlayer.Core/Program.cs
+++ b/NETReactorSlayer.Core/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,6 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using NETReactorSlayer.Core.Abstractions;
+using NETReactorSlayer.Core.Helper;
+using NETReactorSlayer.Core.Stages;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -20,9 +23,6 @@ You should have received a copy of the GNU General Public License
using System.Linq;
using System.Text;
using System.Threading;
-using NETReactorSlayer.Core.Abstractions;
-using NETReactorSlayer.Core.Helper;
-using NETReactorSlayer.Core.Stages;
namespace NETReactorSlayer.Core
{
diff --git a/NETReactorSlayer.Core/Stages/AntiManipulationPatcher.cs b/NETReactorSlayer.Core/Stages/AntiManipulationPatcher.cs
index 38858ed..3b5dfda 100644
--- a/NETReactorSlayer.Core/Stages/AntiManipulationPatcher.cs
+++ b/NETReactorSlayer.Core/Stages/AntiManipulationPatcher.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,11 +13,11 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
+using System.Linq;
namespace NETReactorSlayer.Core.Stages
{
diff --git a/NETReactorSlayer.Core/Stages/AssemblyResolver.cs b/NETReactorSlayer.Core/Stages/AssemblyResolver.cs
index 389c9bf..1217bd6 100644
--- a/NETReactorSlayer.Core/Stages/AssemblyResolver.cs
+++ b/NETReactorSlayer.Core/Stages/AssemblyResolver.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,14 +13,14 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
namespace NETReactorSlayer.Core.Stages
{
@@ -56,30 +56,30 @@ public void Run(IContext context)
private void FindRequirements()
{
foreach (var type in from x in Context.Module.GetTypes()
- where x.HasFields && !x.HasNestedTypes && !x.HasEvents && !x.HasProperties
- select x)
- foreach (var method in from x in type.Methods.ToArray()
- where x.HasBody && x.Body.HasInstructions && x.IsStatic &&
- DotNetUtils.IsMethod(x, "System.Void", "()") && x.DeclaringType != null
- select x)
- foreach (var instr in method.Body.Instructions)
- try
- {
- if (instr.Operand == null || !instr.Operand.ToString()!.Contains("add_AssemblyResolve"))
- continue;
- if (!CheckFields(method.DeclaringType.Fields))
- continue;
- if (!FindResolverMethod(type, out var methodDef))
- continue;
- var localTypes = new LocalTypes(methodDef);
- if (!localTypes.All(_locals1) && !localTypes.All(_locals2) && !localTypes.All(_locals3))
- continue;
- _resolverMethod = methodDef;
- _resolverType = type;
- _initialMethod = method;
- return;
- }
- catch { }
+ where x.HasFields && !x.HasNestedTypes && !x.HasEvents && !x.HasProperties
+ select x)
+ foreach (var method in from x in type.Methods.ToArray()
+ where x.HasBody && x.Body.HasInstructions && x.IsStatic &&
+ DotNetUtils.IsMethod(x, "System.Void", "()") && x.DeclaringType != null
+ select x)
+ foreach (var instr in method.Body.Instructions)
+ try
+ {
+ if (instr.Operand == null || !instr.Operand.ToString()!.Contains("add_AssemblyResolve"))
+ continue;
+ if (!CheckFields(method.DeclaringType.Fields))
+ continue;
+ if (!FindResolverMethod(type, out var methodDef))
+ continue;
+ var localTypes = new LocalTypes(methodDef);
+ if (!localTypes.All(_locals1) && !localTypes.All(_locals2) && !localTypes.All(_locals3))
+ continue;
+ _resolverMethod = methodDef;
+ _resolverType = type;
+ _initialMethod = method;
+ return;
+ }
+ catch { }
}
private static bool FindResolverMethod(TypeDef type, out MethodDef method)
diff --git a/NETReactorSlayer.Core/Stages/BooleanDecrypter.cs b/NETReactorSlayer.Core/Stages/BooleanDecrypter.cs
index 9fdbb56..0e6f09a 100644
--- a/NETReactorSlayer.Core/Stages/BooleanDecrypter.cs
+++ b/NETReactorSlayer.Core/Stages/BooleanDecrypter.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,13 +13,13 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Linq;
namespace NETReactorSlayer.Core.Stages
{
diff --git a/NETReactorSlayer.Core/Stages/Cleaner.cs b/NETReactorSlayer.Core/Stages/Cleaner.cs
index cfea88e..c7e269b 100644
--- a/NETReactorSlayer.Core/Stages/Cleaner.cs
+++ b/NETReactorSlayer.Core/Stages/Cleaner.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,13 +13,19 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
-using System.Linq;
+
+
+
+
+
+
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System.Collections.Generic;
+using System.Linq;
namespace NETReactorSlayer.Core.Stages
{
@@ -174,10 +180,10 @@ private void FindAndRemoveDummyTypes(MethodDef method)
method != Context.Module.EntryPoint))
return;
foreach (var calledMethod in from calledMethod in DotNetUtils.GetCalledMethods(Context.Module, method)
- where calledMethod.IsStatic && calledMethod.Body != null
- where DotNetUtils.IsMethod(calledMethod, "System.Void", "()")
- where IsEmptyMethod(calledMethod)
- select calledMethod)
+ where calledMethod.IsStatic && calledMethod.Body != null
+ where DotNetUtils.IsMethod(calledMethod, "System.Void", "()")
+ where IsEmptyMethod(calledMethod)
+ select calledMethod)
_methodCallCounter?.Add(calledMethod);
var numCalls = 0;
diff --git a/NETReactorSlayer.Core/Stages/ControlFlowDeobfuscator.cs b/NETReactorSlayer.Core/Stages/ControlFlowDeobfuscator.cs
index e02dbbb..08523ce 100644
--- a/NETReactorSlayer.Core/Stages/ControlFlowDeobfuscator.cs
+++ b/NETReactorSlayer.Core/Stages/ControlFlowDeobfuscator.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,13 +13,15 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.InteropServices;
namespace NETReactorSlayer.Core.Stages
{
@@ -28,9 +30,10 @@ internal class ControlFlowDeobfuscator : IStage
public void Run(IContext context)
{
Context = context;
- if (_fields.Count == 0)
+ if (int_fields.Count == 0)
Initialize();
long count = 0;
+ long CountInlined = 0;
foreach (var method in Context.Module.GetTypes().SelectMany(type =>
(from x in type.Methods where x.HasBody && x.Body.HasInstructions select x)
.ToArray()))
@@ -40,17 +43,49 @@ public void Run(IContext context)
SimpleDeobfuscator.DeobfuscateBlocks(method);
}
+
+
+ foreach (var method in Context.Module.GetTypes().SelectMany(type =>
+
+ (from x in type.Methods where x.HasBody && x.Body.HasInstructions select x)
+
+ .ToArray()))
+ {
+ //SimpleDeobfuscator.Deobfuscate(method);
+ CountInlined += InlineBoolean(method);
+ //SimpleDeobfuscator.DeobfuscateBlocks(method);
+ }
+
+
+
+ foreach (var method in Context.Module.GetTypes().SelectMany(type =>
+
+ (from x in type.Methods where x.HasBody && x.Body.HasInstructions select x)
+
+ .ToArray()))
+ {
+ SimpleDeobfuscator.Deobfuscate(method);
+ //CountInlined += InlineBoolean(method);
+ SimpleDeobfuscator.DeobfuscateBlocks(method);
+ }
+
if (count > 0)
Context.Logger.Info(count + " Equations resolved.");
else
Context.Logger.Warn(
"Couldn't find any equation to resolve.");
+
+
+
+ if (CountInlined > 0)
+ Context.Logger.Info(CountInlined + " ints inlined.");
+
}
private void Initialize()
{
FindFieldsStatically();
- if (_fields.Count < 1)
+ if (int_fields.Count < 1)
FindFieldsDynamically();
}
@@ -63,7 +98,27 @@ private void FindFieldsStatically()
x.Fields.Count(f =>
f.FieldType.FullName == "System.Int32" && f.IsAssembly && !f.HasConstant) >= 100))
{
- _fields.Clear();
+
+
+ int_fields.Clear();
+
+ byte_fields.Clear();
+ sbyte_fields.Clear();
+
+ char_fields.Clear();
+
+ string_fields.Clear();
+
+ float_fields.Clear();
+
+ double_fields.Clear();
+ short_fields.Clear();
+ ushort_fields.Clear();
+ uint_fields.Clear();
+ long_fields.Clear();
+ ulong_fields.Clear();
+ bool_fields.Clear();
+
foreach (var method in type.Methods.Where(x =>
x.IsStatic && x.IsAssembly && x.HasBody && x.Body.HasInstructions))
{
@@ -85,23 +140,35 @@ private void FindFieldsStatically()
? method.Body.Instructions[i + 1]
: null)?.Operand;
var value = method.Body.Instructions[i].GetLdcI4Value();
- if (key != null && !_fields.ContainsKey(key))
- _fields.Add(key, value);
+ if (key != null && !int_fields.ContainsKey(key))
+ int_fields.Add(key, value);
else if (key != null)
- _fields[key] = value;
+ int_fields[key] = value;
}
- if (_fields.Count != 0)
+ if (int_fields.Count != 0)
typeDef = type;
goto Continue;
}
}
- Continue:
+
+
+ Continue:
if (typeDef != null)
Cleaner.AddTypeToBeRemoved(typeDef);
}
+
+
+ // https://www.cnblogs.com/Fred1987/p/18603592
+
+ //copy from,https://gist.github.com/6rube/34b561827f0805f73742541b8b8bb770
+
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)]
+
+ static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
+
private void FindFieldsDynamically()
{
TypeDef typeDef = null;
@@ -109,7 +176,8 @@ private void FindFieldsDynamically()
x => x.IsSealed &&
x.HasFields &&
x.Fields.Count(f =>
- f.FieldType.FullName == "System.Int32" && f.IsAssembly && !f.HasConstant) >= 100))
+ (f.FieldType.FullName == "System.Int32")
+ && f.IsAssembly && !f.HasConstant) >= 100))
{
if ((Context.Info.NativeStub && Context.Info.NecroBit)
|| !Context.Info.UsesReflection)
@@ -118,27 +186,247 @@ private void FindFieldsDynamically()
return;
}
- _fields.Clear();
+ int_fields.Clear();
+
+ byte_fields.Clear();
+ sbyte_fields.Clear();
+
+ char_fields.Clear();
+
+ string_fields.Clear();
- if (type.Fields.Where(x => x.FieldType.FullName == "System.Int32").All(x => x.IsStatic))
- foreach (var field in type.Fields.Where(x => x.FieldType.FullName == "System.Int32"))
+ float_fields.Clear();
+
+ double_fields.Clear();
+ short_fields.Clear();
+ ushort_fields.Clear();
+ uint_fields.Clear();
+ long_fields.Clear();
+ ulong_fields.Clear();
+ bool_fields.Clear();
+
+ bool FirstTime = true;
+
+ if (type.Fields.Where(x => x.FieldType.FullName == "System.Int32" || x.FieldType.FullName == "System.UInt32" ||
+ x.FieldType.FullName == "System.Int16" || x.FieldType.FullName == "System.UInt16" ||
+ x.FieldType.FullName == "System.Int64" || x.FieldType.FullName == "System.UInt64" || x.FieldType.FullName == "System.Boolean" ||
+ x.FieldType.FullName == "System.Byte" || x.FieldType.FullName == "System.SByte" || x.FieldType.FullName == "System.Char" || x.FieldType.FullName == "System.String" ||
+ x.FieldType.FullName == "System.Single" || x.FieldType.FullName == "System.Double").All(x => x.IsStatic))
+ foreach (var field in type.Fields.Where(x => x.FieldType.FullName == "System.Int32" || x.FieldType.FullName == "System.UInt32" || x.FieldType.FullName == "System.Int64" || x.FieldType.FullName == "System.UInt64" || x.FieldType.FullName == "System.Boolean" ||
+ x.FieldType.FullName == "System.Int16" || x.FieldType.FullName == "System.UInt16" || x.FieldType.FullName == "System.Byte" || x.FieldType.FullName == "System.SByte" || x.FieldType.FullName == "System.Char" || x.FieldType.FullName == "System.String" || x.FieldType.FullName == "System.Single" || x.FieldType.FullName == "System.Double"))
try
{
- var obj = Context.Assembly.ManifestModule.ResolveField((int)field.MDToken.Raw)
+ object obj = Context.Assembly.ManifestModule.ResolveField((int)field.MDToken.Raw)
.GetValue(null);
- if (obj == null || !int.TryParse(obj.ToString(), out var value))
- continue;
- if (!_fields.ContainsKey(field))
- _fields.Add(field, value);
- else
- _fields[field] = value;
+
+ if (obj == null) continue;
+
+ if (obj is int)
+ {
+
+ int value = (int)obj;
+
+ if (!int_fields.ContainsKey(field))
+
+ int_fields.Add(field, value);
+
+ else
+
+ int_fields[field] = value;
+ }
+
+ else if (obj is uint)
+ {
+
+ uint uvalue = (uint)obj;
+
+ if (!uint_fields.ContainsKey(field))
+
+ uint_fields.Add(field, uvalue);
+
+ else
+
+ uint_fields[field] = uvalue;
+
+ }
+
+ if (obj is short)
+ {
+
+ short shortvalue = (short)obj;
+
+ if (!short_fields.ContainsKey(field))
+
+ short_fields.Add(field, shortvalue);
+
+ else
+
+ short_fields[field] = shortvalue;
+ }
+
+ else if (obj is ushort)
+ {
+
+ ushort ushortvalue = (ushort)obj;
+
+ if (!ushort_fields.ContainsKey(field))
+
+ ushort_fields.Add(field, ushortvalue);
+
+ else
+
+ ushort_fields[field] = ushortvalue;
+
+ }
+
+ else if (obj is ulong)
+ {
+
+ ulong ulvalue = (ulong)obj;
+
+ if (!ulong_fields.ContainsKey(field))
+
+ ulong_fields.Add(field, ulvalue);
+
+ else
+
+ ulong_fields[field] = ulvalue;
+ }
+
+ else if (obj is long)
+ {
+
+ long lvalue = (long)obj;
+
+ if (!long_fields.ContainsKey(field))
+
+ long_fields.Add(field, lvalue);
+
+ else
+
+ long_fields[field] = lvalue;
+ }
+
+ else if (obj is byte)
+ {
+
+ byte bvalue = (byte)obj;
+
+ if (!byte_fields.ContainsKey(field))
+
+ byte_fields.Add(field, bvalue);
+
+ else
+
+ byte_fields[field] = bvalue;
+ }
+
+ else if (obj is sbyte)
+ {
+
+ sbyte svalue = (sbyte)obj;
+
+ if (!sbyte_fields.ContainsKey(field))
+
+ sbyte_fields.Add(field, svalue);
+
+ else
+
+ sbyte_fields[field] = svalue;
+ }
+
+ else if (obj is bool)
+ {
+
+ bool bvalue = (bool)obj;
+
+ if (!bool_fields.ContainsKey(field))
+
+ bool_fields.Add(field, bvalue);
+
+ else
+
+ bool_fields[field] = bvalue;
+ }
+
+ else if (obj is char)
+ {
+
+ char charvalue = (char)obj;
+
+ if (!char_fields.ContainsKey(field))
+
+ char_fields.Add(field, charvalue);
+
+ else
+
+ char_fields[field] = charvalue;
+
+ }
+
+ else if (obj is string)
+ {
+
+ string strvalue = (string)obj;
+
+ if (!string_fields.ContainsKey(field))
+
+ string_fields.Add(field, strvalue);
+
+ else
+
+ string_fields[field] = strvalue;
+
+ }
+
+ else if (obj is float)
+
+ {
+
+ float fvalue = (float)obj;
+
+ if (!float_fields.ContainsKey(field))
+
+ float_fields.Add(field, fvalue);
+
+ else
+
+ float_fields[field] = fvalue;
+
+ }
+
+ else if (obj is double)
+
+ {
+
+ double dvalue = (double)obj;
+
+ if (!double_fields.ContainsKey(field))
+
+ double_fields.Add(field, dvalue);
+
+ else
+
+ double_fields[field] = dvalue;
+
+ }
+ }
+ catch (Exception exc)
+ {
+ if (FirstTime)
+ {
+
+ MessageBox(new IntPtr(0), exc.ToString(), "Exception on Arithmetic fields", 0);
+
+ FirstTime = false;
+
+ }
}
- catch { }
else if (type.Fields.Where(x => x.FieldType.FullName == "System.Int32").All(x => !x.IsStatic))
foreach (var instances in type.Fields.Where(x => x.FieldType.ToTypeDefOrRef().Equals(type)))
try
{
- var instance = Context.Assembly.ManifestModule.ResolveField((int)instances.MDToken.Raw)
+ object instance = Context.Assembly.ManifestModule.ResolveField((int)instances.MDToken.Raw)
.GetValue(null);
if (instance == null)
continue;
@@ -153,27 +441,121 @@ private void FindFieldsDynamically()
x.MDToken.ToInt32().Equals(runtimeField.MetadataToken));
if (field == null)
continue;
- if (runtimeField.GetValue(instance) is not int value)
- continue;
- if (!_fields.ContainsKey(field))
- _fields.Add(field, value);
- else
- _fields[field] = value;
+
+ object obj = runtimeField.GetValue(instance);
+
+ if (obj == null) continue;
+
+ int value = 0;
+ if (obj is int)
+ {
+
+ value = (int)obj;
+
+ if (!int_fields.ContainsKey(field))
+
+ int_fields.Add(field, value);
+
+ else
+
+ int_fields[field] = value;
+ }
+
+ // For non-static fields is only int
+
+ /*
+
+ else if (obj is byte)
+
+ {
+
+ byte bvalue = (byte)obj;
+
+ if (!byte_fields.ContainsKey(field))
+
+ byte_fields.Add(field, bvalue);
+
+ else
+
+ byte_fields[field] = bvalue;
+
+ }
+
+ else if (obj is sbyte)
+
+ {
+
+ sbyte svalue = (sbyte)obj;
+
+ if (!sbyte_fields.ContainsKey(field))
+
+ sbyte_fields.Add(field, svalue);
+
+ else
+
+ sbyte_fields[field] = svalue;
+
+ }
+ else if (obj is float)
+ {
+
+ float fvalue = (float)obj;
+
+ if (!float_fields.ContainsKey(field))
+
+ float_fields.Add(field, fvalue);
+
+ else
+
+ float_fields[field] = fvalue;
+
+ }
+
+ else if (obj is double)
+
+ {
+
+ double dvalue = (double)obj;
+
+ if (!double_fields.ContainsKey(field))
+
+ double_fields.Add(field, dvalue);
+
+ else
+
+ double_fields[field] = dvalue;
+
+ }
+
+ */
+
}
break;
}
- catch { }
+ catch (Exception exc)
+ {
+
+ if (FirstTime)
+
+ {
+
+ MessageBox(new IntPtr(0), exc.ToString(), "Exception on Arithmetic fields", 0);
+
+ FirstTime = false;
+
+ }
+ }
- if (_fields.Count < 100)
+ if (int_fields.Count < 100)
continue;
typeDef = type;
break;
}
- if (_fields.All(x => x.Value == 0))
+ if (int_fields.All(x => x.Value == 0))
{
- _fields.Clear();
+ int_fields.Clear();
return;
}
@@ -181,31 +563,642 @@ private void FindFieldsDynamically()
Cleaner.AddTypeToBeRemoved(typeDef);
}
- private long Arithmetic(MethodDef method)
+ public static bool IsLdc(Instruction ins)
+
{
- long count = 0;
- for (var i = 0; i < method.Body.Instructions.Count; i++)
- try
- {
- if ((method.Body.Instructions[i].OpCode != OpCodes.Ldsfld &&
- method.Body.Instructions[i].OpCode != OpCodes.Ldfld) ||
- method.Body.Instructions[i].Operand is not IField ||
- !_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var value) ||
- method.DeclaringType == _fields.First().Key.DeclaringType)
- continue;
- if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
- method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
- method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
- method.Body.Instructions[i] = Instruction.CreateLdcI4(value);
- count++;
- }
- catch { }
- return count;
- }
+ switch (ins.OpCode.Code)
+ {
+
+ case Code.Ldc_I4_M1:
+
+ case Code.Ldc_I4_0:
+
+ case Code.Ldc_I4_1:
+
+ case Code.Ldc_I4_2:
+
+ case Code.Ldc_I4_3:
+
+ case Code.Ldc_I4_4:
+
+ case Code.Ldc_I4_5:
+
+ case Code.Ldc_I4_6:
+
+ case Code.Ldc_I4_7:
+
+ case Code.Ldc_I4_8:
+
+ case Code.Ldc_I4_S:
+
+ case Code.Ldc_I4:
+
+ return true;
+
+
+
+ default:
+
+ return false;
+
+ }
+
+
+
+ }
+
+ private long InlineBoolean(MethodDef method)
+
+ {
+
+
+
+ long count = 0;
+
+
+
+ for (var i = 0; i < method.Body.Instructions.Count; i++)
+ try
+ {
+ if (method.Body.Instructions[i].OpCode != OpCodes.Call ||
+ method.Body.Instructions[i].Operand is not MethodDef)
+ continue;
+
+
+
+ MethodDef mdef = method.Body.Instructions[i].Operand as MethodDef;
+
+ if (!mdef.IsStatic) continue;
+
+
+
+ if (!mdef.HasBody || !mdef.Body.HasInstructions)
+
+ continue;
+
+
+
+ /*
+
+
+
+ // Token: 0x06000108 RID: 264 RVA: 0x00002622 File Offset: 0x00000822
+
+ .method assembly hidebysig static
+
+ bool smethod_17 () cil managed
+
+ {
+
+ // Header Size: 1 byte
+
+ // Code Size: 5 (0x5) bytes
+
+ .maxstack 8
+
+
+
+ /* 0x00000823 14 */
+
+ // IL_0000: ldnull
+
+ ///* 0x00000824 14 */ IL_0001: ldnull
+
+ ///* 0x00000825 FE01 */ IL_0002: ceq
+
+ ///* 0x00000827 2A */ IL_0004: ret
+
+
+
+ // } // end of method Class9::smethod_17
+
+ // */
+
+
+
+ if (mdef.Body.Instructions.Count == 4)
+
+ {
+
+ if (mdef.Body.Instructions[0].OpCode == OpCodes.Ldnull &&
+
+ mdef.Body.Instructions[1].OpCode == OpCodes.Ldnull &&
+
+ mdef.Body.Instructions[3].OpCode == OpCodes.Ret)
+
+ {
+
+ if (mdef.Body.Instructions[2].OpCode == OpCodes.Ceq)
+
+ {
+
+ method.Body.Instructions[i].OpCode = OpCodes.Ldc_I4_1;
+
+ method.Body.Instructions[i].Operand = null;
+
+ }
+
+
+
+ }
+
+ }
+
+
+
+ if (mdef.Body.Instructions.Count != 2)
+
+ continue;
+
+
+
+ if (!IsLdc(mdef.Body.Instructions[0]))
+
+ continue;
+
+
+
+ if (mdef.Body.Instructions[1].OpCode != OpCodes.Ret)
+
+ continue;
+
+
+
+ Instruction ldci = Instruction.CreateLdcI4(mdef.Body.Instructions[0].GetLdcI4Value());
+
+ method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ method.Body.Instructions[i].Operand = ldci.Operand;
+
+ ldci = null;
+
+ count++;
+
+
+
+
+
+ }
+
+ catch
+
+ {
+
+
+
+ }
+
+
+
+ return count;
+
+ }
+
+ private long Arithmetic(MethodDef method)
+ {
+ long count = 0;
+ for (var i = 0; i < method.Body.Instructions.Count; i++)
+ try
+ {
+ if ((method.Body.Instructions[i].OpCode != OpCodes.Ldsfld &&
+ method.Body.Instructions[i].OpCode != OpCodes.Ldfld) ||
+ method.Body.Instructions[i].Operand is not IField)
+ continue;
+
+
+
+ if (int_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var value) &&
+
+ method.DeclaringType != int_fields.First().Key.DeclaringType)
+ {
+
+ //if (!((FieldDef)method.Body.Instructions[i].Operand).IsStatic)
+
+ //{
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+ //}
+
+
+
+ Instruction ldci = Instruction.CreateLdcI4(value);
+
+ method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ method.Body.Instructions[i].Operand = ldci.Operand;
+
+ ldci = null;
+
+ count++;
+
+
+
+ }
+
+
+
+ if (bool_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var boolvalue) &&
+
+ method.DeclaringType != bool_fields.First().Key.DeclaringType)
+ {
+
+ //if (!((FieldDef)method.Body.Instructions[i].Operand).IsStatic)
+
+ //{
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+ //}
+
+
+
+ //Instruction ldci = Instruction.CreateLdcI4((int)uivalue);
+
+ //method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ // method.Body.Instructions[i].Operand = ldci.Operand;
+
+
+
+ if (boolvalue == false)
+
+ {
+
+ method.Body.Instructions[i].OpCode = OpCodes.Ldc_I4_0;
+
+ method.Body.Instructions[i].Operand = null;
+
+ }
+
+ else
+
+ {
+
+ method.Body.Instructions[i].OpCode = OpCodes.Ldc_I4_1;
+
+ method.Body.Instructions[i].Operand = null;
+
+ }
+
+
+
+ count++;
+
+
+
+ }
+
+ if (uint_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var uivalue) &&
+
+ method.DeclaringType != uint_fields.First().Key.DeclaringType)
+ {
+
+ //if (!((FieldDef)method.Body.Instructions[i].Operand).IsStatic)
+
+ //{
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+ //}
+
+
+
+ Instruction ldci = Instruction.CreateLdcI4((int)uivalue);
+
+ method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ method.Body.Instructions[i].Operand = ldci.Operand;
+
+ ldci = null;
+
+ count++;
+
+
+
+ }
+
+
+
+ if (long_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var lvalue) &&
+
+ method.DeclaringType != long_fields.First().Key.DeclaringType)
+ {
+
+ //if (!((FieldDef)method.Body.Instructions[i].Operand).IsStatic)
+
+ //{
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+ //}
+
+ method.Body.Instructions[i].OpCode = OpCodes.Ldc_I8;
+
+ method.Body.Instructions[i].Operand = (long)lvalue;
+
+ count++;
+
+
+
+ }
+
+
+
+ if (ulong_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var ulvalue) &&
+
+ method.DeclaringType != ulong_fields.First().Key.DeclaringType)
+ {
+
+ //if (!((FieldDef)method.Body.Instructions[i].Operand).IsStatic)
+
+ //{
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+ //}
+
+ method.Body.Instructions[i].OpCode = OpCodes.Ldc_I8;
+
+ method.Body.Instructions[i].Operand = (long)ulvalue;
+
+ count++;
+
+
+
+ }
+
+
+
+ if (short_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var svalue) &&
+
+ method.DeclaringType != short_fields.First().Key.DeclaringType)
+ {
+
+ //if (!((FieldDef)method.Body.Instructions[i].Operand).IsStatic)
+
+ //{
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+ //}
+
+
+
+ Instruction ldci = Instruction.CreateLdcI4((int)svalue);
+
+ method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ method.Body.Instructions[i].Operand = ldci.Operand;
+
+ ldci = null;
+
+ count++;
+
+
+
+ }
+
+
+
+ if (ushort_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var usvalue) &&
+
+ method.DeclaringType != ushort_fields.First().Key.DeclaringType)
+ {
+
+ //if (!((FieldDef)method.Body.Instructions[i].Operand).IsStatic)
+
+ //{
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+ //}
+
+
+
+ Instruction ldci = Instruction.CreateLdcI4((int)usvalue);
+
+ method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ method.Body.Instructions[i].Operand = ldci.Operand;
+
+ ldci = null;
+
+ count++;
+
+
+
+ }
+
+
+
+ if (byte_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var bvalue) &&
+
+ method.DeclaringType != byte_fields.First().Key.DeclaringType)
+ {
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+
+
+ Instruction ldci = Instruction.CreateLdcI4((int)bvalue);
+
+ method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ method.Body.Instructions[i].Operand = ldci.Operand;
+
+ ldci = null;
+
+ count++;
+
+ }
+
+
+
+ if (sbyte_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var sbvalue) &&
+
+ method.DeclaringType != sbyte_fields.First().Key.DeclaringType)
+ {
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+
+
+ Instruction ldci = Instruction.CreateLdcI4((int)sbvalue);
+
+ method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ method.Body.Instructions[i].Operand = ldci.Operand;
+
+ ldci = null;
+
+ count++;
+
+ }
+
+
+
+ if (char_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var cvalue) &&
+
+ method.DeclaringType != char_fields.First().Key.DeclaringType)
+ {
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+
+
+ Instruction ldci = Instruction.CreateLdcI4((int)cvalue);
+
+ method.Body.Instructions[i].OpCode = ldci.OpCode;
+
+ method.Body.Instructions[i].Operand = ldci.Operand;
+
+ ldci = null;
+
+ count++;
+
+ }
+
+
+
+ if (string_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var stringvalue) &&
+
+ method.DeclaringType != string_fields.First().Key.DeclaringType)
+ {
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+
+
+ method.Body.Instructions[i].OpCode = OpCodes.Ldstr;
+
+ method.Body.Instructions[i].Operand = (string)stringvalue;
+
+ count++;
+
+
+
+ }
+
+
+
+ if (float_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var fvalue) &&
+
+ method.DeclaringType != float_fields.First().Key.DeclaringType)
+ {
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+
+
+ method.Body.Instructions[i].OpCode = OpCodes.Ldc_R4;
+
+ method.Body.Instructions[i].Operand = (float)fvalue;
+
+ count++;
+
+ }
+
+
+
+ if (double_fields.TryGetValue((IField)method.Body.Instructions[i].Operand, out var dvalue) &&
+
+ method.DeclaringType != double_fields.First().Key.DeclaringType)
+ {
+
+ if (method.Body.Instructions[i].OpCode == OpCodes.Ldfld &&
+
+ method.Body.Instructions[i - 1].OpCode == OpCodes.Ldsfld)
+
+ method.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
+
+
+
+ method.Body.Instructions[i].OpCode = OpCodes.Ldc_R8;
+
+ method.Body.Instructions[i].Operand = (double)dvalue;
+
+ count++;
+
+ }
+
+ }
+ catch { }
+
+ return count;
+ }
+
+
+ private IContext Context { get; set; }
+ private readonly Dictionary int_fields = new();
+
+ private readonly Dictionary float_fields = new();
+ private readonly Dictionary double_fields = new();
+
+ private readonly Dictionary byte_fields = new();
+
+ private readonly Dictionary sbyte_fields = new();
+
+ private readonly Dictionary string_fields = new();
+
+ private readonly Dictionary char_fields = new();
+
+ private readonly Dictionary short_fields = new();
+ private readonly Dictionary ushort_fields = new();
+ private readonly Dictionary uint_fields = new();
+ private readonly Dictionary long_fields = new();
+ private readonly Dictionary ulong_fields = new();
+ private readonly Dictionary bool_fields = new();
- private IContext Context { get; set; }
- private readonly Dictionary _fields = new();
}
}
\ No newline at end of file
diff --git a/NETReactorSlayer.Core/Stages/CosturaDumper.cs b/NETReactorSlayer.Core/Stages/CosturaDumper.cs
index 828775c..ae6d3f0 100644
--- a/NETReactorSlayer.Core/Stages/CosturaDumper.cs
+++ b/NETReactorSlayer.Core/Stages/CosturaDumper.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,11 +13,11 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
+using NETReactorSlayer.Core.Abstractions;
using System.IO;
using System.IO.Compression;
using System.Linq;
-using dnlib.DotNet;
-using NETReactorSlayer.Core.Abstractions;
namespace NETReactorSlayer.Core.Stages
{
diff --git a/NETReactorSlayer.Core/Stages/MethodDecrypter.cs b/NETReactorSlayer.Core/Stages/MethodDecrypter.cs
index 5feff43..8640812 100644
--- a/NETReactorSlayer.Core/Stages/MethodDecrypter.cs
+++ b/NETReactorSlayer.Core/Stages/MethodDecrypter.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,16 +13,17 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using dnlib.IO;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
namespace NETReactorSlayer.Core.Stages
{
@@ -41,6 +42,14 @@ public void Run(IContext context)
Context.Info.NecroBit = true;
+ if (_encryptedResource == null)
+
+ {
+
+ Context.Logger.Warn("Couldn't find encryptedResource.");
+
+ }
+
var bytes = _encryptedResource.Decrypt();
if (!RestoreMethodsBody(bytes))
@@ -49,11 +58,14 @@ public void Run(IContext context)
Cleaner.AddResourceToBeRemoved(_encryptedResource.EmbeddedResource);
Cleaner.AddCallToBeRemoved(_encryptedResource.DecrypterMethod);
Context.Logger.Info(
- $"{Context.Module.GetTypes().SelectMany(x => x.Methods).Count()} Methods decrypted.");
+ $"{Context.Module.GetTypes().SelectMany(x => x.Methods).Count()} Methods decrypted.-{EncryptedResource.DecrypterVer}");
}
catch (Exception ex)
{
- Context.Logger.Error($"An unexpected error occurred during decrypting methods. {ex.Message}.");
+
+ Context.Logger.Error(ex.StackTrace.ToString());
+
+ Context.Logger.Error($"An unexpected error occurred during decrypting methods. {ex.Message}.-{EncryptedResource.DecrypterVer}");
}
_encryptedResource?.Dispose();
@@ -62,17 +74,17 @@ public void Run(IContext context)
private bool Find()
{
foreach (var methodDef in Context.Module.GetTypes().SelectMany(type => (from method in type.Methods.ToList()
- where DotNetUtils.IsMethod(method, "System.UInt32",
- "(System.IntPtr,System.IntPtr,System.IntPtr,System.UInt32,System.IntPtr,System.UInt32&)") ||
- DotNetUtils.IsMethod(method, "System.UInt32",
- "(System.UInt64&,System.IntPtr,System.IntPtr,System.UInt32,System.IntPtr&,System.UInt32&)")
- from methodDef in from x in method.DeclaringType.Methods
- where x.IsStatic && x.HasBody && x.Body.HasInstructions
- select x
- from call in DotNetUtils.GetMethodCalls(methodDef)
- where call.MDToken.ToInt32() == method.MDToken.ToInt32()
- select methodDef).Where(methodDef =>
- EncryptedResource.IsKnownDecrypter(methodDef, Array.Empty(), true))))
+ where DotNetUtils.IsMethod(method, "System.UInt32",
+ "(System.IntPtr,System.IntPtr,System.IntPtr,System.UInt32,System.IntPtr,System.UInt32&)") ||
+ DotNetUtils.IsMethod(method, "System.UInt32",
+ "(System.UInt64&,System.IntPtr,System.IntPtr,System.UInt32,System.IntPtr&,System.UInt32&)")
+ from methodDef in from x in method.DeclaringType.Methods
+ where x.IsStatic && x.HasBody && x.Body.HasInstructions
+ select x
+ from call in DotNetUtils.GetMethodCalls(methodDef)
+ where call.MDToken.ToInt32() == method.MDToken.ToInt32()
+ select methodDef).Where(methodDef =>
+ EncryptedResource.IsKnownDecrypter(methodDef, Array.Empty(), true))))
{
_encryptedResource = new EncryptedResource(Context, methodDef);
if (_encryptedResource.EmbeddedResource != null)
@@ -152,6 +164,79 @@ private bool FindBinaryReaderMethod(out int popCallsCount)
return false;
}
+
+
+ private MethodDef FindBinaryReaderReadInt32Method()
+ {
+ var decrypterMethod = _encryptedResource.DecrypterMethod;
+ var calls = decrypterMethod.Body.Instructions
+ .Where(x => x.OpCode.Equals(OpCodes.Callvirt) && x.Operand is MethodDef).Select(x => x.Operand)
+ .Cast();
+ foreach (var method in calls)
+ try
+ {
+ SimpleDeobfuscator.DeobfuscateBlocks(method);
+ if (method.MethodSig.RetType.FullName != "System.Int32" ||
+ method.Body.Instructions.Count != 4)
+ continue;
+
+ if (!method.Body.Instructions[0].IsLdarg() ||
+ !method.Body.Instructions[1].OpCode.Equals(OpCodes.Ldfld) ||
+ (!method.Body.Instructions[2].OpCode.Equals(OpCodes.Callvirt) &&
+ !method.Body.Instructions[2].OpCode.Equals(OpCodes.Call)) ||
+ !method.Body.Instructions[3].OpCode.Equals(OpCodes.Ret))
+ continue;
+
+ if (!method.Body.Instructions[2].Operand.ToString()!.Contains("System.Int32"))
+ continue;
+
+ for (var i = 0; i < decrypterMethod.Body.Instructions.Count; i++)
+ try
+ {
+ if (!decrypterMethod.Body.Instructions[i].IsLdloc() ||
+ !decrypterMethod.Body.Instructions[i + 1].OpCode.Equals(OpCodes.Callvirt) ||
+ decrypterMethod.Body.Instructions[i + 1].Operand is not MethodDef calledMethod ||
+ !decrypterMethod.Body.Instructions[i + 2].OpCode.Equals(OpCodes.Pop))
+ continue;
+
+ if (MethodEqualityComparer.CompareDeclaringTypes.Equals(calledMethod, method))
+ return method;
+ }
+ catch { }
+
+ // return true;
+ }
+ catch { }
+
+ return null;
+ }
+
+
+
+ // https://www.cnblogs.com/Fred1987/p/18603592
+
+ //copy from,https://gist.github.com/6rube/34b561827f0805f73742541b8b8bb770
+
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)]
+ static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
+
+
+ /*
+
+ @class.method_3();
+
+ @class.method_3();
+
+ @class.method_3();
+
+ int num20 = @class.method_3();
+
+ int num21 = @class.method_3();
+
+ */
+
+ public static int methodrcount;
+
private bool RestoreMethodsBody(byte[] bytes)
{
var dumpedMethods = new DumpedMethods();
@@ -160,16 +245,127 @@ private bool RestoreMethodsBody(byte[] bytes)
var methodsDataReader = ByteArrayDataReaderFactory.CreateReader(bytes);
int tmp;
- if (FindBinaryReaderMethod(out var popCallsCount) && popCallsCount > 3)
+ if (FindBinaryReaderMethod(out var popCallsCount) && popCallsCount >= 3)
+ {
+
+
+
for (var i = 0; i < popCallsCount; i++)
methodsDataReader.ReadInt32();
+
+ }
else
{
+ bool IsOk = false;
+ bool SpecialCase = false;
+ int ReadCount = 0;
+ int Keypos = GetXorKeyPos(_encryptedResource.DecrypterMethod);
+ if (Keypos > 0)
+ {
+
+ MethodDef ReadInt32Method = FindBinaryReaderReadInt32Method();
+
+ if (ReadInt32Method != null)
+
+ {
+
+
+
+ for (int i = Keypos; i < _encryptedResource.DecrypterMethod.Body.Instructions.Count; i++)
+
+ {
+
+ if (_encryptedResource.DecrypterMethod.Body.Instructions[i].OpCode == OpCodes.Callvirt &&
+
+ _encryptedResource.DecrypterMethod.Body.Instructions[i].Operand != null &&
+
+ _encryptedResource.DecrypterMethod.Body.Instructions[i].Operand.ToString().Contains("ResolveMethod"))
+
+ {
+
+ IsOk = true;
+
+ break;
+
+ }
+
+
+
+ if (_encryptedResource.DecrypterMethod.Body.Instructions[i].IsLdloc() && _encryptedResource.DecrypterMethod.Body.Instructions[i + 1].OpCode == OpCodes.Ldc_I4_4 &&
+
+ (_encryptedResource.DecrypterMethod.Body.Instructions[i + 2].OpCode == OpCodes.Bne_Un || _encryptedResource.DecrypterMethod.Body.Instructions[i + 2].OpCode == OpCodes.Bne_Un_S))
+
+ {
+
+ SpecialCase = true;
+
+ break;
+
+ }
+
+
+
+ if (_encryptedResource.DecrypterMethod.Body.Instructions[i].OpCode.Equals(OpCodes.Callvirt) ||
+ _encryptedResource.DecrypterMethod.Body.Instructions[i].OpCode.Equals(OpCodes.Call))
+
+ {
+
+ if (_encryptedResource.DecrypterMethod.Body.Instructions[i].Operand != null &&
+
+ _encryptedResource.DecrypterMethod.Body.Instructions[i].Operand == ReadInt32Method)
+
+ ReadCount++;
+
+
+
+
+
+ }
+
+
+
+
+
+ }
+
+ }
+
+ }
+
+
+
+ if (SpecialCase)
+
+ {
+
+ ReadCount -= 2; // skipp 2 ints
+
+ IsOk = true;
+
+ }
+
+
+
+ if (IsOk && ReadCount >= 3)
+ {
+
+ for (int i = 0; i < ReadCount; i++)
+
+ methodsDataReader.ReadInt32();
+
+ }
+
+
tmp = methodsDataReader.ReadInt32();
+
if ((tmp & -16777216L) == 100663296L)
+
methodsDataReader.ReadInt32();
+
else
+
methodsDataReader.Position -= 4U;
+
}
var patchCount = methodsDataReader.ReadInt32();
@@ -179,8 +375,12 @@ private bool RestoreMethodsBody(byte[] bytes)
var mode = methodsDataReader.ReadInt32();
tmp = methodsDataReader.ReadInt32();
methodsDataReader.Position -= 4U;
+
+ //MessageBox(new IntPtr(0), mode.ToString(), "MessageBox", 0);
+
if ((tmp & -16777216L) == 100663296L)
{
+ //
methodsDataReader.Position += (uint)(8 * patchCount);
patchCount = methodsDataReader.ReadInt32();
mode = methodsDataReader.ReadInt32();
@@ -242,6 +442,9 @@ private bool RestoreMethodsBody(byte[] bytes)
PatchDwords(Context.PeImage, ref methodsDataReader, patchCount);
methodsDataReader.ReadInt32();
+
+ methodrcount = 0;
+
while (methodsDataReader.Position < (ulong)(bytes.Length - 1))
{
var rva3 = methodsDataReader.ReadUInt32();
@@ -249,8 +452,31 @@ private bool RestoreMethodsBody(byte[] bytes)
var isNativeCode = index >= 1879048192U;
var size2 = methodsDataReader.ReadInt32();
var methodData = methodsDataReader.ReadBytes(size2);
+ methodrcount++;
+
+ //if (methodrcount == 5000)
+
+ // break;
+
+
+ if (rva3 > 0x00002990 && rva3 < 0x000299C)
+
+ {
+
+ // break;
+
+ }
+ else
+ {
+
+ //continue;
+
+ }
+
+
if (!rvaToIndex.TryGetValue(rva3, out var methodIndex))
continue;
+
var methodToken = (uint)(100663297 + methodIndex);
if (isNativeCode)
{
@@ -268,26 +494,46 @@ private bool RestoreMethodsBody(byte[] bytes)
: new byte[] { 32, 222, 192, 173, 222, 109, 122 };
}
+
+
var dumpedMethod = new DumpedMethod();
+
Context.PeImage.ReadMethodTableRowTo(dumpedMethod,
+
MDToken.ToRID(methodToken));
+
dumpedMethod.code = methodData;
+
var codeReader = Context.PeImage.Reader;
+
codeReader.Position = Context.PeImage.RvaToOffset(dumpedMethod.mdRVA);
+
var mbHeader = MethodBodyParser.ParseMethodBody(ref codeReader, out _,
- out dumpedMethod.extraSections);
+
+ out dumpedMethod.extraSections);
+
Context.PeImage.UpdateMethodHeaderInfo(dumpedMethod, mbHeader);
+
dumpedMethods.Add(dumpedMethod);
+
+
+
+ //MethodDef method = Context.Module.ResolveMethod(index);
+
}
}
}
using (Context.Module)
{
+
+ //MessageBox(new IntPtr(0), methodrcount.ToString(), "MessageBox", 0);
+
if (!isFindDnrMethod || mode == 1)
Context.Module = Context.AssemblyModule.Reload(
Context.PeImage.PeImageData, CreateDumpedMethodsRestorer(dumpedMethods), null);
else if (dumpedMethods.Count > 0)
+
Context.Module = Context.AssemblyModule.Reload(
Context.ModuleBytes, CreateDumpedMethodsRestorer(dumpedMethods), null);
else
@@ -334,10 +580,51 @@ private static CompileMethodType GetCompileMethodType(IMethod method)
"(System.UInt64&,System.IntPtr,System.IntPtr,System.UInt32,System.IntPtr&,System.UInt32&)"))
return CompileMethodType.V1;
- return DotNetUtils.IsMethod(method, "System.UInt32",
- "(System.IntPtr,System.IntPtr,System.IntPtr,System.UInt32,System.IntPtr,System.UInt32&)")
- ? CompileMethodType.V2
- : CompileMethodType.Unknown;
+ if (DotNetUtils.IsMethod(method, "System.UInt32",
+ "(System.IntPtr,System.IntPtr,System.IntPtr,System.UInt32,System.IntPtr,System.UInt32&)"))
+ return CompileMethodType.V2;
+
+
+
+ MethodDef mdef = method as MethodDef;
+
+ if (mdef == null)
+
+ return CompileMethodType.Unknown;
+
+
+
+ if (mdef.ReturnType.ToString() == "System.UInt32")
+
+ {
+
+ if (mdef.Parameters[0].Type.ToString() == "System.IntPtr" &&
+
+ mdef.Parameters[1].Type.ToString() == "System.IntPtr")
+
+ {
+
+ if (mdef.Parameters[3].Type.ToString() == "System.UInt32" && mdef.Parameters[4].Type.ToString() == "System.IntPtr" &&
+
+ mdef.Parameters[5].Type.ToString() == "System.UInt32&")
+
+ {
+
+ //MessageBox(new IntPtr(0), mdef.Parameters[2].Type.ToString(), "MessageBox", 0);
+
+ if (mdef.Parameters[2].Type.ToString().EndsWith("&"))
+
+ return CompileMethodType.V3;
+
+ }
+
+
+
+ }
+
+ }
+
+ return CompileMethodType.Unknown;
}
private static DumpedMethodsRestorer CreateDumpedMethodsRestorer(DumpedMethods dumpedMethods)
@@ -367,18 +654,48 @@ private static long GetXorKey(MethodDef method)
return result;
}
- Continue: ;
+ Continue:;
}
return 0;
}
+
+
+ private static int GetXorKeyPos(MethodDef method)
+ {
+ for (var i = 0; i < method.Body.Instructions.Count - 1; i++)
+ {
+ if (method.Body.Instructions[i].OpCode.Code.Equals(Code.Ldind_I8))
+ {
+ var ldci4 = method.Body.Instructions[i + 1];
+ long result;
+ if (ldci4.IsLdcI4())
+ result = ldci4.GetLdcI4Value();
+ else
+ {
+ if (!ldci4.OpCode.Code.Equals(Code.Ldc_I8))
+ goto Continue;
+ result = (long)ldci4.Operand;
+ }
+
+ return i;
+ }
+
+
+
+ Continue:;
+ }
+
+ return -1;
+ }
+
private static MethodDef FindDnrCompileMethod(TypeDef type) =>
(from method in type.Methods
- where method.IsStatic && method.Body != null
- let sig = method.MethodSig
- where sig != null && sig.Params.Count == 6
- select method).FirstOrDefault(method => GetCompileMethodType(method) != CompileMethodType.Unknown);
+ where method.IsStatic && method.Body != null
+ let sig = method.MethodSig
+ where sig != null && sig.Params.Count == 6
+ select method).FirstOrDefault(method => GetCompileMethodType(method) != CompileMethodType.Unknown);
private static void PatchDwords(MyPeImage peImage, ref DataReader reader, int count)
{
@@ -386,6 +703,17 @@ private static void PatchDwords(MyPeImage peImage, ref DataReader reader, int co
{
var rva = reader.ReadUInt32();
var data = reader.ReadUInt32();
+
+
+
+ /*if (rva < 0x2500)
+ {
+
+ //MessageBox(new IntPtr(0), rva.ToString("X8"), "SHEET", 0);
+
+ continue;
+ }*/
+
peImage.DotNetSafeWrite(rva, BitConverter.GetBytes(data));
}
}
@@ -413,6 +741,6 @@ private static void XorEncrypt(byte[] data, long xorKey)
private readonly short[] _nativeLdci40 = { 85, 139, 236, 51, 192, 93, 195 };
private EncryptedResource _encryptedResource;
- private enum CompileMethodType { Unknown, V1, V2 }
+ private enum CompileMethodType { Unknown, V1, V2, V3 }
}
}
\ No newline at end of file
diff --git a/NETReactorSlayer.Core/Stages/MethodInliner.cs b/NETReactorSlayer.Core/Stages/MethodInliner.cs
index 4c5208e..bda6df4 100644
--- a/NETReactorSlayer.Core/Stages/MethodInliner.cs
+++ b/NETReactorSlayer.Core/Stages/MethodInliner.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,41 +13,210 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
-using System.Linq;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
namespace NETReactorSlayer.Core.Stages
{
internal class MethodInliner : IStage
{
+
+ // https://www.cnblogs.com/Fred1987/p/18603592
+ //copy from,https://gist.github.com/6rube/34b561827f0805f73742541b8b8bb770
+
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)]
+ static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
+
public void Run(IContext context)
{
+
long count = 0;
var proxies = new HashSet();
foreach (var method in context.Module.GetTypes().SelectMany(type =>
from x in type.Methods.ToList() where x.HasBody && x.Body.HasInstructions select x))
try
{
- var length = method.Body.Instructions.Count;
- var i = 0;
- for (; i < length; i++)
+
+
+
+ //MessageBox(new IntPtr(0), method.Body.Instructions[0].ToString(), "MessageBox", 0);
+
+ //break;
+
+
+
+ //if (method.Name.String != "XM3c8yL8YOc")
+
+ // continue;
+
+ /*if (method.DeclaringType.Name.String == "FrmToolBox" && method.Name.String == "Chihgu7Fc")
+
{
- MethodDef methodDef;
- if (!method.Body.Instructions[i].OpCode.Equals(OpCodes.Call) ||
- (methodDef = method.Body.Instructions[i].Operand as MethodDef) == null ||
- !IsInlineMethod(methodDef, out var instructions) ||
+
+ MessageBox(new IntPtr(0), method.Body.Instructions[0].ToString(), "MessageBox", 0);
+
+
+
+ }
+
+ else
+
+ continue;
+ */
+
+ int length = method.Body.Instructions.Count;
+
+ for (int i = 0; i < length; i++)
+ {
+
+ // VIN_STUDEO.FrmToolBox.Chihgu7Fc(object, RoutedEventArgs) : void @06000017
+
+
+
+ /*if (method.Body.Instructions[i].Operand != null)
+ {
+
+ MethodDef methodDefcrap = method.Body.Instructions[i].Operand as MethodDef;
+
+ if (methodDefcrap!=null)
+
+ {
+
+ if (methodDefcrap.DeclaringType.Name.String == "FrmToolBox" && methodDefcrap.Name.String == "0")
+
+ {
+
+ MessageBox(new IntPtr(0), methodDefcrap.ToString(), "MessageBox", 0);
+
+ }
+
+ }
+
+ }
+ */
+
+ MethodDef methodDef = null;
+ if (!method.Body.Instructions[i].OpCode.Equals(OpCodes.Call) && !method.Body.Instructions[i].OpCode.Equals(OpCodes.Callvirt))
+ continue;
+
+ methodDef = method.Body.Instructions[i].Operand as MethodDef;
+
+ if (methodDef == null) continue;
+
+
+
+ bool IsProperty = false;
+
+
+
+ foreach (PropertyDef prop in method.DeclaringType.Properties)
+
+ {
+
+ if (prop.GetMethod == methodDef)
+
+ {
+
+ IsProperty = true;
+
+ break;
+
+ }
+
+
+
+ if (prop.SetMethod == methodDef)
+
+ {
+
+ IsProperty = true;
+
+ break;
+
+ }
+
+ }
+
+
+
+ if (IsProperty) continue;
+
+
+
+ /*if (methodDef.DeclaringType.Name.String == "FrmToolBox" && methodDef.Name.String == "0")
+
+ {
+
+ MessageBox(new IntPtr(0), method.ToString(), "MessageBox", 0);
+
+ }*/
+
+
+ if (method.Body.Instructions[i].OpCode.Equals(OpCodes.Callvirt) && !methodDef.IsVirtual)
+ continue;
+
+
+ if (!methodDef.IsStatic)
+
+ {
+
+ if ((i - 1) < 0) continue;
+
+ if (method.Body.Instructions[i - 1].OpCode != OpCodes.Ldarg_0)
+
+ continue;
+
+ }
+
+
+
+ if (!IsInlineMethod(methodDef, out var instructions) ||
!IsCompatibleType(method.DeclaringType, methodDef.DeclaringType))
continue;
count++;
- method.Body.Instructions[i].OpCode = OpCodes.Nop;
- method.Body.Instructions[i].Operand = null;
- length += instructions.Count;
- foreach (var instr in instructions)
- method.Body.Instructions.Insert(i++, instr);
+
+
+
+ /*if (count == 10)
+
+ {
+
+ MessageBox(new IntPtr(0), methodDef.ToString(), "MessageBox", 0);
+
+ continue;
+
+ }*/
+
+
+
+ if (instructions.Count == 1)
+ {
+
+ method.Body.Instructions[i].OpCode = instructions[0].OpCode;
+
+ method.Body.Instructions[i].Operand = instructions[0].Operand;
+
+ }
+ else
+ {
+
+ method.Body.Instructions[i].OpCode = OpCodes.Nop;
+
+ method.Body.Instructions[i].Operand = null;
+
+ length += instructions.Count;
+
+ foreach (var instr in instructions)
+
+ method.Body.Instructions.Insert(i++, instr);
+ }
+
method.Body.UpdateInstructionOffsets();
proxies.Add(methodDef);
}
@@ -57,15 +226,17 @@ from x in type.Methods.ToList() where x.HasBody && x.Body.HasInstructions select
catch { }
foreach (var instruction in from type in context.Module.GetTypes()
- from method in from x in type.Methods.ToArray() where x.HasBody && x.Body.HasInstructions select x
- from instruction in method.Body.Instructions
- select instruction)
+ from method in from x in type.Methods.ToArray() where x.HasBody && x.Body.HasInstructions select x
+ from instruction in method.Body.Instructions
+ select instruction)
try
{
MethodDef item;
if (instruction.OpCode.OperandType == OperandType.InlineMethod &&
(item = instruction.Operand as MethodDef) != null && proxies.Contains(item))
proxies.Remove(item);
+
+
}
catch { }
@@ -76,26 +247,40 @@ from instruction in method.Body.Instructions
private static bool IsInlineMethod(MethodDef method, out List instructions)
{
+
instructions = new List();
- if (!method.HasBody || !method.IsStatic)
+ if (!method.HasBody || !method.Body.HasInstructions)
+ return false;
+ if (!method.IsStatic && method.Body.Instructions[0].OpCode != OpCodes.Ldarg_0)
return false;
+
var list = method.Body.Instructions;
- var index = list.Count - 1;
+ var index = list.Count - 1; // last instruction
if (index < 1 || list[index].OpCode != OpCodes.Ret)
return false;
var code = list[index - 1].OpCode.Code;
int length;
if (code != Code.Call && code != Code.Callvirt && code != Code.Newobj)
- {
+ { // threat Ldfld case:
if (code != Code.Ldfld)
return false;
instructions.Add(new Instruction(list[index - 1].OpCode, list[index - 1].Operand));
length = (from i in list
- where i.OpCode != OpCodes.Nop
- select i).Count() - 2;
- return length == 1 && length == method.Parameters.Count - 1;
+ where i.OpCode != OpCodes.Nop
+ select i).Count() - 2; // instructions wiouth Ldfld instruction and ret
+ return (length == 1 && length == method.Parameters.Count - 1) || (length == 1 && length == method.Parameters.Count);
}
+ if (!method.IsStatic) // rest of instruction except Code.Ldfld not fixed for instance
+ return false;
+
+
+ //Edit:
+
+ // return false;
+
+
+
instructions.Add(new Instruction(list[index - 1].OpCode, list[index - 1].Operand));
length = list.Count(i => i.OpCode != OpCodes.Nop) - 2;
var count = list.Count - 2;
@@ -103,6 +288,7 @@ private static bool IsInlineMethod(MethodDef method, out List instr
{
if (list[index - 2].IsLdcI4() && --length == method.Parameters.Count)
{
+
count = list.Count - 3;
instructions.Insert(0, new Instruction(list[index - 2].OpCode, list[index - 2].Operand));
}
@@ -122,6 +308,7 @@ private static bool IsInlineMethod(MethodDef method, out List instr
}
return length == num;
+
}
private static bool IsCompatibleType(IType origType, IType newType) =>
diff --git a/NETReactorSlayer.Core/Stages/ProxyCallFixer.cs b/NETReactorSlayer.Core/Stages/ProxyCallFixer.cs
index e84b718..780b3af 100644
--- a/NETReactorSlayer.Core/Stages/ProxyCallFixer.cs
+++ b/NETReactorSlayer.Core/Stages/ProxyCallFixer.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,15 +13,15 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
namespace NETReactorSlayer.Core.Stages
{
@@ -66,8 +66,8 @@ private bool Find()
{
var callCounter = new CallCounter();
foreach (var type in from x in Context.Module.GetTypes()
- where x.Namespace.Equals("") && DotNetUtils.DerivesFromDelegate(x)
- select x)
+ where x.Namespace.Equals("") && DotNetUtils.DerivesFromDelegate(x)
+ select x)
if (type.FindStaticConstructor() is { } cctor)
foreach (var method in DotNetUtils.GetMethodCalls(cctor).Where(method =>
method.MethodSig.GetParamCount() == 1 &&
diff --git a/NETReactorSlayer.Core/Stages/ResourceResolver.cs b/NETReactorSlayer.Core/Stages/ResourceResolver.cs
index 55a7896..c1560da 100644
--- a/NETReactorSlayer.Core/Stages/ResourceResolver.cs
+++ b/NETReactorSlayer.Core/Stages/ResourceResolver.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,13 +13,16 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.Linq;
+
+
using de4dot.blocks;
using dnlib.DotNet;
+using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
namespace NETReactorSlayer.Core.Stages
{
@@ -28,6 +31,7 @@ internal class ResourceResolver : IStage
public void Run(IContext context)
{
Context = context;
+
try
{
if (!Find())
@@ -38,15 +42,7 @@ public void Run(IContext context)
using (_encryptedResource)
{
- DeobUtils.DecryptAndAddResources(Context.Module,
- () => Decompress(_encryptedResource.Decrypt()));
-
- foreach (var methodToRemove in _methodToRemove)
- Cleaner.AddCallToBeRemoved(methodToRemove.ResolveMethodDef());
- Cleaner.AddCallToBeRemoved(_encryptedResource.DecrypterMethod);
- Cleaner.AddTypeToBeRemoved(_encryptedResource.DecrypterMethod.DeclaringType);
- Cleaner.AddResourceToBeRemoved(_encryptedResource.EmbeddedResource);
- Context.Logger.Info("Assembly resources decrypted");
+ ProcessEncryptedResource();
}
}
catch (Exception ex)
@@ -55,26 +51,115 @@ public void Run(IContext context)
}
}
+ ///
+ /// Processes encrypted resources. Handles VM (Code Virtualization) environments safely.
+ ///
+ private void ProcessEncryptedResource()
+ {
+ try
+ {
+ // Decrypt and decompress the resource
+ var rawDecrypted = _encryptedResource.Decrypt();
+ if (rawDecrypted == null)
+ {
+ Context.Logger.Warn("Resource decryption returned null data.");
+ return;
+ }
+ var decompressedData = TryDecompress(rawDecrypted) ?? rawDecrypted;
+
+ // Verify and process if it's valid .NET resource data
+ if (IsValidResourceData(decompressedData))
+ {
+ DeobUtils.DecryptAndAddResources(Context.Module, () => decompressedData);
+ Context.Logger.Info("Assembly resources decrypted");
+ }
+ else
+ {
+ Context.Logger.Info("[ResourceResolver] VM/Non-standard resource data detected - skipping normal processing");
+ }
+ CleanupObfuscatorArtifacts();
+ }
+ catch (Exception ex)
+ {
+ // Resource processing failure may be normal in VM environments
+ if (IsVMRelatedError(ex))
+ {
+ Context.Logger.Warn($"Resource processing failed (VM environment): {ex.Message}");
+ CleanupObfuscatorArtifacts();
+ }
+ else throw;
+ }
+ }
+
+ ///
+ /// Attempts to decompress data using various methods.
+ ///
+ private static byte[] TryDecompress(byte[] data)
+ {
+ // Try decompression in order: QuickLZ, Deflate (with/without header), then offset attempts
+ try { return QuickLz.Decompress(data); } catch { }
+ try { return DeobUtils.Inflate(data, false); } catch { }
+ try { return DeobUtils.Inflate(data, true); } catch { }
+
+ // Common pattern in VM: Try decompression from different starting points
+ // Sometimes offset 9 works. Surely it's not because it's .NET 9, right?
+ for (int offset = 1; offset < Math.Min(data.Length, 20); offset++)
+ {
+ try { return DeobUtils.Inflate(data.Skip(offset).ToArray(), true); } catch { }
+ }
+ return null;
+ }
+
+ ///
+ /// Checks if the data is valid .NET assembly resource data.
+ ///
+ private static bool IsValidResourceData(byte[] data) =>
+ data != null && data.Length >= 64 &&
+ ((data.Length > 2 && data[0] == 0x4D && data[1] == 0x5A) || data.Length >= 1000);
+
+ ///
+ /// Checks if the exception is VM-related.
+ ///
+ private static bool IsVMRelatedError(Exception ex) =>
+ ex.Message.Contains("Invalid DOS signature") ||
+ ex.Message.Contains("decryptedResourceData is null") ||
+ ex.Message.Contains("Not a valid PE file") ||
+ ex is BadImageFormatException;
+
+ ///
+ /// Cleans up obfuscation-related artifacts.
+ ///
+ private void CleanupObfuscatorArtifacts()
+ {
+ try
+ {
+ _methodToRemove.ForEach(method => Cleaner.AddCallToBeRemoved(method.ResolveMethodDef()));
+ Cleaner.AddCallToBeRemoved(_encryptedResource.DecrypterMethod);
+ Cleaner.AddTypeToBeRemoved(_encryptedResource.DecrypterMethod.DeclaringType);
+ Cleaner.AddResourceToBeRemoved(_encryptedResource.EmbeddedResource);
+ }
+ catch (Exception ex)
+ {
+ Context.Logger.Warn($"Cleanup failed: {ex.Message}");
+ }
+ }
+
private bool Find()
{
foreach (var type in Context.Module.GetTypes())
{
- if (type.BaseType != null && type.BaseType.FullName != "System.Object")
- continue;
- if (!CheckFields(type.Fields))
+ if (type.BaseType?.FullName != "System.Object" || !CheckFields(type.Fields))
continue;
+
foreach (var decrypterMethod in from method in type.Methods
- where method.IsStatic && method.HasBody
- where DotNetUtils.IsMethod(method, "System.Reflection.Assembly",
- "(System.Object,System.ResolveEventArgs)") ||
- DotNetUtils.IsMethod(method, "System.Reflection.Assembly",
- "(System.Object,System.Object)")
- where method.Body.ExceptionHandlers.Count == 0
- select GetDecrypterMethod(method, Array.Empty(), true) ??
- GetDecrypterMethod(method, Array.Empty(), false)
+ where method.IsStatic && method.HasBody && method.Body.ExceptionHandlers.Count == 0
+ where DotNetUtils.IsMethod(method, "System.Reflection.Assembly", "(System.Object,System.ResolveEventArgs)") ||
+ DotNetUtils.IsMethod(method, "System.Reflection.Assembly", "(System.Object,System.Object)")
+ select GetDecrypterMethod(method, Array.Empty(), true) ??
+ GetDecrypterMethod(method, Array.Empty(), false)
into decrypterMethod
- where decrypterMethod != null
- select decrypterMethod)
+ where decrypterMethod != null
+ select decrypterMethod)
{
_encryptedResource = new EncryptedResource(Context, decrypterMethod);
if (_encryptedResource.EmbeddedResource == null)
@@ -87,49 +172,33 @@ into decrypterMethod
return true;
}
}
-
return false;
}
private static bool CheckFields(ICollection fields)
{
- if (fields.Count != 3 && fields.Count != 4)
- return false;
-
- var numBools = fields.Count == 3 ? 1 : 2;
+ if (fields.Count != 3 && fields.Count != 4) return false;
var fieldTypes = new FieldTypes(fields);
- if (fieldTypes.Count("System.Boolean") != numBools)
- return false;
- if (fieldTypes.Count("System.Object") == 2)
- return true;
- if (fieldTypes.Count("System.String[]") != 1)
- return false;
- return fieldTypes.Count("System.Reflection.Assembly") == 1 || fieldTypes.Count("System.Object") == 1;
- }
+ var numBools = fields.Count == 3 ? 1 : 2;
- private MethodDef
- GetDecrypterMethod(MethodDef method, IList additionalTypes, bool checkResource)
- {
- if (EncryptedResource.IsKnownDecrypter(method, additionalTypes, checkResource))
- return method;
+ return fieldTypes.Count("System.Boolean") == numBools &&
+ (fieldTypes.Count("System.Object") == 2 ||
+ (fieldTypes.Count("System.String[]") == 1 &&
+ (fieldTypes.Count("System.Reflection.Assembly") == 1 || fieldTypes.Count("System.Object") == 1)));
+ }
- return DotNetUtils.GetCalledMethods(Context.Module, method)
+ private MethodDef GetDecrypterMethod(MethodDef method, IList additionalTypes, bool checkResource) =>
+ EncryptedResource.IsKnownDecrypter(method, additionalTypes, checkResource) ? method :
+ DotNetUtils.GetCalledMethods(Context.Module, method)
.Where(calledMethod => DotNetUtils.IsMethod(calledMethod, "System.Void", "()"))
- .FirstOrDefault(calledMethod =>
- EncryptedResource.IsKnownDecrypter(calledMethod, additionalTypes, checkResource));
- }
+ .FirstOrDefault(calledMethod => EncryptedResource.IsKnownDecrypter(calledMethod, additionalTypes, checkResource));
private static byte[] Decompress(byte[] bytes)
{
try { return QuickLz.Decompress(bytes); }
- catch
- {
- try { return DeobUtils.Inflate(bytes, true); }
- catch { return null; }
- }
+ catch { try { return DeobUtils.Inflate(bytes, true); } catch { return null; } }
}
-
private IContext Context { get; set; }
private EncryptedResource _encryptedResource;
private readonly List _methodToRemove = new();
diff --git a/NETReactorSlayer.Core/Stages/StringDecrypter.cs b/NETReactorSlayer.Core/Stages/StringDecrypter.cs
index 9e5f97e..cff1e81 100644
--- a/NETReactorSlayer.Core/Stages/StringDecrypter.cs
+++ b/NETReactorSlayer.Core/Stages/StringDecrypter.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,24 +13,33 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Reflection;
-using System.Text;
+
+
+
+
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using HarmonyLib;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Text;
using Code = dnlib.DotNet.Emit.Code;
+using OpCodes = dnlib.DotNet.Emit.OpCodes;
namespace NETReactorSlayer.Core.Stages
{
internal class StringDecrypter : IStage
{
+
public void Run(IContext context)
{
Context = context;
@@ -78,10 +87,10 @@ private bool Find()
if (type.BaseType != null && type.BaseType.FullName != "System.Object")
continue;
foreach (var method in from method in type.Methods
- where method.IsStatic && method.HasBody
- where DotNetUtils.IsMethod(method, "System.String", "(System.Int32)")
- where EncryptedResource.IsKnownDecrypter(method, new[] { "System.String" }, true)
- select method)
+ where method.IsStatic && method.HasBody
+ where DotNetUtils.IsMethod(method, "System.String", "(System.Int32)")
+ where EncryptedResource.IsKnownDecrypter(method, new[] { "System.String" }, true)
+ select method)
{
FindKeyIv(method);
@@ -123,11 +132,11 @@ private void FindKeyIv(MethodDef method)
"System.Security.Cryptography.CryptoStream"
};
foreach (var instructions in from calledMethod in DotNetUtils.GetCalledMethods(Context.Module, method)
- where calledMethod.DeclaringType == method.DeclaringType
- where calledMethod.MethodSig.GetRetType().GetFullName() == "System.Byte[]"
- let localTypes = new LocalTypes(calledMethod)
- where localTypes.All(requiredTypes)
- select calledMethod.Body.Instructions)
+ where calledMethod.DeclaringType == method.DeclaringType
+ where calledMethod.MethodSig.GetRetType().GetFullName() == "System.Byte[]"
+ let localTypes = new LocalTypes(calledMethod)
+ where localTypes.All(requiredTypes)
+ select calledMethod.Body.Instructions)
{
byte[] newKey = null, newIv = null;
for (var i = 0; i < instructions.Count && (newKey == null || newIv == null); i++)
@@ -175,20 +184,20 @@ private string Decrypt(int offset)
switch (_stringDecrypterVersion)
{
case StringDecrypterVersion.V37:
- {
- var fileOffset = BitConverter.ToInt32(_decryptedResource, offset);
- var length = BitConverter.ToInt32(Context.ModuleBytes, fileOffset);
- encryptedStringData = new byte[length];
- Array.Copy(Context.ModuleBytes, fileOffset + 4, encryptedStringData, 0, length);
- break;
- }
+ {
+ var fileOffset = BitConverter.ToInt32(_decryptedResource, offset);
+ var length = BitConverter.ToInt32(Context.ModuleBytes, fileOffset);
+ encryptedStringData = new byte[length];
+ Array.Copy(Context.ModuleBytes, fileOffset + 4, encryptedStringData, 0, length);
+ break;
+ }
case StringDecrypterVersion.V38:
- {
- var rva = BitConverter.ToUInt32(_decryptedResource, offset);
- var length = Context.PeImage.ReadInt32(rva);
- encryptedStringData = Context.PeImage.ReadBytes(rva + 4, length);
- break;
- }
+ {
+ var rva = BitConverter.ToUInt32(_decryptedResource, offset);
+ var length = Context.PeImage.ReadInt32(rva);
+ encryptedStringData = Context.PeImage.ReadBytes(rva + 4, length);
+ break;
+ }
default:
throw new ApplicationException("Unknown string decrypter version");
}
@@ -240,81 +249,153 @@ bool IsDecrypterMethod(IMDTokenProvider method) => method != null &&
return count;
}
+ // https://www.cnblogs.com/Fred1987/p/18603592
+ //copy from,https://gist.github.com/6rube/34b561827f0805f73742541b8b8bb770
+ [DllImport("user32.dll", CharSet = CharSet.Unicode)]
+ static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
+
+
+ ///
+ /// Dynamically decrypts string literals at runtime
+ /// Decrypts strings encrypted by .NET Reactor and restores them to their original form during runtime.
+ ///
+ /// The number of successfully decrypted strings
private long InlineStringsDynamically()
{
+ // Skip dynamic decryption under certain conditions
+ // Skip if NativeStub + NecroBit combination is used, or if reflection is not used
if ((Context.Info.NativeStub && Context.Info.NecroBit) ||
!Context.Info.UsesReflection)
return 0;
- long count = 0;
- MethodDef decrypterMethod = null;
- EmbeddedResource encryptedResource = null;
+ try
+ {
+ // Execute the module constructor of the target assembly to perform static initialization
+ // This process initializes the data required for string decryption
+ RuntimeHelpers.RunModuleConstructor(Context.Assembly.ManifestModule.ModuleHandle);
+ }
+ catch (Exception exc)
+ {
+ Console.WriteLine($"Exception on ModuleConstructor: {exc}");
+ }
- StacktracePatcher.Patch();
+ long count = 0; // Number of successfully decrypted strings
+ MethodDef decrypterMethod = null; // Decrypter method info (for later removal)
+ EmbeddedResource encryptedResource = null; // Encrypted resource info (for later removal)
+ bool FirstTime = true; // Flag to print only the first exception
+
+ try
+ {
+ // Apply Harmony patch: Intercept StackFrame.GetMethod() calls
+ // This allows bypassing .NET Reactor's caller verification
+ StacktracePatcher.Patch();
+ }
+ catch (Exception exc)
+ {
+ Console.WriteLine($"Exception on StringDec - Harmony: {exc}");
+ }
+
+ // Iterate through all types and methods to find string decryption patterns
foreach (var type in Context.Module.GetTypes())
- foreach (var method in (from x in type.Methods where x.HasBody && x.Body.HasInstructions select x)
- .ToArray())
- for (var i = 0; i < method.Body.Instructions.Count; i++)
- try
- {
- if (!method.Body.Instructions[i].IsLdcI4() ||
- !method.Body.Instructions[i + 1].OpCode.Equals(OpCodes.Call))
- continue;
+ foreach (var method in (from x in type.Methods where x.HasBody && x.Body.HasInstructions select x).ToArray())
+ for (var i = 0; i < method.Body.Instructions.Count; i++)
+ try
+ {
+ // Detect string decryption pattern: ldc.i4 (load integer) + call (method call)
+ // Example: ldc.i4 838 (string index) + call GQb61Dp8v (decryption method)
+ if (!method.Body.Instructions[i].IsLdcI4() ||
+ !method.Body.Instructions[i + 1].OpCode.Equals(OpCodes.Call))
+ continue;
- var methodDef = ((IMethod)method.Body.Instructions[i + 1].Operand).ResolveMethodDef();
- if (!methodDef.HasReturnType)
- continue;
+ // Extract information about the called method
+ var methodDef = ((IMethod)method.Body.Instructions[i + 1].Operand).ResolveMethodDef();
+ if (methodDef == null) continue;
- if (TypeEqualityComparer.Instance.Equals(method.DeclaringType, methodDef.DeclaringType))
- continue;
+ // Check if the method has a return type (string decryption methods must return string)
+ if (!methodDef.HasReturnType)
+ continue;
- if (methodDef.ReturnType.FullName != "System.String" &&
- !(methodDef.DeclaringType != null &&
- methodDef.DeclaringType == type &&
- methodDef.ReturnType.FullName == "System.Object"))
- continue;
+ // Exclude method calls within the same class (prevent self-invocation)
+ if (TypeEqualityComparer.Instance.Equals(method.DeclaringType, methodDef.DeclaringType))
+ continue;
- if (!methodDef.HasParams() || methodDef.Parameters.Count != 1 ||
- methodDef.Parameters[0].Type.FullName != "System.Int32")
- continue;
+ // Validate return type: Must be System.String or System.Object under specific conditions
+ if (methodDef.ReturnType.FullName != "System.String" &&
+ !(methodDef.DeclaringType != null &&
+ methodDef.DeclaringType == type &&
+ methodDef.ReturnType.FullName == "System.Object"))
+ continue;
- if (!methodDef.Body.Instructions.Any(x =>
- x.OpCode.Equals(OpCodes.Callvirt) && x.Operand.ToString()!
- .Contains("System.Reflection.Assembly::GetManifestResourceStream")))
- continue;
+ // Parameter validation: Must accept exactly one int parameter
+ // String decryption methods typically have the signature: string DecryptString(int index)
+ if (!methodDef.HasParams() || methodDef.Parameters.Count != 1 ||
+ methodDef.Parameters[0].Type.FullName != "System.Int32")
+ continue;
- var resourceName = DotNetUtils.GetCodeStrings(methodDef)
- .FirstOrDefault(name =>
- Context.Assembly.GetManifestResourceNames().Any(x => x == name));
+ // Check if the method internally calls GetManifestResourceStream
+ // .NET Reactor stores encrypted string data in resources
+ if (!methodDef.Body.Instructions.Any(x =>
+ x.OpCode.Equals(OpCodes.Callvirt) && x.Operand.ToString()!
+ .Contains("System.Reflection.Assembly::GetManifestResourceStream")))
+ continue;
- if (resourceName == null)
- continue;
+ // Extract the resource name used within the method
+ var resourceName = DotNetUtils.GetCodeStrings(methodDef)
+ .FirstOrDefault(name =>
+ Context.Assembly.GetManifestResourceNames().Any(x => x == name));
- var result = (StacktracePatcher.PatchStackTraceGetMethod.MethodToReplace =
- Context.Assembly.ManifestModule.ResolveMethod(
- (int)methodDef.ResolveMethodDef().MDToken.Raw) as MethodInfo)
- .Invoke(null, new object[] { method.Body.Instructions[i].GetLdcI4Value() });
+ if (resourceName == null)
+ continue;
- if (result is not string operand)
- continue;
- decrypterMethod ??= methodDef;
- if (encryptedResource == null &&
- DotNetUtils.GetResource(Context.Module, resourceName) is EmbeddedResource resource)
- encryptedResource = resource;
- method.Body.Instructions[i].OpCode = OpCodes.Nop;
- method.Body.Instructions[i + 1].OpCode = OpCodes.Ldstr;
- method.Body.Instructions[i + 1].Operand = operand;
- count += 1L;
- }
- catch { }
+ // Perform actual string decryption
+ // 1. Resolve the decryption method using reflection
+ var resolvedMethod = Context.Assembly.ManifestModule.ResolveMethod(
+ (int)methodDef.ResolveMethodDef().MDToken.Raw) as MethodInfo;
- if (decrypterMethod == null || encryptedResource == null)
- return count;
- Cleaner.AddMethodToBeRemoved(decrypterMethod);
- Cleaner.AddResourceToBeRemoved(encryptedResource);
+ // 2. Set MethodToReplace for Harmony patching
+ // This ensures that when StackFrame.GetMethod() is called within the decryption method,
+ // our specified method is returned, bypassing caller verification
+ StacktracePatcher.PatchStackTraceGetMethod.MethodToReplace = resolvedMethod;
- return count;
+ // 3. Invoke the decryption method (pass string index as parameter)
+ var result = resolvedMethod.Invoke(null, new object[] { method.Body.Instructions[i].GetLdcI4Value() });
+
+ // 4. Verify that the result is a string
+ if (result is not string operand)
+ continue;
+
+ // 5. Store information for cleanup (for later removal of decryption method and resources)
+ decrypterMethod ??= methodDef;
+ if (encryptedResource == null &&
+ DotNetUtils.GetResource(Context.Module, resourceName) is EmbeddedResource resource)
+ encryptedResource = resource;
+
+ // 6. Replace IL code: Change complex decryption calls to simple string loads
+ // Example: ldc.i4 838 + call GQb61Dp8v ¡æ nop + ldstr "decrypted string"
+ method.Body.Instructions[i].OpCode = OpCodes.Nop; // Remove index load
+ method.Body.Instructions[i + 1].OpCode = OpCodes.Ldstr; // Direct string load
+ method.Body.Instructions[i + 1].Operand = operand; // Set decrypted string
+
+ count++; // Increment success counter
+ }
+ catch (Exception exc)
+ {
+ // Print only the first exception to prevent log spam
+ if (FirstTime)
+ {
+ Console.WriteLine($"Exception on StringDec: {exc}");
+ FirstTime = false;
+ }
+ }
+
+ // Cleanup: Add decryption-related code that is no longer needed to removal targets
+ if (decrypterMethod != null)
+ Cleaner.AddMethodToBeRemoved(decrypterMethod);
+ if (encryptedResource != null)
+ Cleaner.AddResourceToBeRemoved(encryptedResource);
+
+ return count; // Return the number of successfully decrypted strings
}
@@ -327,32 +408,77 @@ private long InlineStringsDynamically()
private enum StringDecrypterVersion { V37, V38 }
#region Nested Types
-
public class StacktracePatcher
{
public static void Patch()
{
- harmony = new Harmony(HarmonyId);
- harmony.PatchAll(Assembly.GetExecutingAssembly());
+ try
+ {
+ if (harmony != null)
+ {
+ Console.WriteLine("Harmony already patched");
+ return;
+ }
+ harmony = new Harmony(HarmonyId);
+ // Use PatchAll to apply annotation-based patches
+ harmony.PatchAll(Assembly.GetExecutingAssembly());
+ Console.WriteLine($"PatchAll completed. Patched methods: {harmony.GetPatchedMethods().Count()}");
+
+ // Verify patch application
+ var stackFrameGetMethod = typeof(StackFrame).GetMethod("GetMethod", Type.EmptyTypes);
+ var patchInfo = Harmony.GetPatchInfo(stackFrameGetMethod);
+ if (patchInfo != null)
+ {
+ Console.WriteLine($"StackFrame.GetMethod patches - Prefixes: {patchInfo.Prefixes.Count}, Postfixes: {patchInfo.Postfixes.Count}");
+ }
+ else
+ {
+ Console.WriteLine("ERROR: StackFrame.GetMethod is NOT patched!");
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Patch Exception: {ex}");
+ }
}
- private const string HarmonyId = "_";
-
- // ReSharper disable once InconsistentNaming
+ private const string HarmonyId = "netreactorslayer.stringdecrypter";
private static Harmony harmony;
+ ///
+ /// Intercepts StackFrame.GetMethod() calls to bypass .NET Reactor's caller verification
+ ///
[HarmonyPatch(typeof(StackFrame), "GetMethod")]
public class PatchStackTraceGetMethod
{
- // ReSharper disable once UnusedMember.Global
- // ReSharper disable once InconsistentNaming
public static void Postfix(ref MethodBase __result)
{
- if (__result.DeclaringType != typeof(RuntimeMethodHandle))
+ //Console.WriteLine($"[POSTFIX] Original result: {__result?.Name}");
+ //Console.WriteLine($"[POSTFIX] DeclaringType: {__result?.DeclaringType?.Name ?? "null"}");
+
+ // More comprehensive conditions (considering modern .NET environments)
+ bool shouldReplace =
+ __result?.DeclaringType == typeof(RuntimeMethodHandle) || // Original condition
+ __result?.Name?.StartsWith("InvokeStub_") == true || // .NET Core/5+ pattern
+ (__result?.DeclaringType == null && MethodToReplace != null); // Handle null DeclaringType
+
+ if (!shouldReplace)
+ {
+ //Console.WriteLine($"[POSTFIX] No replacement needed");
return;
- __result = MethodToReplace ?? MethodBase.GetCurrentMethod();
+ }
+
+ if (MethodToReplace != null)
+ {
+ //Console.WriteLine($"[POSTFIX] Replacing {__result?.Name} with {MethodToReplace.Name}");
+ __result = MethodToReplace;
+ }
}
+ ///
+ /// The method that will replace the original method in StackFrame.GetMethod() calls
+ /// This is used to trick .NET Reactor into thinking the call is coming from an authorized method
+ ///
public static MethodInfo MethodToReplace;
}
}
diff --git a/NETReactorSlayer.Core/Stages/StrongNamePatcher.cs b/NETReactorSlayer.Core/Stages/StrongNamePatcher.cs
index b64abf8..0fa17a4 100644
--- a/NETReactorSlayer.Core/Stages/StrongNamePatcher.cs
+++ b/NETReactorSlayer.Core/Stages/StrongNamePatcher.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,12 +13,12 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
using NETReactorSlayer.Core.Helper;
+using System.Linq;
namespace NETReactorSlayer.Core.Stages
{
@@ -69,22 +69,22 @@ public void Run(IContext context)
private MethodDef Find() =>
(from type in Context.Module.GetTypes()
- from method in type.Methods
- where method.IsStatic && method.Body != null
- let sig = method.MethodSig
- where sig != null && sig.Params.Count == 2
- where sig.RetType.ElementType is ElementType.Object or ElementType.String
- where sig.Params[0]?.ElementType is ElementType.Object or ElementType.String
- where sig.Params[1]?.ElementType is ElementType.Object or ElementType.String
- select method).FirstOrDefault(method => new LocalTypes(method).All(new[]
- {
+ from method in type.Methods
+ where method.IsStatic && method.Body != null
+ let sig = method.MethodSig
+ where sig != null && sig.Params.Count == 2
+ where sig.RetType.ElementType is ElementType.Object or ElementType.String
+ where sig.Params[0]?.ElementType is ElementType.Object or ElementType.String
+ where sig.Params[1]?.ElementType is ElementType.Object or ElementType.String
+ select method).FirstOrDefault(method => new LocalTypes(method).All(new[]
+ {
"System.Byte[]",
"System.IO.MemoryStream",
"System.Security.Cryptography.CryptoStream",
"System.Security.Cryptography.MD5",
"System.Security.Cryptography.Rijndael"
}) || new LocalTypes(method).All(new[]
- {
+ {
"System.Byte[]",
"System.IO.MemoryStream",
"System.Security.Cryptography.SymmetricAlgorithm",
@@ -93,55 +93,55 @@ where sig.Params[1]?.ElementType is ElementType.Object or ElementType.String
private static Block GetBlock(Blocks blocks, IMethod methodDef) =>
(from block in blocks.MethodBlocks.GetAllBlocks()
- where block.LastInstr.IsBrfalse()
- let instructions = block.Instructions
- where instructions.Count >= 11
- let i = instructions.Count - 11
- where instructions[i].OpCode.Code == Code.Ldtoken
- where instructions[i].Operand is ITypeDefOrRef
- where instructions[i + 1].OpCode.Code == Code.Call ||
- (instructions[i + 1].OpCode.Code == Code.Callvirt &&
- instructions[i + 1].Operand is IMethod
- {
- FullName: "System.Type System.Type::GetTypeFromHandle(System.RuntimeTypeHandle)"
- })
- where instructions[i + 2].OpCode.Code == Code.Call ||
- (instructions[i + 2].OpCode.Code == Code.Callvirt &&
- instructions[i + 2].Operand is IMethod
- {
- FullName: "System.Reflection.Assembly System.Type::get_Assembly()"
- })
- where instructions[i + 3].OpCode.Code == Code.Call ||
- (instructions[i + 3].OpCode.Code == Code.Callvirt &&
- instructions[i + 3].Operand is IMethod
- {
- FullName: "System.Reflection.AssemblyName System.Reflection.Assembly::GetName()"
- })
- where instructions[i + 4].OpCode.Code == Code.Call ||
- (instructions[i + 4].OpCode.Code == Code.Callvirt &&
- instructions[i + 4].Operand is IMethod
- {
- FullName: "System.Byte[] System.Reflection.AssemblyName::GetPublicKeyToken()"
- })
- where instructions[i + 5].OpCode.Code == Code.Call ||
- (instructions[i + 5].OpCode.Code == Code.Callvirt &&
- instructions[i + 5].Operand is IMethod
- {
- FullName: "System.String System.Convert::ToBase64String(System.Byte[])"
- })
- where instructions[i + 6].OpCode.Code == Code.Ldstr
- where instructions[i + 7].OpCode.Code == Code.Call ||
- (instructions[i + 7].OpCode.Code == Code.Callvirt &&
- instructions[i + 7].Operand is IMethod calledMethod &&
- MethodEqualityComparer.CompareDeclaringTypes.Equals(calledMethod, methodDef))
- where instructions[i + 8].OpCode.Code == Code.Ldstr
- where instructions[i + 9].OpCode.Code == Code.Call ||
- (instructions[i + 9].OpCode.Code == Code.Callvirt &&
- instructions[i + 9].Operand is IMethod
- {
- FullName: "System.Boolean System.String::op_Inequality(System.String,System.String)"
- })
- select block).FirstOrDefault();
+ where block.LastInstr.IsBrfalse()
+ let instructions = block.Instructions
+ where instructions.Count >= 11
+ let i = instructions.Count - 11
+ where instructions[i].OpCode.Code == Code.Ldtoken
+ where instructions[i].Operand is ITypeDefOrRef
+ where instructions[i + 1].OpCode.Code == Code.Call ||
+ (instructions[i + 1].OpCode.Code == Code.Callvirt &&
+ instructions[i + 1].Operand is IMethod
+ {
+ FullName: "System.Type System.Type::GetTypeFromHandle(System.RuntimeTypeHandle)"
+ })
+ where instructions[i + 2].OpCode.Code == Code.Call ||
+ (instructions[i + 2].OpCode.Code == Code.Callvirt &&
+ instructions[i + 2].Operand is IMethod
+ {
+ FullName: "System.Reflection.Assembly System.Type::get_Assembly()"
+ })
+ where instructions[i + 3].OpCode.Code == Code.Call ||
+ (instructions[i + 3].OpCode.Code == Code.Callvirt &&
+ instructions[i + 3].Operand is IMethod
+ {
+ FullName: "System.Reflection.AssemblyName System.Reflection.Assembly::GetName()"
+ })
+ where instructions[i + 4].OpCode.Code == Code.Call ||
+ (instructions[i + 4].OpCode.Code == Code.Callvirt &&
+ instructions[i + 4].Operand is IMethod
+ {
+ FullName: "System.Byte[] System.Reflection.AssemblyName::GetPublicKeyToken()"
+ })
+ where instructions[i + 5].OpCode.Code == Code.Call ||
+ (instructions[i + 5].OpCode.Code == Code.Callvirt &&
+ instructions[i + 5].Operand is IMethod
+ {
+ FullName: "System.String System.Convert::ToBase64String(System.Byte[])"
+ })
+ where instructions[i + 6].OpCode.Code == Code.Ldstr
+ where instructions[i + 7].OpCode.Code == Code.Call ||
+ (instructions[i + 7].OpCode.Code == Code.Callvirt &&
+ instructions[i + 7].Operand is IMethod calledMethod &&
+ MethodEqualityComparer.CompareDeclaringTypes.Equals(calledMethod, methodDef))
+ where instructions[i + 8].OpCode.Code == Code.Ldstr
+ where instructions[i + 9].OpCode.Code == Code.Call ||
+ (instructions[i + 9].OpCode.Code == Code.Callvirt &&
+ instructions[i + 9].Operand is IMethod
+ {
+ FullName: "System.Boolean System.String::op_Inequality(System.String,System.String)"
+ })
+ select block).FirstOrDefault();
private IContext Context { get; set; }
diff --git a/NETReactorSlayer.Core/Stages/SymbolRenamer.cs b/NETReactorSlayer.Core/Stages/SymbolRenamer.cs
index f80cd20..e861ca9 100644
--- a/NETReactorSlayer.Core/Stages/SymbolRenamer.cs
+++ b/NETReactorSlayer.Core/Stages/SymbolRenamer.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/Stages/TokenDeobfuscator.cs b/NETReactorSlayer.Core/Stages/TokenDeobfuscator.cs
index 664d315..9178ed5 100644
--- a/NETReactorSlayer.Core/Stages/TokenDeobfuscator.cs
+++ b/NETReactorSlayer.Core/Stages/TokenDeobfuscator.cs
@@ -13,11 +13,11 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.Core.Abstractions;
+using System.Linq;
namespace NETReactorSlayer.Core.Stages
{
@@ -31,8 +31,8 @@ public void Run(IContext context)
long count = 0;
foreach (var type in from type in context.Module.GetTypes()
.Where(x => !x.HasProperties && !x.HasEvents && x.Fields.Count != 0)
- from _ in type.Fields.Where(x => x.FieldType.FullName.Equals("System.ModuleHandle"))
- select type)
+ from _ in type.Fields.Where(x => x.FieldType.FullName.Equals("System.ModuleHandle"))
+ select type)
{
foreach (var method in type.Methods.Where(x => x.MethodSig != null &&
x.MethodSig.Params.Count.Equals(1) &&
@@ -48,39 +48,39 @@ from _ in type.Fields.Where(x => x.FieldType.FullName.Equals("System.ModuleHandl
goto Continue;
}
- Continue:
+ Continue:
if (typeDef != null)
foreach (var type in context.Module.GetTypes())
- foreach (var method in type.Methods.Where(x => x.HasBody && x.Body.HasInstructions))
- {
- var gpContext = GenericParamContext.Create(method);
- var blocks = new Blocks(method);
- foreach (var block in blocks.MethodBlocks.GetAllBlocks())
- for (var i = 0; i < block.Instructions.Count; i++)
- try
- {
- if (!block.Instructions[i].OpCode.Code.Equals(Code.Ldc_I4) ||
- block.Instructions[i + 1].OpCode.Code != Code.Call)
- continue;
- if (block.Instructions[i + 1].Operand is not IMethod iMethod ||
- !default(SigComparer).Equals(typeDef, iMethod.DeclaringType))
- continue;
- var methodDef = DotNetUtils.GetMethod(context.Module, iMethod);
- if (methodDef == null)
- continue;
- if (methodDef != typeMethod && methodDef != fieldMethod)
- continue;
- var token = (uint)(int)block.Instructions[i].Operand;
- block.Instructions[i] = new Instr(OpCodes.Nop.ToInstruction());
- block.Instructions[i + 1] = new Instr(new Instruction(OpCodes.Ldtoken,
- context.Module.ResolveToken(token, gpContext) as ITokenOperand));
- count++;
- }
- catch { }
+ foreach (var method in type.Methods.Where(x => x.HasBody && x.Body.HasInstructions))
+ {
+ var gpContext = GenericParamContext.Create(method);
+ var blocks = new Blocks(method);
+ foreach (var block in blocks.MethodBlocks.GetAllBlocks())
+ for (var i = 0; i < block.Instructions.Count; i++)
+ try
+ {
+ if (!block.Instructions[i].OpCode.Code.Equals(Code.Ldc_I4) ||
+ block.Instructions[i + 1].OpCode.Code != Code.Call)
+ continue;
+ if (block.Instructions[i + 1].Operand is not IMethod iMethod ||
+ !default(SigComparer).Equals(typeDef, iMethod.DeclaringType))
+ continue;
+ var methodDef = DotNetUtils.GetMethod(context.Module, iMethod);
+ if (methodDef == null)
+ continue;
+ if (methodDef != typeMethod && methodDef != fieldMethod)
+ continue;
+ var token = (uint)(int)block.Instructions[i].Operand;
+ block.Instructions[i] = new Instr(OpCodes.Nop.ToInstruction());
+ block.Instructions[i + 1] = new Instr(new Instruction(OpCodes.Ldtoken,
+ context.Module.ResolveToken(token, gpContext) as ITokenOperand));
+ count++;
+ }
+ catch { }
- blocks.GetCode(out var allInstructions, out var allExceptionHandlers);
- DotNetUtils.RestoreBody(method, allInstructions, allExceptionHandlers);
- }
+ blocks.GetCode(out var allInstructions, out var allExceptionHandlers);
+ DotNetUtils.RestoreBody(method, allInstructions, allExceptionHandlers);
+ }
if (count == 0)
diff --git a/NETReactorSlayer.Core/Stages/TypeRestorer.cs b/NETReactorSlayer.Core/Stages/TypeRestorer.cs
index ba77d3c..8e33f8a 100644
--- a/NETReactorSlayer.Core/Stages/TypeRestorer.cs
+++ b/NETReactorSlayer.Core/Stages/TypeRestorer.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.Core/packages.lock.json b/NETReactorSlayer.Core/packages.lock.json
new file mode 100644
index 0000000..7c93d73
--- /dev/null
+++ b/NETReactorSlayer.Core/packages.lock.json
@@ -0,0 +1,218 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETCoreApp,Version=v3.1": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA==",
+ "dependencies": {
+ "System.Reflection.Emit": "4.7.0",
+ "System.Reflection.Emit.Lightweight": "4.7.0"
+ }
+ },
+ "Lib.Harmony": {
+ "type": "Direct",
+ "requested": "[2.3.6, )",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw=="
+ },
+ "SharpZipLib": {
+ "type": "Direct",
+ "requested": "[1.4.2, )",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Reflection.Emit": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ=="
+ },
+ "System.Reflection.Emit.Lightweight": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA=="
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ ".NETFramework,Version=v4.8": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Direct",
+ "requested": "[2.3.6, )",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw=="
+ },
+ "SharpZipLib": {
+ "type": "Direct",
+ "requested": "[1.4.2, )",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A==",
+ "dependencies": {
+ "System.Memory": "4.5.4",
+ "System.Threading.Tasks.Extensions": "4.5.2"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "4.5.3",
+ "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw=="
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.2",
+ "contentHash": "BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net6.0": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Direct",
+ "requested": "[2.3.6, )",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "6.0.11"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Direct",
+ "requested": "[1.4.2, )",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "6.0.11",
+ "contentHash": "xqC1HIbJMBFhrpYs76oYP+NAskNVjc6v73HqLal7ECRDPIp4oRU5pPavkD//vNactCn9DA2aaald/I5N+uZ5/g=="
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net7.0": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Direct",
+ "requested": "[2.3.6, )",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "8.0.5"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Direct",
+ "requested": "[1.4.2, )",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "8.0.0"
+ }
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ },
+ "net9.0": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "Lib.Harmony": {
+ "type": "Direct",
+ "requested": "[2.3.6, )",
+ "resolved": "2.3.6",
+ "contentHash": "HqXPz33Z+R8ZDCLS5pJZthg33AMdF1bQXUbz2V7Neb9E+sMQOf4S1wquhM4pLIZFX7BZcOQubclbVreiM1+qmw==",
+ "dependencies": {
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "SharpZipLib": {
+ "type": "Direct",
+ "requested": "[1.4.2, )",
+ "resolved": "1.4.2",
+ "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "eqWHDZqYPv1PvuvoIIx5pF74plL3iEOZOl/0kQP+Y0TEbtgNnM2W6k8h8EPYs+LTJZsXuWa92n5W5sHTWvE3VA=="
+ },
+ "netreactorslayer.de4dot": {
+ "type": "Project",
+ "dependencies": {
+ "dnlib": "[4.5.0, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/NETReactorSlayer.De4dot/Deobfuscator.cs b/NETReactorSlayer.De4dot/Deobfuscator.cs
index 0280c6e..f4f538c 100644
--- a/NETReactorSlayer.De4dot/Deobfuscator.cs
+++ b/NETReactorSlayer.De4dot/Deobfuscator.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Text.RegularExpressions;
using dnlib.DotNet;
+using System.Text.RegularExpressions;
namespace NETReactorSlayer.De4dot
{
diff --git a/NETReactorSlayer.De4dot/DeobfuscatorBase.cs b/NETReactorSlayer.De4dot/DeobfuscatorBase.cs
index 889a447..4c5b03b 100644
--- a/NETReactorSlayer.De4dot/DeobfuscatorBase.cs
+++ b/NETReactorSlayer.De4dot/DeobfuscatorBase.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System;
using System.Linq;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot
{
diff --git a/NETReactorSlayer.De4dot/IDeobfuscator.cs b/NETReactorSlayer.De4dot/IDeobfuscator.cs
index bfe3176..1069e10 100644
--- a/NETReactorSlayer.De4dot/IDeobfuscator.cs
+++ b/NETReactorSlayer.De4dot/IDeobfuscator.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
using NETReactorSlayer.De4dot.Renamer;
+using System;
namespace NETReactorSlayer.De4dot
{
diff --git a/NETReactorSlayer.De4dot/IObfuscatedFile.cs b/NETReactorSlayer.De4dot/IObfuscatedFile.cs
index 6ff3120..d7471ff 100644
--- a/NETReactorSlayer.De4dot/IObfuscatedFile.cs
+++ b/NETReactorSlayer.De4dot/IObfuscatedFile.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
using dnlib.DotNet;
using NETReactorSlayer.De4dot.Renamer;
+using System;
namespace NETReactorSlayer.De4dot
{
diff --git a/NETReactorSlayer.De4dot/MethodStack.cs b/NETReactorSlayer.De4dot/MethodStack.cs
index 5d94712..627a188 100644
--- a/NETReactorSlayer.De4dot/MethodStack.cs
+++ b/NETReactorSlayer.De4dot/MethodStack.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,11 +13,11 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
+using System;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot
{
diff --git a/NETReactorSlayer.De4dot/NETReactorSlayer.De4dot.csproj b/NETReactorSlayer.De4dot/NETReactorSlayer.De4dot.csproj
index 8d5075c..3605a24 100644
--- a/NETReactorSlayer.De4dot/NETReactorSlayer.De4dot.csproj
+++ b/NETReactorSlayer.De4dot/NETReactorSlayer.De4dot.csproj
@@ -1,4 +1,4 @@
-
+
@@ -6,6 +6,8 @@
..\bin\$(Configuration)\
Library
+ AnyCPU
+ net48;net6.0;net7.0;net9.0;netcoreapp3.1
@@ -17,7 +19,7 @@
..\Libs\netcoreapp3.1\de4dot.blocks.dll
-
+
diff --git a/NETReactorSlayer.De4dot/PushedArgs.cs b/NETReactorSlayer.De4dot/PushedArgs.cs
index db06588..8f7a24e 100644
--- a/NETReactorSlayer.De4dot/PushedArgs.cs
+++ b/NETReactorSlayer.De4dot/PushedArgs.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using dnlib.DotNet.Emit;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot
{
diff --git a/NETReactorSlayer.De4dot/RandomNameChecker.cs b/NETReactorSlayer.De4dot/RandomNameChecker.cs
index 4c7bbe0..c5a9226 100644
--- a/NETReactorSlayer.De4dot/RandomNameChecker.cs
+++ b/NETReactorSlayer.De4dot/RandomNameChecker.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/EventDefDict.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/EventDefDict.cs
index 1d84b1d..c451689 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/EventDefDict.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/EventDefDict.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using de4dot.blocks;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/FieldDefDict.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/FieldDefDict.cs
index eee0ccc..d569fbd 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/FieldDefDict.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/FieldDefDict.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using de4dot.blocks;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/InterfaceMethodInfos.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/InterfaceMethodInfos.cs
index d8cf4e5..7fe5635 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/InterfaceMethodInfos.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/InterfaceMethodInfos.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System;
using System.Collections.Generic;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/MEventDef.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/MEventDef.cs
index 77ad17a..6fe75b9 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/MEventDef.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/MEventDef.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System.Collections.Generic;
using System.Linq;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/MGenericParamDef.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/MGenericParamDef.cs
index 82342f1..934ce2a 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/MGenericParamDef.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/MGenericParamDef.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System.Collections.Generic;
using System.Linq;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/MMethodDef.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/MMethodDef.cs
index 3db2db4..ca0fd67 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/MMethodDef.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/MMethodDef.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using dnlib.DotNet;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/MPropertyDef.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/MPropertyDef.cs
index 917af96..9403415 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/MPropertyDef.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/MPropertyDef.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System.Collections.Generic;
using System.Linq;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/MTypeDef.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/MTypeDef.cs
index 1c68bb4..770a52d 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/MTypeDef.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/MTypeDef.cs
@@ -13,11 +13,11 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using de4dot.blocks;
+using dnlib.DotNet;
using System;
using System.Collections.Generic;
using System.Linq;
-using de4dot.blocks;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
@@ -104,32 +104,32 @@ public void AddMembers()
Add(new MPropertyDef(type.Properties[i], this, i));
foreach (var propDef in _properties.GetValues())
- foreach (var method in propDef.MethodDefs())
- {
- var methodDef = FindMethod(method);
- if (methodDef == null)
- throw new ApplicationException("Could not find property method");
- methodDef.Property = propDef;
- if (method == propDef.PropertyDef.GetMethod)
- propDef.GetMethod = methodDef;
- if (method == propDef.PropertyDef.SetMethod)
- propDef.SetMethod = methodDef;
- }
+ foreach (var method in propDef.MethodDefs())
+ {
+ var methodDef = FindMethod(method);
+ if (methodDef == null)
+ throw new ApplicationException("Could not find property method");
+ methodDef.Property = propDef;
+ if (method == propDef.PropertyDef.GetMethod)
+ propDef.GetMethod = methodDef;
+ if (method == propDef.PropertyDef.SetMethod)
+ propDef.SetMethod = methodDef;
+ }
foreach (var eventDef in _events.GetValues())
- foreach (var method in eventDef.MethodDefs())
- {
- var methodDef = FindMethod(method);
- if (methodDef == null)
- throw new ApplicationException("Could not find event method");
- methodDef.Event = eventDef;
- if (method == eventDef.EventDef.AddMethod)
- eventDef.AddMethod = methodDef;
- if (method == eventDef.EventDef.RemoveMethod)
- eventDef.RemoveMethod = methodDef;
- if (method == eventDef.EventDef.InvokeMethod)
- eventDef.RaiseMethod = methodDef;
- }
+ foreach (var method in eventDef.MethodDefs())
+ {
+ var methodDef = FindMethod(method);
+ if (methodDef == null)
+ throw new ApplicationException("Could not find event method");
+ methodDef.Event = eventDef;
+ if (method == eventDef.EventDef.AddMethod)
+ eventDef.AddMethod = methodDef;
+ if (method == eventDef.EventDef.RemoveMethod)
+ eventDef.RemoveMethod = methodDef;
+ if (method == eventDef.EventDef.InvokeMethod)
+ eventDef.RaiseMethod = methodDef;
+ }
}
public void OnTypesRenamed()
@@ -219,20 +219,20 @@ private void InitializeInterfaceMethods(MethodNameGroups groups)
methodsDict[method.MethodDef] = method;
foreach (var ifaceInfo in Interfaces)
- foreach (var methodsList in ifaceInfo.TypeDef._virtualMethodInstances.GetMethods())
- {
- if (methodsList.Count < 1)
- continue;
- var methodInst = methodsList[0];
- var ifaceMethod = methodInst.OrigMethodDef;
- if (!ifaceMethod.IsVirtual())
- continue;
- var ifaceMethodRef =
- GenericArgsSubstitutor.Create(methodInst.MethodRef, ifaceInfo.TypeRef.TryGetGenericInstSig());
- if (!methodsDict.TryGetValue(ifaceMethodRef, out var classMethod))
- continue;
- _interfaceMethodInfos.AddMethod(ifaceInfo, ifaceMethod, classMethod);
- }
+ foreach (var methodsList in ifaceInfo.TypeDef._virtualMethodInstances.GetMethods())
+ {
+ if (methodsList.Count < 1)
+ continue;
+ var methodInst = methodsList[0];
+ var ifaceMethod = methodInst.OrigMethodDef;
+ if (!ifaceMethod.IsVirtual())
+ continue;
+ var ifaceMethodRef =
+ GenericArgsSubstitutor.Create(methodInst.MethodRef, ifaceInfo.TypeRef.TryGetGenericInstSig());
+ if (!methodsDict.TryGetValue(ifaceMethodRef, out var classMethod))
+ continue;
+ _interfaceMethodInfos.AddMethod(ifaceInfo, ifaceMethod, classMethod);
+ }
}
methodsDict.Clear();
@@ -247,19 +247,19 @@ private void InitializeInterfaceMethods(MethodNameGroups groups)
}
foreach (var ifaceInfo in _allImplementedInterfaces.Keys)
- foreach (var methodsList in ifaceInfo.TypeDef._virtualMethodInstances.GetMethods())
- {
- if (methodsList.Count < 1)
- continue;
- var ifaceMethod = methodsList[0].OrigMethodDef;
- if (!ifaceMethod.IsVirtual())
- continue;
- var ifaceMethodRef =
- GenericArgsSubstitutor.Create(ifaceMethod.MethodDef, ifaceInfo.TypeRef.TryGetGenericInstSig());
- if (!methodsDict.TryGetValue(ifaceMethodRef, out var classMethod))
- continue;
- _interfaceMethodInfos.AddMethodIfEmpty(ifaceInfo, ifaceMethod, classMethod);
- }
+ foreach (var methodsList in ifaceInfo.TypeDef._virtualMethodInstances.GetMethods())
+ {
+ if (methodsList.Count < 1)
+ continue;
+ var ifaceMethod = methodsList[0].OrigMethodDef;
+ if (!ifaceMethod.IsVirtual())
+ continue;
+ var ifaceMethodRef =
+ GenericArgsSubstitutor.Create(ifaceMethod.MethodDef, ifaceInfo.TypeRef.TryGetGenericInstSig());
+ if (!methodsDict.TryGetValue(ifaceMethodRef, out var classMethod))
+ continue;
+ _interfaceMethodInfos.AddMethodIfEmpty(ifaceInfo, ifaceMethod, classMethod);
+ }
methodsDict.Clear();
var ifaceMethodsDict =
@@ -291,9 +291,9 @@ private void InitializeInterfaceMethods(MethodNameGroups groups)
}
foreach (var __ in from info in _interfaceMethodInfos.AllInfos
- from _ in info.IfaceMethodToClassMethod.Where(pair => pair.Value == null)
- .Where(_ => ResolvedAllInterfaces())
- select info)
+ from _ in info.IfaceMethodToClassMethod.Where(pair => pair.Value == null)
+ .Where(_ => ResolvedAllInterfaces())
+ select info)
ResolvedBaseClasses();
foreach (var pair in _interfaceMethodInfos.AllInfos.SelectMany(info => info.IfaceMethodToClassMethod
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodDefDict.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodDefDict.cs
index c2e85a2..a46fc60 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodDefDict.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodDefDict.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using de4dot.blocks;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodInstances.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodInstances.cs
index 4ff7ba8..f72ff35 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodInstances.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodInstances.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using de4dot.blocks;
using dnlib.DotNet;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
@@ -24,11 +24,11 @@ public class MethodInstances
public void InitializeFrom(MethodInstances other, GenericInstSig git)
{
foreach (var list in other._methodInstances.Values)
- foreach (var methodInst in list)
- {
- var newMethod = GenericArgsSubstitutor.Create(methodInst.MethodRef, git);
- Add(new MethodInst(methodInst.OrigMethodDef, newMethod));
- }
+ foreach (var methodInst in list)
+ {
+ var newMethod = GenericArgsSubstitutor.Create(methodInst.MethodRef, git);
+ Add(new MethodInst(methodInst.OrigMethodDef, newMethod));
+ }
}
public void Add(MethodInst methodInst)
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodNameGroup.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodNameGroup.cs
index 1a064ca..5824ede 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodNameGroup.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/MethodNameGroup.cs
@@ -34,16 +34,16 @@ public void Merge(MethodNameGroup other)
public bool HasInterfaceMethod() => Methods.Any(method => method.Owner.TypeDef.IsInterface);
public bool HasGetterOrSetterPropertyMethod() => (from method in Methods
- where method.Property != null
- let prop = method.Property
- where method == prop.GetMethod || method == prop.SetMethod
- select method).Any();
+ where method.Property != null
+ let prop = method.Property
+ where method == prop.GetMethod || method == prop.SetMethod
+ select method).Any();
public bool HasAddRemoveOrRaiseEventMethod() => (from method in Methods
- where method.Event != null
- let evt = method.Event
- where method == evt.AddMethod || method == evt.RemoveMethod || method == evt.RaiseMethod
- select method).Any();
+ where method.Event != null
+ let evt = method.Event
+ where method == evt.AddMethod || method == evt.RemoveMethod || method == evt.RaiseMethod
+ select method).Any();
public bool HasProperty() => Methods.Any(method => method.Property != null);
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/Module.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/Module.cs
index feb3823..4f4e93e 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/Module.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/Module.cs
@@ -13,10 +13,10 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System;
using System.Collections.Generic;
using System.Linq;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/Modules.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/Modules.cs
index 19f6199..1595906 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/Modules.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/Modules.cs
@@ -13,10 +13,10 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System;
using System.Collections.Generic;
using System.Linq;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
@@ -81,12 +81,12 @@ private void InitAllTypes()
}
foreach (var typeDef in _allTypes)
- foreach (var iface in typeDef.TypeDef.Interfaces)
- {
- var ifaceTypeDef = ResolveType(iface.Interface) ?? ResolveOther(iface.Interface);
- if (ifaceTypeDef != null)
- typeDef.AddInterface(ifaceTypeDef, iface.Interface);
- }
+ foreach (var iface in typeDef.TypeDef.Interfaces)
+ {
+ var ifaceTypeDef = ResolveType(iface.Interface) ?? ResolveOther(iface.Interface);
+ if (ifaceTypeDef != null)
+ typeDef.AddInterface(ifaceTypeDef, iface.Interface);
+ }
var allTypesDict = new Dictionary();
foreach (var t in _allTypes)
@@ -182,24 +182,24 @@ private IEnumerable FindModules(IType type)
case ScopeType.AssemblyRef:
return FindModules((AssemblyRef)scope);
case ScopeType.ModuleDef:
- {
- var findModules = FindModules((ModuleDef)scope);
- if (findModules != null)
- return findModules;
- break;
- }
- case ScopeType.ModuleRef:
- {
- var moduleRef = (ModuleRef)scope;
- if (moduleRef.Name == type.Module.Name)
{
- var findModules = FindModules(type.Module);
+ var findModules = FindModules((ModuleDef)scope);
if (findModules != null)
return findModules;
+ break;
}
+ case ScopeType.ModuleRef:
+ {
+ var moduleRef = (ModuleRef)scope;
+ if (moduleRef.Name == type.Module.Name)
+ {
+ var findModules = FindModules(type.Module);
+ if (findModules != null)
+ return findModules;
+ }
- break;
- }
+ break;
+ }
}
if (scopeType is not (ScopeType.ModuleRef or ScopeType.ModuleDef))
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/PropertyDefDict.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/PropertyDefDict.cs
index 0018b64..ab8c818 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/PropertyDefDict.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/PropertyDefDict.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using de4dot.blocks;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/AsmModules/TypeDefDict.cs b/NETReactorSlayer.De4dot/Renamer/AsmModules/TypeDefDict.cs
index 2b87bf2..0d110d3 100644
--- a/NETReactorSlayer.De4dot/Renamer/AsmModules/TypeDefDict.cs
+++ b/NETReactorSlayer.De4dot/Renamer/AsmModules/TypeDefDict.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using de4dot.blocks;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot.Renamer.AsmModules
{
diff --git a/NETReactorSlayer.De4dot/Renamer/DerivedFrom.cs b/NETReactorSlayer.De4dot/Renamer/DerivedFrom.cs
index ba3b547..e52c007 100644
--- a/NETReactorSlayer.De4dot/Renamer/DerivedFrom.cs
+++ b/NETReactorSlayer.De4dot/Renamer/DerivedFrom.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using NETReactorSlayer.De4dot.Renamer.AsmModules;
using System;
using System.Collections.Generic;
-using NETReactorSlayer.De4dot.Renamer.AsmModules;
namespace NETReactorSlayer.De4dot.Renamer
{
diff --git a/NETReactorSlayer.De4dot/Renamer/ExistingNames.cs b/NETReactorSlayer.De4dot/Renamer/ExistingNames.cs
index 28cac57..6a836d8 100644
--- a/NETReactorSlayer.De4dot/Renamer/ExistingNames.cs
+++ b/NETReactorSlayer.De4dot/Renamer/ExistingNames.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System;
using System.Collections.Generic;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer
{
diff --git a/NETReactorSlayer.De4dot/Renamer/MemberInfos.cs b/NETReactorSlayer.De4dot/Renamer/MemberInfos.cs
index 6fea428..58f6c23 100644
--- a/NETReactorSlayer.De4dot/Renamer/MemberInfos.cs
+++ b/NETReactorSlayer.De4dot/Renamer/MemberInfos.cs
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
using NETReactorSlayer.De4dot.Renamer.AsmModules;
+using System.Collections.Generic;
namespace NETReactorSlayer.De4dot.Renamer
{
diff --git a/NETReactorSlayer.De4dot/Renamer/Renamer.cs b/NETReactorSlayer.De4dot/Renamer/Renamer.cs
index b741276..fa427a4 100644
--- a/NETReactorSlayer.De4dot/Renamer/Renamer.cs
+++ b/NETReactorSlayer.De4dot/Renamer/Renamer.cs
@@ -13,13 +13,13 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using de4dot.blocks;
+using dnlib.DotNet;
+using NETReactorSlayer.De4dot.Renamer.AsmModules;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
-using de4dot.blocks;
-using dnlib.DotNet;
-using NETReactorSlayer.De4dot.Renamer.AsmModules;
namespace NETReactorSlayer.De4dot.Renamer
{
@@ -63,22 +63,22 @@ private void RenameResourceKeys()
private static void RemoveUselessOverrides(MethodNameGroups groups)
{
foreach (var group in groups.GetAllGroups())
- foreach (var method in group.Methods)
- {
- if (!method.Owner.HasModule)
- continue;
- if (!method.IsPublic())
- continue;
- var overrides = method.MethodDef.Overrides;
- for (var i = 0; i < overrides.Count; i++)
+ foreach (var method in group.Methods)
{
- var overrideMethod = overrides[i].MethodDeclaration;
- if (method.MethodDef.Name != overrideMethod.Name)
+ if (!method.Owner.HasModule)
+ continue;
+ if (!method.IsPublic())
continue;
- overrides.RemoveAt(i);
- i--;
+ var overrides = method.MethodDef.Overrides;
+ for (var i = 0; i < overrides.Count; i++)
+ {
+ var overrideMethod = overrides[i].MethodDeclaration;
+ if (method.MethodDef.Name != overrideMethod.Name)
+ continue;
+ overrides.RemoveAt(i);
+ i--;
+ }
}
- }
}
private void RenameTypeDefs()
@@ -339,9 +339,9 @@ private void ResetVirtualPropertyNames(IEnumerable allGroups)
foreach (var group in allGroups)
{
var prop = (from method in @group.Methods
- where method.Property != null
- where !method.Owner.HasModule
- select method.Property).FirstOrDefault();
+ where method.Property != null
+ where !method.Owner.HasModule
+ select method.Property).FirstOrDefault();
if (prop == null)
continue;
@@ -358,9 +358,9 @@ private void ResetVirtualEventNames(IEnumerable allGroups)
foreach (var group in allGroups)
{
var evt = (from method in @group.Methods
- where method.Event != null
- where !method.Owner.HasModule
- select method.Event).FirstOrDefault();
+ where method.Event != null
+ where !method.Owner.HasModule
+ select method.Event).FirstOrDefault();
if (evt == null)
continue;
@@ -465,18 +465,18 @@ private void RestorePropertiesFromNames2(IEnumerable allGroups)
}
foreach (var type in _modules.AllTypes)
- foreach (var method in type.AllMethodsSorted)
- {
- if (method.IsVirtual())
- continue;
- if (method.Property != null)
- continue;
- var methodName = method.MethodDef.Name.String;
- if (Utils.StartsWith(methodName, "get_", StringComparison.Ordinal))
- CreatePropertyGetter(methodName.Substring(4), method);
- else if (Utils.StartsWith(methodName, "set_", StringComparison.Ordinal))
- CreatePropertySetter(methodName.Substring(4), method);
- }
+ foreach (var method in type.AllMethodsSorted)
+ {
+ if (method.IsVirtual())
+ continue;
+ if (method.Property != null)
+ continue;
+ var methodName = method.MethodDef.Name.String;
+ if (Utils.StartsWith(methodName, "get_", StringComparison.Ordinal))
+ CreatePropertyGetter(methodName.Substring(4), method);
+ else if (Utils.StartsWith(methodName, "set_", StringComparison.Ordinal))
+ CreatePropertySetter(methodName.Substring(4), method);
+ }
}
private void CreatePropertyGetter(string name, MMethodDef propMethod)
@@ -681,18 +681,18 @@ private void RestoreEventsFromNames2(IEnumerable allGroups)
}
foreach (var type in _modules.AllTypes)
- foreach (var method in type.AllMethodsSorted)
- {
- if (method.IsVirtual())
- continue;
- if (method.Event != null)
- continue;
- var methodName = method.MethodDef.Name.String;
- if (Utils.StartsWith(methodName, "add_", StringComparison.Ordinal))
- CreateEventAdder(methodName.Substring(4), method);
- else if (Utils.StartsWith(methodName, "remove_", StringComparison.Ordinal))
- CreateEventRemover(methodName.Substring(7), method);
- }
+ foreach (var method in type.AllMethodsSorted)
+ {
+ if (method.IsVirtual())
+ continue;
+ if (method.Event != null)
+ continue;
+ var methodName = method.MethodDef.Name.String;
+ if (Utils.StartsWith(methodName, "add_", StringComparison.Ordinal))
+ CreateEventAdder(methodName.Substring(4), method);
+ else if (Utils.StartsWith(methodName, "remove_", StringComparison.Ordinal))
+ CreateEventRemover(methodName.Substring(7), method);
+ }
}
private void CreateEventAdder(string name, MMethodDef eventMethod)
@@ -836,26 +836,26 @@ private string[] GetValidArgNames(MethodNameGroup group)
{
var methods = new List(group.Methods);
foreach (var method in group.Methods)
- foreach (var ovrd in method.MethodDef.Overrides)
- {
- var overrideRef = ovrd.MethodDeclaration;
- var overrideDef = _modules.ResolveMethod(overrideRef);
- if (overrideDef == null)
+ foreach (var ovrd in method.MethodDef.Overrides)
{
- var typeDef = _modules.ResolveType(overrideRef.DeclaringType) ??
- _modules.ResolveOther(overrideRef.DeclaringType);
- if (typeDef == null)
- continue;
- overrideDef = typeDef.FindMethod(overrideRef);
+ var overrideRef = ovrd.MethodDeclaration;
+ var overrideDef = _modules.ResolveMethod(overrideRef);
if (overrideDef == null)
+ {
+ var typeDef = _modules.ResolveType(overrideRef.DeclaringType) ??
+ _modules.ResolveOther(overrideRef.DeclaringType);
+ if (typeDef == null)
+ continue;
+ overrideDef = typeDef.FindMethod(overrideRef);
+ if (overrideDef == null)
+ continue;
+ }
+
+ if (overrideDef.VisibleParameterCount != method.VisibleParameterCount)
continue;
+ methods.Add(overrideDef);
}
- if (overrideDef.VisibleParameterCount != method.VisibleParameterCount)
- continue;
- methods.Add(overrideDef);
- }
-
var argNames = new string[group.Methods[0].ParamDefs.Count];
foreach (var method in methods)
{
@@ -1112,11 +1112,11 @@ private static MMethodDef GetPropertyMethod(MethodNameGroup group) =>
group.Methods.FirstOrDefault(method => method.Property != null);
private string GetSuggestedPropertyName(MethodNameGroup group) => (from method in @group.Methods
- where method.Property != null
- select _memberInfos.Property(method.Property)
+ where method.Property != null
+ select _memberInfos.Property(method.Property)
into info
- where info.SuggestedName != null
- select info.SuggestedName).FirstOrDefault();
+ where info.SuggestedName != null
+ select info.SuggestedName).FirstOrDefault();
internal static ITypeDefOrRef GetScopeType(TypeSig typeSig)
{
@@ -1265,21 +1265,21 @@ private MMethodDef GetOverriddenMethod(MMethodDef overrideMethod) =>
_modules.ResolveMethod(overrideMethod.MethodDef.Overrides[0].MethodDeclaration);
private string GetSuggestedMethodName(MethodNameGroup group) => (from method in @group.Methods
- select _memberInfos.Method(method)
+ select _memberInfos.Method(method)
into info
- where info.SuggestedName != null
- select info.SuggestedName).FirstOrDefault();
+ where info.SuggestedName != null
+ select info.SuggestedName).FirstOrDefault();
private bool HasInvalidMethodName(MethodNameGroup group) => (from method in @group.Methods
- let typeInfo = _memberInfos.Type(method.Owner)
- let methodInfo = _memberInfos.Method(method)
- where !typeInfo.NameChecker.IsValidMethodName(methodInfo.OldName)
- select typeInfo).Any();
+ let typeInfo = _memberInfos.Type(method.Owner)
+ let methodInfo = _memberInfos.Method(method)
+ where !typeInfo.NameChecker.IsValidMethodName(methodInfo.OldName)
+ select typeInfo).Any();
private static string GetAvailableName(string prefix, bool tryWithoutZero, MethodNameGroup group,
Func checkAvailable)
{
- for (var i = 0;; i++)
+ for (var i = 0; ; i++)
{
var newName = i == 0 && tryWithoutZero ? prefix : prefix + i;
if (checkAvailable(group, newName))
@@ -1302,14 +1302,14 @@ private bool HasDelegateOwner(MethodNameGroup group) =>
private void PrepareRenameEntryPoints()
{
foreach (var methodDef in from module in _modules.TheModules
- select module.ModuleDefMd.EntryPoint
+ select module.ModuleDefMd.EntryPoint
into entryPoint
- where entryPoint != null
- select _modules.ResolveMethod(entryPoint)
+ where entryPoint != null
+ select _modules.ResolveMethod(entryPoint)
into methodDef
- where methodDef != null
- where methodDef.IsStatic()
- select methodDef)
+ where methodDef != null
+ where methodDef.IsStatic()
+ select methodDef)
{
_memberInfos.Method(methodDef).SuggestedName = "Main";
if (methodDef.ParamDefs.Count != 1)
@@ -1579,8 +1579,8 @@ public void VisitAll(Action func)
_methodToGroup = new Dictionary();
foreach (var group in _groups)
- foreach (var method in group.Methods)
- _methodToGroup[method] = group;
+ foreach (var method in group.Methods)
+ _methodToGroup[method] = group;
foreach (var type in _allTypes)
Visit(type);
diff --git a/NETReactorSlayer.De4dot/Renamer/ResourceKeysRenamer.cs b/NETReactorSlayer.De4dot/Renamer/ResourceKeysRenamer.cs
index 93daaaa..fd96f2d 100644
--- a/NETReactorSlayer.De4dot/Renamer/ResourceKeysRenamer.cs
+++ b/NETReactorSlayer.De4dot/Renamer/ResourceKeysRenamer.cs
@@ -13,16 +13,16 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using de4dot.blocks;
+using dnlib.DotNet;
+using dnlib.DotNet.Emit;
+using dnlib.DotNet.Resources;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
-using de4dot.blocks;
-using dnlib.DotNet;
-using dnlib.DotNet.Emit;
-using dnlib.DotNet.Resources;
namespace NETReactorSlayer.De4dot.Renamer
{
@@ -136,8 +136,8 @@ private static void Rename(TypeDef type, List renamed)
nameToInfo[info.Element.Name] = info;
foreach (var instrs in from method in type.Methods
- where method.Body != null
- select method.Body.Instructions)
+ where method.Body != null
+ select method.Body.Instructions)
for (var i = 0; i < instrs.Count; i++)
{
var call = instrs[i];
@@ -223,7 +223,7 @@ private string CreatePrefixFromStringData(string data)
private string CreateName(Func create)
{
- for (var counter = 0;; counter++)
+ for (var counter = 0; ; counter++)
{
var newName = create(counter);
if (_newNames.ContainsKey(newName))
diff --git a/NETReactorSlayer.De4dot/Renamer/ResourceRenamer.cs b/NETReactorSlayer.De4dot/Renamer/ResourceRenamer.cs
index 4186fc2..750a506 100644
--- a/NETReactorSlayer.De4dot/Renamer/ResourceRenamer.cs
+++ b/NETReactorSlayer.De4dot/Renamer/ResourceRenamer.cs
@@ -13,14 +13,14 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.De4dot.Renamer.AsmModules;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
namespace NETReactorSlayer.De4dot.Renamer
{
@@ -63,8 +63,8 @@ private void RenameResourceNamesInCode(List renamedTypes)
oldNameToTypeInfo[EscapeTypeName(info.OldFullName)] = info;
foreach (var instrs in from method in _module.GetAllMethods()
- where method.HasBody
- select method.Body.Instructions)
+ where method.HasBody
+ select method.Body.Instructions)
for (var i = 0; i < instrs.Count; i++)
{
var instr = instrs[i];
diff --git a/NETReactorSlayer.De4dot/Renamer/TypeInfo.cs b/NETReactorSlayer.De4dot/Renamer/TypeInfo.cs
index bd030e8..6655008 100644
--- a/NETReactorSlayer.De4dot/Renamer/TypeInfo.cs
+++ b/NETReactorSlayer.De4dot/Renamer/TypeInfo.cs
@@ -13,14 +13,14 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text.RegularExpressions;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using NETReactorSlayer.De4dot.Renamer.AsmModules;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.RegularExpressions;
namespace NETReactorSlayer.De4dot.Renamer
{
@@ -154,10 +154,10 @@ private void PrepareRenameFields()
var i = 0;
var nameFormat = HasFlagsAttribute() ? "flag_{0}" : "const_{0}";
foreach (var fieldInfo in from fieldDef in Type.AllFieldsSorted
- let fieldInfo = Field(fieldDef)
- where !fieldInfo.Renamed
- where fieldDef.FieldDef.IsStatic && fieldDef.FieldDef.IsLiteral
- select fieldInfo)
+ let fieldInfo = Field(fieldDef)
+ where !fieldInfo.Renamed
+ where fieldDef.FieldDef.IsStatic && fieldDef.FieldDef.IsLiteral
+ select fieldInfo)
{
if (!checker.IsValidFieldName(fieldInfo.OldName))
fieldInfo.Rename(string.Format(nameFormat, i));
@@ -439,9 +439,9 @@ private void InitializeWindowsFormsFieldsAndProps()
ourMethods.Add(methodDef.MethodDef, methodDef);
foreach (var instructions in from methodDef in Type.AllMethods
- where methodDef.MethodDef.Body != null
- where !methodDef.MethodDef.IsStatic && !methodDef.MethodDef.IsVirtual
- select methodDef.MethodDef.Body.Instructions)
+ where methodDef.MethodDef.Body != null
+ where !methodDef.MethodDef.IsStatic && !methodDef.MethodDef.IsVirtual
+ select methodDef.MethodDef.Body.Instructions)
for (var i = 2; i < instructions.Count; i++)
{
var call = instructions[i];
@@ -462,22 +462,22 @@ private void InitializeWindowsFormsFieldsAndProps()
{
case Code.Call:
case Code.Callvirt:
- {
- if (instr.Operand is not IMethod calledMethod)
- continue;
- var calledMethodDef = ourMethods.Find(calledMethod);
- if (calledMethodDef == null)
- continue;
- fieldRef = GetFieldRef(calledMethodDef.MethodDef);
-
- var propDef = calledMethodDef.Property;
- if (propDef == null)
- continue;
-
- _memberInfos.Property(propDef).SuggestedName = fieldName;
- fieldName = "_" + fieldName;
- break;
- }
+ {
+ if (instr.Operand is not IMethod calledMethod)
+ continue;
+ var calledMethodDef = ourMethods.Find(calledMethod);
+ if (calledMethodDef == null)
+ continue;
+ fieldRef = GetFieldRef(calledMethodDef.MethodDef);
+
+ var propDef = calledMethodDef.Property;
+ if (propDef == null)
+ continue;
+
+ _memberInfos.Property(propDef).SuggestedName = fieldName;
+ fieldName = "_" + fieldName;
+ break;
+ }
case Code.Ldfld:
fieldRef = instr.Operand as IField;
break;
@@ -664,9 +664,9 @@ private void InitFieldEventHandlers(FieldDefDictBase fieldDefDictBase
var checker = NameChecker;
foreach (var instructions in from methodDef in Type.AllMethods
- where methodDef.MethodDef.Body != null
- where !methodDef.MethodDef.IsStatic
- select methodDef.MethodDef.Body.Instructions)
+ where methodDef.MethodDef.Body != null
+ where !methodDef.MethodDef.IsStatic
+ select methodDef.MethodDef.Body.Instructions)
for (var i = 0; i < instructions.Count - 6; i++)
{
if (instructions[i].GetParameterIndex() != 0)
@@ -736,11 +736,11 @@ private void InitTypeEventHandlers(MethodDefDictBase methodDefDictBa
var checker = NameChecker;
foreach (var instructions in from methodDef in Type.AllMethods
- where methodDef.MethodDef.Body != null
- where !methodDef.MethodDef.IsStatic
- select methodDef.MethodDef
+ where methodDef.MethodDef.Body != null
+ where !methodDef.MethodDef.IsStatic
+ select methodDef.MethodDef
into method
- select method.Body.Instructions)
+ select method.Body.Instructions)
for (var i = 0; i < instructions.Count - 5; i++)
{
if (instructions[i].GetParameterIndex() != 0)
@@ -843,13 +843,13 @@ private string FindWindowsFormsClassName(MTypeDef type)
private void FindInitializeComponentMethod(MTypeDef type, MMethodDef possibleInitMethod)
{
if ((from methodDef in type.AllMethods
- where methodDef.MethodDef.Name == ".ctor"
- where methodDef.MethodDef.Body != null
- from instr in methodDef.MethodDef.Body.Instructions
- where instr.OpCode.Code is Code.Call or Code.Callvirt
- select instr).Any(instr => MethodEqualityComparer.CompareDeclaringTypes.Equals(
- possibleInitMethod.MethodDef,
- instr.Operand as IMethod)))
+ where methodDef.MethodDef.Name == ".ctor"
+ where methodDef.MethodDef.Body != null
+ from instr in methodDef.MethodDef.Body.Instructions
+ where instr.OpCode.Code is Code.Call or Code.Callvirt
+ select instr).Any(instr => MethodEqualityComparer.CompareDeclaringTypes.Equals(
+ possibleInitMethod.MethodDef,
+ instr.Operand as IMethod)))
_memberInfos.Method(possibleInitMethod).SuggestedName = "InitializeComponent";
}
diff --git a/NETReactorSlayer.De4dot/Renamer/TypeNames.cs b/NETReactorSlayer.De4dot/Renamer/TypeNames.cs
index f9cbf91..acd7d08 100644
--- a/NETReactorSlayer.De4dot/Renamer/TypeNames.cs
+++ b/NETReactorSlayer.De4dot/Renamer/TypeNames.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System;
using System.Collections.Generic;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer
{
@@ -29,12 +29,12 @@ public string Create(TypeSig typeRef)
case null:
return UnknownNameCreator.Create();
case GenericInstSig gis:
- {
- if (gis.FullName == "System.Nullable`1" &&
- gis.GenericArguments.Count == 1 && gis.GenericArguments[0] != null)
- typeRef = gis.GenericArguments[0];
- break;
- }
+ {
+ if (gis.FullName == "System.Nullable`1" &&
+ gis.GenericArguments.Count == 1 && gis.GenericArguments[0] != null)
+ typeRef = gis.GenericArguments[0];
+ break;
+ }
}
var prefix = GetPrefix(typeRef);
diff --git a/NETReactorSlayer.De4dot/Renamer/TypeRenamerState.cs b/NETReactorSlayer.De4dot/Renamer/TypeRenamerState.cs
index 67a80fd..8c64166 100644
--- a/NETReactorSlayer.De4dot/Renamer/TypeRenamerState.cs
+++ b/NETReactorSlayer.De4dot/Renamer/TypeRenamerState.cs
@@ -13,9 +13,9 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
using System;
using System.Collections.Generic;
-using dnlib.DotNet;
namespace NETReactorSlayer.De4dot.Renamer
{
diff --git a/NETReactorSlayer.De4dot/TypesRestorer.cs b/NETReactorSlayer.De4dot/TypesRestorer.cs
index 65de900..702e012 100644
--- a/NETReactorSlayer.De4dot/TypesRestorer.cs
+++ b/NETReactorSlayer.De4dot/TypesRestorer.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,8 +13,8 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System;
using dnlib.DotNet;
+using System;
namespace NETReactorSlayer.De4dot
{
diff --git a/NETReactorSlayer.De4dot/TypesRestorerBase.cs b/NETReactorSlayer.De4dot/TypesRestorerBase.cs
index 58c6b4d..3a23d8d 100644
--- a/NETReactorSlayer.De4dot/TypesRestorerBase.cs
+++ b/NETReactorSlayer.De4dot/TypesRestorerBase.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,11 +13,11 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
-using System.Collections.Generic;
-using System.Linq;
using de4dot.blocks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
+using System.Collections.Generic;
+using System.Linq;
namespace NETReactorSlayer.De4dot
{
diff --git a/NETReactorSlayer.De4dot/packages.lock.json b/NETReactorSlayer.De4dot/packages.lock.json
new file mode 100644
index 0000000..a6c27ab
--- /dev/null
+++ b/NETReactorSlayer.De4dot/packages.lock.json
@@ -0,0 +1,59 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETCoreApp,Version=v3.1": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA==",
+ "dependencies": {
+ "System.Reflection.Emit": "4.7.0",
+ "System.Reflection.Emit.Lightweight": "4.7.0"
+ }
+ },
+ "System.Reflection.Emit": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ=="
+ },
+ "System.Reflection.Emit.Lightweight": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA=="
+ }
+ },
+ ".NETFramework,Version=v4.8": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ }
+ },
+ "net6.0": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ }
+ },
+ "net7.0": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ }
+ },
+ "net9.0": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/NETReactorSlayer.GUI/Dialogs/MsgBox.cs b/NETReactorSlayer.GUI/Dialogs/MsgBox.cs
index 2d5aa93..f8bd4e3 100644
--- a/NETReactorSlayer.GUI/Dialogs/MsgBox.cs
+++ b/NETReactorSlayer.GUI/Dialogs/MsgBox.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,6 +13,7 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using NETReactorSlayer.GUI.Properties;
using System;
using System.Collections.Generic;
using System.Drawing;
@@ -21,7 +22,6 @@ You should have received a copy of the GNU General Public License
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
-using NETReactorSlayer.GUI.Properties;
namespace NETReactorSlayer.GUI.Dialogs
{
diff --git a/NETReactorSlayer.GUI/Logger.cs b/NETReactorSlayer.GUI/Logger.cs
index 4db869d..6f88fa5 100644
--- a/NETReactorSlayer.GUI/Logger.cs
+++ b/NETReactorSlayer.GUI/Logger.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.GUI/MainWindow.Designer.cs b/NETReactorSlayer.GUI/MainWindow.Designer.cs
index fd4efa6..96e046c 100644
--- a/NETReactorSlayer.GUI/MainWindow.Designer.cs
+++ b/NETReactorSlayer.GUI/MainWindow.Designer.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -48,1273 +48,2541 @@ protected override void Dispose(bool disposing)
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
+
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
+
this.pnlHeader = new System.Windows.Forms.Panel();
+
this.picMenu = new System.Windows.Forms.PictureBox();
+
this.panel4 = new System.Windows.Forms.Panel();
+
this.picMinimize = new System.Windows.Forms.PictureBox();
+
this.panel2 = new System.Windows.Forms.Panel();
+
this.picExit = new System.Windows.Forms.PictureBox();
+
this.picHeader = new System.Windows.Forms.PictureBox();
+
this.panel3 = new System.Windows.Forms.Panel();
+
this.pnlBase = new System.Windows.Forms.Panel();
+
this.pnlButton = new System.Windows.Forms.Panel();
+
this.btnStart = new NETReactorSlayer.GUI.UserControls.NrsButton();
+
this.pnlSeparator = new System.Windows.Forms.Panel();
+
this.panelLogs = new System.Windows.Forms.Panel();
+
this.scrollbarLogs = new NETReactorSlayer.GUI.UserControls.NrsScrollBar();
+
this.txtLogs = new System.Windows.Forms.RichTextBox();
+
this.ctxLogs = new System.Windows.Forms.ContextMenuStrip(this.components);
+
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
+
this.copyLogsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+
this.pnlInput = new System.Windows.Forms.Panel();
+
this.picBrowse = new System.Windows.Forms.PictureBox();
+
this.pnlTextBox = new System.Windows.Forms.Panel();
+
this.txtInput = new NETReactorSlayer.GUI.UserControls.NrsTextBox();
+
this.pnlOptions = new System.Windows.Forms.Panel();
+
this.tabelOptions = new System.Windows.Forms.TableLayoutPanel();
+
this.chkDumpCosturaAsm = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkDecryptStrings = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkPatchAntiTD = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkDecryptBools = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkDumpDNRAsm = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkDecryptHiddenCalls = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkDeobCFlow = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkDecryptTokens = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkDecryptResources = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkRemoveRefProxies = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkDecryptMethods = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkSelectUnSelectAll = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkRemSn = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkRename = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.ctxRename = new System.Windows.Forms.ContextMenuStrip(this.components);
+
this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem9 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem14 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem12 = new System.Windows.Forms.ToolStripMenuItem();
+
this.chkRenameShort = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkRemJunks = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkKeepTypes = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkRemCalls = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkPreserveAll = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.chkKeepOldMaxStack = new NETReactorSlayer.GUI.UserControls.NrsCheckBox();
+
this.panel1 = new System.Windows.Forms.Panel();
+
this.llblGitHub = new System.Windows.Forms.LinkLabel();
+
this.label2 = new System.Windows.Forms.Label();
+
this.label5 = new System.Windows.Forms.Label();
+
this.lblVersion = new System.Windows.Forms.Label();
+
this.llblWebsite = new System.Windows.Forms.LinkLabel();
+
this.label4 = new System.Windows.Forms.Label();
+
this.lblAuthor = new System.Windows.Forms.Label();
+
this.label1 = new System.Windows.Forms.Label();
+
this.ctxMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
+
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();
+
this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();
+
this.pnlHeader.SuspendLayout();
+
((System.ComponentModel.ISupportInitialize)(this.picMenu)).BeginInit();
+
((System.ComponentModel.ISupportInitialize)(this.picMinimize)).BeginInit();
+
((System.ComponentModel.ISupportInitialize)(this.picExit)).BeginInit();
+
((System.ComponentModel.ISupportInitialize)(this.picHeader)).BeginInit();
+
this.pnlBase.SuspendLayout();
+
this.pnlButton.SuspendLayout();
+
this.panelLogs.SuspendLayout();
+
this.ctxLogs.SuspendLayout();
+
this.pnlInput.SuspendLayout();
+
((System.ComponentModel.ISupportInitialize)(this.picBrowse)).BeginInit();
+
this.pnlTextBox.SuspendLayout();
+
this.pnlOptions.SuspendLayout();
+
this.tabelOptions.SuspendLayout();
+
this.ctxRename.SuspendLayout();
+
this.panel1.SuspendLayout();
+
this.ctxMenu.SuspendLayout();
+
this.SuspendLayout();
+
//
+
// pnlHeader
+
//
+
this.pnlHeader.AutoSize = true;
+
this.pnlHeader.Controls.Add(this.picMenu);
+
this.pnlHeader.Controls.Add(this.panel4);
+
this.pnlHeader.Controls.Add(this.picMinimize);
+
this.pnlHeader.Controls.Add(this.panel2);
+
this.pnlHeader.Controls.Add(this.picExit);
+
this.pnlHeader.Controls.Add(this.picHeader);
+
this.pnlHeader.Controls.Add(this.panel3);
+
this.pnlHeader.Dock = System.Windows.Forms.DockStyle.Top;
+
this.pnlHeader.Location = new System.Drawing.Point(30, 5);
+
this.pnlHeader.MinimumSize = new System.Drawing.Size(0, 60);
+
this.pnlHeader.Name = "pnlHeader";
- this.pnlHeader.Size = new System.Drawing.Size(997, 60);
+
+ this.pnlHeader.Size = new System.Drawing.Size(952, 60);
+
this.pnlHeader.TabIndex = 2;
+
//
+
// picMenu
+
//
+
this.picMenu.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.picMenu.Dock = System.Windows.Forms.DockStyle.Left;
+
this.picMenu.Image = global::NETReactorSlayer.GUI.Properties.Resources.Menu;
+
this.picMenu.Location = new System.Drawing.Point(10, 0);
+
this.picMenu.Name = "picMenu";
+
this.picMenu.Size = new System.Drawing.Size(24, 60);
+
this.picMenu.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+
this.picMenu.TabIndex = 18;
+
this.picMenu.TabStop = false;
+
this.picMenu.MouseClick += new System.Windows.Forms.MouseEventHandler(this.picMenu_MouseClick);
+
this.picMenu.MouseEnter += new System.EventHandler(this.picMenu_MouseEnter);
+
this.picMenu.MouseLeave += new System.EventHandler(this.picMenu_MouseLeave);
+
//
+
// panel4
+
//
+
this.panel4.Dock = System.Windows.Forms.DockStyle.Left;
+
this.panel4.Location = new System.Drawing.Point(0, 0);
+
this.panel4.Name = "panel4";
+
this.panel4.Size = new System.Drawing.Size(10, 60);
+
this.panel4.TabIndex = 19;
+
//
+
// picMinimize
+
//
+
this.picMinimize.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.picMinimize.Dock = System.Windows.Forms.DockStyle.Right;
+
this.picMinimize.Image = global::NETReactorSlayer.GUI.Properties.Resources.Minimize;
- this.picMinimize.Location = new System.Drawing.Point(929, 0);
+
+ this.picMinimize.Location = new System.Drawing.Point(884, 0);
+
this.picMinimize.Name = "picMinimize";
+
this.picMinimize.Size = new System.Drawing.Size(24, 60);
+
this.picMinimize.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+
this.picMinimize.TabIndex = 3;
+
this.picMinimize.TabStop = false;
+
this.picMinimize.Click += new System.EventHandler(this.picMinimize_Click);
+
this.picMinimize.MouseEnter += new System.EventHandler(this.picMinimize_MouseEnter);
+
this.picMinimize.MouseLeave += new System.EventHandler(this.picMinimize_MouseLeave);
+
//
+
// panel2
+
//
+
this.panel2.Dock = System.Windows.Forms.DockStyle.Right;
- this.panel2.Location = new System.Drawing.Point(953, 0);
+
+ this.panel2.Location = new System.Drawing.Point(908, 0);
+
this.panel2.Name = "panel2";
+
this.panel2.Size = new System.Drawing.Size(10, 60);
+
this.panel2.TabIndex = 16;
+
//
+
// picExit
+
//
+
this.picExit.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.picExit.Dock = System.Windows.Forms.DockStyle.Right;
+
this.picExit.Image = global::NETReactorSlayer.GUI.Properties.Resources.Close;
- this.picExit.Location = new System.Drawing.Point(963, 0);
+
+ this.picExit.Location = new System.Drawing.Point(918, 0);
+
this.picExit.Name = "picExit";
+
this.picExit.Size = new System.Drawing.Size(24, 60);
+
this.picExit.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+
this.picExit.TabIndex = 2;
+
this.picExit.TabStop = false;
+
this.picExit.Click += new System.EventHandler(this.picExit_Click);
+
this.picExit.MouseEnter += new System.EventHandler(this.picExit_MouseEnter);
+
this.picExit.MouseLeave += new System.EventHandler(this.picExit_MouseLeave);
+
//
+
// picHeader
+
//
+
this.picHeader.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.picHeader.Image = global::NETReactorSlayer.GUI.Properties.Resources.Header;
+
this.picHeader.Location = new System.Drawing.Point(0, 0);
+
this.picHeader.Name = "picHeader";
- this.picHeader.Size = new System.Drawing.Size(987, 60);
+
+ this.picHeader.Size = new System.Drawing.Size(942, 60);
+
this.picHeader.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+
this.picHeader.TabIndex = 1;
+
this.picHeader.TabStop = false;
+
this.picHeader.MouseDown += new System.Windows.Forms.MouseEventHandler(this.OnMouseDown);
+
this.picHeader.MouseMove += new System.Windows.Forms.MouseEventHandler(this.OnMouseMove);
+
this.picHeader.MouseUp += new System.Windows.Forms.MouseEventHandler(this.OnMouseUp);
+
//
+
// panel3
+
//
+
this.panel3.Dock = System.Windows.Forms.DockStyle.Right;
- this.panel3.Location = new System.Drawing.Point(987, 0);
+
+ this.panel3.Location = new System.Drawing.Point(942, 0);
+
this.panel3.Name = "panel3";
+
this.panel3.Size = new System.Drawing.Size(10, 60);
+
this.panel3.TabIndex = 17;
+
//
+
// pnlBase
+
//
+
this.pnlBase.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(23)))), ((int)(((byte)(23)))), ((int)(((byte)(23)))));
+
this.pnlBase.Controls.Add(this.pnlButton);
+
this.pnlBase.Controls.Add(this.pnlSeparator);
+
this.pnlBase.Controls.Add(this.panelLogs);
+
this.pnlBase.Controls.Add(this.pnlInput);
+
this.pnlBase.Controls.Add(this.pnlOptions);
+
this.pnlBase.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.pnlBase.Location = new System.Drawing.Point(30, 65);
+
this.pnlBase.Name = "pnlBase";
+
this.pnlBase.Padding = new System.Windows.Forms.Padding(30);
- this.pnlBase.Size = new System.Drawing.Size(997, 526);
+
+ this.pnlBase.Size = new System.Drawing.Size(952, 526);
+
this.pnlBase.TabIndex = 3;
+
//
+
// pnlButton
+
//
+
this.pnlButton.Controls.Add(this.btnStart);
+
this.pnlButton.Dock = System.Windows.Forms.DockStyle.Top;
+
this.pnlButton.Location = new System.Drawing.Point(30, 450);
+
this.pnlButton.Name = "pnlButton";
+
this.pnlButton.Padding = new System.Windows.Forms.Padding(200, 5, 200, 5);
- this.pnlButton.Size = new System.Drawing.Size(937, 55);
+
+ this.pnlButton.Size = new System.Drawing.Size(892, 55);
+
this.pnlButton.TabIndex = 16;
+
//
+
// btnStart
+
//
+
this.btnStart.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(27)))), ((int)(((byte)(27)))));
+
this.btnStart.BorderRadius = 25;
+
this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.btnStart.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.btnStart.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32)))));
+
this.btnStart.FlatAppearance.BorderSize = 0;
+
this.btnStart.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18)))));
+
this.btnStart.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(34)))), ((int)(((byte)(34)))), ((int)(((byte)(34)))));
+
this.btnStart.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+
this.btnStart.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.btnStart.ForeColor = System.Drawing.Color.Silver;
+
this.btnStart.Location = new System.Drawing.Point(200, 5);
+
this.btnStart.Name = "btnStart";
- this.btnStart.Size = new System.Drawing.Size(537, 45);
+
+ this.btnStart.Size = new System.Drawing.Size(492, 45);
+
this.btnStart.TabIndex = 15;
+
this.btnStart.Text = "Start Deobfuscation";
+
this.btnStart.TextTransform = NETReactorSlayer.GUI.UserControls.NrsButton.TextTransformEnum.None;
+
this.btnStart.UseVisualStyleBackColor = false;
+
this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+
//
+
// pnlSeparator
+
//
+
this.pnlSeparator.Dock = System.Windows.Forms.DockStyle.Top;
+
this.pnlSeparator.Location = new System.Drawing.Point(30, 440);
+
this.pnlSeparator.Name = "pnlSeparator";
- this.pnlSeparator.Size = new System.Drawing.Size(937, 10);
+
+ this.pnlSeparator.Size = new System.Drawing.Size(892, 10);
+
this.pnlSeparator.TabIndex = 15;
+
//
+
// panelLogs
+
//
+
this.panelLogs.Controls.Add(this.scrollbarLogs);
+
this.panelLogs.Controls.Add(this.txtLogs);
+
this.panelLogs.Dock = System.Windows.Forms.DockStyle.Top;
+
this.panelLogs.Location = new System.Drawing.Point(30, 259);
+
this.panelLogs.Name = "panelLogs";
+
this.panelLogs.Padding = new System.Windows.Forms.Padding(2);
- this.panelLogs.Size = new System.Drawing.Size(937, 181);
+
+ this.panelLogs.Size = new System.Drawing.Size(892, 181);
+
this.panelLogs.TabIndex = 0;
+
//
+
// scrollbarLogs
+
//
+
this.scrollbarLogs.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(27)))), ((int)(((byte)(27)))));
+
this.scrollbarLogs.Dock = System.Windows.Forms.DockStyle.Right;
- this.scrollbarLogs.Location = new System.Drawing.Point(920, 2);
+
+ this.scrollbarLogs.Location = new System.Drawing.Point(875, 2);
+
this.scrollbarLogs.Maximum = 10;
+
this.scrollbarLogs.Name = "scrollbarLogs";
+
this.scrollbarLogs.Size = new System.Drawing.Size(15, 177);
+
this.scrollbarLogs.TabIndex = 17;
+
this.scrollbarLogs.Text = "nrsScrollBar1";
+
this.scrollbarLogs.ViewSize = 9;
+
this.scrollbarLogs.ValueChanged += new System.EventHandler(this.scrollbarLogs_ValueChanged);
+
//
+
// txtLogs
+
//
+
this.txtLogs.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(27)))), ((int)(((byte)(27)))));
+
this.txtLogs.BorderStyle = System.Windows.Forms.BorderStyle.None;
+
this.txtLogs.ContextMenuStrip = this.ctxLogs;
+
this.txtLogs.Cursor = System.Windows.Forms.Cursors.IBeam;
+
this.txtLogs.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.txtLogs.ForeColor = System.Drawing.Color.Silver;
+
this.txtLogs.Location = new System.Drawing.Point(2, 2);
+
this.txtLogs.Name = "txtLogs";
+
this.txtLogs.ReadOnly = true;
+
this.txtLogs.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
- this.txtLogs.Size = new System.Drawing.Size(933, 177);
+
+ this.txtLogs.Size = new System.Drawing.Size(888, 177);
+
this.txtLogs.TabIndex = 0;
+
this.txtLogs.TabStop = false;
+
this.txtLogs.Text = "\n Logs will appear here...";
+
this.txtLogs.TextChanged += new System.EventHandler(this.txtLogs_TextChanged);
+
//
+
// ctxLogs
+
//
+
this.ctxLogs.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(23)))), ((int)(((byte)(23)))), ((int)(((byte)(23)))));
+
this.ctxLogs.ImageScalingSize = new System.Drawing.Size(20, 20);
+
this.ctxLogs.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+
this.toolStripMenuItem2,
+
this.copyLogsToolStripMenuItem,
+
this.toolStripMenuItem1});
+
this.ctxLogs.Name = "ctxLogs";
+
this.ctxLogs.ShowImageMargin = false;
- this.ctxLogs.Size = new System.Drawing.Size(124, 38);
+
+ this.ctxLogs.Size = new System.Drawing.Size(110, 36);
+
//
+
// toolStripMenuItem2
+
//
+
this.toolStripMenuItem2.AutoSize = false;
+
this.toolStripMenuItem2.Enabled = false;
+
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
+
this.toolStripMenuItem2.Size = new System.Drawing.Size(185, 5);
+
this.toolStripMenuItem2.Text = " ";
+
//
+
// copyLogsToolStripMenuItem
+
//
+
this.copyLogsToolStripMenuItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.copyLogsToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.copyLogsToolStripMenuItem.ForeColor = System.Drawing.Color.Silver;
+
this.copyLogsToolStripMenuItem.Name = "copyLogsToolStripMenuItem";
- this.copyLogsToolStripMenuItem.Size = new System.Drawing.Size(123, 24);
+
+ this.copyLogsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);
+
this.copyLogsToolStripMenuItem.Text = " Copy Logs";
+
this.copyLogsToolStripMenuItem.Click += new System.EventHandler(this.copyLogsToolStripMenuItem_Click);
+
//
+
// toolStripMenuItem1
+
//
+
this.toolStripMenuItem1.AutoSize = false;
+
this.toolStripMenuItem1.Enabled = false;
+
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+
this.toolStripMenuItem1.Size = new System.Drawing.Size(185, 5);
+
this.toolStripMenuItem1.Text = " ";
+
//
+
// pnlInput
+
//
+
this.pnlInput.Controls.Add(this.picBrowse);
+
this.pnlInput.Controls.Add(this.pnlTextBox);
+
this.pnlInput.Dock = System.Windows.Forms.DockStyle.Top;
+
this.pnlInput.Location = new System.Drawing.Point(30, 212);
+
this.pnlInput.Name = "pnlInput";
+
this.pnlInput.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
- this.pnlInput.Size = new System.Drawing.Size(937, 47);
+
+ this.pnlInput.Size = new System.Drawing.Size(892, 47);
+
this.pnlInput.TabIndex = 12;
+
//
+
// picBrowse
+
//
+
this.picBrowse.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(27)))), ((int)(((byte)(27)))));
+
this.picBrowse.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.picBrowse.Dock = System.Windows.Forms.DockStyle.Right;
+
this.picBrowse.Image = global::NETReactorSlayer.GUI.Properties.Resources.Browse;
- this.picBrowse.Location = new System.Drawing.Point(886, 10);
+
+ this.picBrowse.Location = new System.Drawing.Point(841, 10);
+
this.picBrowse.Name = "picBrowse";
+
this.picBrowse.Size = new System.Drawing.Size(51, 27);
+
this.picBrowse.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+
this.picBrowse.TabIndex = 4;
+
this.picBrowse.TabStop = false;
+
this.picBrowse.Click += new System.EventHandler(this.picBrowse_Click);
+
//
+
// pnlTextBox
+
//
+
this.pnlTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(27)))), ((int)(((byte)(27)))));
+
this.pnlTextBox.Controls.Add(this.txtInput);
+
this.pnlTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.pnlTextBox.Location = new System.Drawing.Point(0, 10);
+
this.pnlTextBox.Name = "pnlTextBox";
+
this.pnlTextBox.Padding = new System.Windows.Forms.Padding(0, 6, 0, 0);
- this.pnlTextBox.Size = new System.Drawing.Size(937, 27);
+
+ this.pnlTextBox.Size = new System.Drawing.Size(892, 27);
+
this.pnlTextBox.TabIndex = 1;
+
//
+
// txtInput
+
//
+
this.txtInput.AllowDrop = true;
+
this.txtInput.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(27)))), ((int)(((byte)(27)))));
+
this.txtInput.BorderRadius = 0;
+
this.txtInput.BorderStyle = System.Windows.Forms.BorderStyle.None;
+
this.txtInput.Cursor = System.Windows.Forms.Cursors.IBeam;
+
this.txtInput.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.txtInput.Font = new System.Drawing.Font("Segoe UI Semibold", 7.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.txtInput.ForeColor = System.Drawing.Color.Silver;
+
this.txtInput.Location = new System.Drawing.Point(0, 6);
+
this.txtInput.Name = "txtInput";
+
this.txtInput.PlaceHolderColor = System.Drawing.Color.Gray;
+
this.txtInput.PlaceHolderText = "DRAG & DROP TARGET FILE HERE OR ENTER FILE PATH";
+
this.txtInput.Progress = 22F;
+
this.txtInput.ProgressColor = System.Drawing.Color.MediumSeaGreen;
- this.txtInput.Size = new System.Drawing.Size(937, 21);
+
+ this.txtInput.Size = new System.Drawing.Size(892, 21);
+
this.txtInput.TabIndex = 2;
+
this.txtInput.Tag = "";
+
this.txtInput.Text = "DRAG & DROP TARGET FILE HERE OR ENTER FILE PATH";
+
this.txtInput.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+
this.txtInput.TextTransform = NETReactorSlayer.GUI.UserControls.NrsTextBox.TextTransformEnum.None;
+
this.txtInput.WordWrap = false;
+
this.txtInput.DragDrop += new System.Windows.Forms.DragEventHandler(this.txtInput_DragDrop);
+
this.txtInput.DragEnter += new System.Windows.Forms.DragEventHandler(this.txtInput_DragEnter);
+
//
+
// pnlOptions
+
//
+
this.pnlOptions.Controls.Add(this.tabelOptions);
+
this.pnlOptions.Dock = System.Windows.Forms.DockStyle.Top;
+
this.pnlOptions.Location = new System.Drawing.Point(30, 30);
+
this.pnlOptions.Name = "pnlOptions";
+
this.pnlOptions.Padding = new System.Windows.Forms.Padding(3, 0, 0, 3);
- this.pnlOptions.Size = new System.Drawing.Size(937, 182);
+
+ this.pnlOptions.Size = new System.Drawing.Size(892, 182);
+
this.pnlOptions.TabIndex = 11;
+
//
+
// tabelOptions
+
//
+
this.tabelOptions.ColumnCount = 3;
+
this.tabelOptions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33332F));
+
this.tabelOptions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F));
+
this.tabelOptions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F));
+
this.tabelOptions.Controls.Add(this.chkDumpCosturaAsm, 2, 3);
+
this.tabelOptions.Controls.Add(this.chkDecryptStrings, 2, 2);
+
this.tabelOptions.Controls.Add(this.chkPatchAntiTD, 2, 1);
+
this.tabelOptions.Controls.Add(this.chkDecryptBools, 1, 4);
+
this.tabelOptions.Controls.Add(this.chkDumpDNRAsm, 1, 3);
+
this.tabelOptions.Controls.Add(this.chkDecryptHiddenCalls, 1, 2);
+
this.tabelOptions.Controls.Add(this.chkDeobCFlow, 1, 1);
+
this.tabelOptions.Controls.Add(this.chkDecryptTokens, 0, 4);
+
this.tabelOptions.Controls.Add(this.chkDecryptResources, 0, 3);
+
this.tabelOptions.Controls.Add(this.chkRemoveRefProxies, 0, 2);
+
this.tabelOptions.Controls.Add(this.chkDecryptMethods, 0, 1);
+
this.tabelOptions.Controls.Add(this.chkSelectUnSelectAll, 0, 0);
+
this.tabelOptions.Controls.Add(this.chkRemSn, 2, 4);
+
this.tabelOptions.Controls.Add(this.chkRename, 0, 5);
+
this.tabelOptions.Controls.Add(this.chkRenameShort, 1, 5);
+
this.tabelOptions.Controls.Add(this.chkRemJunks, 0, 6);
+
this.tabelOptions.Controls.Add(this.chkKeepTypes, 2, 5);
+
this.tabelOptions.Controls.Add(this.chkRemCalls, 1, 6);
+
this.tabelOptions.Controls.Add(this.chkPreserveAll, 2, 6);
+
this.tabelOptions.Controls.Add(this.chkKeepOldMaxStack, 0, 7);
+
this.tabelOptions.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.tabelOptions.Location = new System.Drawing.Point(3, 0);
+
this.tabelOptions.Name = "tabelOptions";
+
this.tabelOptions.RowCount = 8;
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F));
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F));
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F));
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F));
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F));
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F));
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F));
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+
this.tabelOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
- this.tabelOptions.Size = new System.Drawing.Size(934, 179);
+
+ this.tabelOptions.Size = new System.Drawing.Size(889, 179);
+
this.tabelOptions.TabIndex = 3;
+
//
+
// chkDumpCosturaAsm
+
//
+
this.chkDumpCosturaAsm.AutoSize = true;
+
this.chkDumpCosturaAsm.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDumpCosturaAsm.Checked = true;
+
this.chkDumpCosturaAsm.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDumpCosturaAsm.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDumpCosturaAsm.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDumpCosturaAsm.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDumpCosturaAsm.ForeColor = System.Drawing.Color.Silver;
+
this.chkDumpCosturaAsm.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDumpCosturaAsm.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDumpCosturaAsm.HoverForeColor = System.Drawing.Color.White;
- this.chkDumpCosturaAsm.Location = new System.Drawing.Point(625, 69);
+
+ this.chkDumpCosturaAsm.Location = new System.Drawing.Point(595, 69);
+
this.chkDumpCosturaAsm.Name = "chkDumpCosturaAsm";
+
this.chkDumpCosturaAsm.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDumpCosturaAsm.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDumpCosturaAsm.PressForeColor = System.Drawing.Color.Gray;
- this.chkDumpCosturaAsm.Size = new System.Drawing.Size(306, 16);
+
+ this.chkDumpCosturaAsm.Size = new System.Drawing.Size(291, 16);
+
this.chkDumpCosturaAsm.TabIndex = 9;
+
this.chkDumpCosturaAsm.Tag = "--dump-costura";
+
this.chkDumpCosturaAsm.Text = "Dump Costura-Fody Assemblies";
+
this.chkDumpCosturaAsm.UseVisualStyleBackColor = true;
+
this.chkDumpCosturaAsm.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkDecryptStrings
+
//
+
this.chkDecryptStrings.AutoSize = true;
+
this.chkDecryptStrings.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDecryptStrings.Checked = true;
+
this.chkDecryptStrings.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDecryptStrings.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDecryptStrings.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDecryptStrings.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptStrings.ForeColor = System.Drawing.Color.Silver;
+
this.chkDecryptStrings.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptStrings.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptStrings.HoverForeColor = System.Drawing.Color.White;
- this.chkDecryptStrings.Location = new System.Drawing.Point(625, 47);
+
+ this.chkDecryptStrings.Location = new System.Drawing.Point(595, 47);
+
this.chkDecryptStrings.Name = "chkDecryptStrings";
+
this.chkDecryptStrings.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptStrings.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptStrings.PressForeColor = System.Drawing.Color.Gray;
- this.chkDecryptStrings.Size = new System.Drawing.Size(306, 16);
+
+ this.chkDecryptStrings.Size = new System.Drawing.Size(291, 16);
+
this.chkDecryptStrings.TabIndex = 13;
+
this.chkDecryptStrings.Tag = "--dec-strings";
+
this.chkDecryptStrings.Text = "Decrypt Strings";
+
this.chkDecryptStrings.UseVisualStyleBackColor = true;
+
this.chkDecryptStrings.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkPatchAntiTD
+
//
+
this.chkPatchAntiTD.AutoSize = true;
+
this.chkPatchAntiTD.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkPatchAntiTD.Checked = true;
+
this.chkPatchAntiTD.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkPatchAntiTD.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkPatchAntiTD.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkPatchAntiTD.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkPatchAntiTD.ForeColor = System.Drawing.Color.Silver;
+
this.chkPatchAntiTD.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkPatchAntiTD.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkPatchAntiTD.HoverForeColor = System.Drawing.Color.White;
- this.chkPatchAntiTD.Location = new System.Drawing.Point(625, 25);
+
+ this.chkPatchAntiTD.Location = new System.Drawing.Point(595, 25);
+
this.chkPatchAntiTD.Name = "chkPatchAntiTD";
+
this.chkPatchAntiTD.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkPatchAntiTD.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkPatchAntiTD.PressForeColor = System.Drawing.Color.Gray;
- this.chkPatchAntiTD.Size = new System.Drawing.Size(306, 16);
+
+ this.chkPatchAntiTD.Size = new System.Drawing.Size(291, 16);
+
this.chkPatchAntiTD.TabIndex = 11;
+
this.chkPatchAntiTD.Tag = "--rem-antis";
+
this.chkPatchAntiTD.Text = "Remove Anti Tamper & Anti Debugger";
+
this.chkPatchAntiTD.UseVisualStyleBackColor = true;
+
this.chkPatchAntiTD.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkDecryptBools
+
//
+
this.chkDecryptBools.AutoSize = true;
+
this.chkDecryptBools.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDecryptBools.Checked = true;
+
this.chkDecryptBools.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDecryptBools.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDecryptBools.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDecryptBools.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptBools.ForeColor = System.Drawing.Color.Silver;
+
this.chkDecryptBools.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptBools.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptBools.HoverForeColor = System.Drawing.Color.White;
- this.chkDecryptBools.Location = new System.Drawing.Point(314, 91);
+
+ this.chkDecryptBools.Location = new System.Drawing.Point(299, 91);
+
this.chkDecryptBools.Name = "chkDecryptBools";
+
this.chkDecryptBools.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptBools.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptBools.PressForeColor = System.Drawing.Color.Gray;
- this.chkDecryptBools.Size = new System.Drawing.Size(305, 16);
+
+ this.chkDecryptBools.Size = new System.Drawing.Size(290, 16);
+
this.chkDecryptBools.TabIndex = 16;
+
this.chkDecryptBools.Tag = "--dec-bools";
+
this.chkDecryptBools.Text = "Decrypt Booleans";
+
this.chkDecryptBools.UseVisualStyleBackColor = true;
+
this.chkDecryptBools.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkDumpDNRAsm
+
//
+
this.chkDumpDNRAsm.AutoSize = true;
+
this.chkDumpDNRAsm.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDumpDNRAsm.Checked = true;
+
this.chkDumpDNRAsm.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDumpDNRAsm.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDumpDNRAsm.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDumpDNRAsm.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDumpDNRAsm.ForeColor = System.Drawing.Color.Silver;
+
this.chkDumpDNRAsm.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDumpDNRAsm.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDumpDNRAsm.HoverForeColor = System.Drawing.Color.White;
- this.chkDumpDNRAsm.Location = new System.Drawing.Point(314, 69);
+
+ this.chkDumpDNRAsm.Location = new System.Drawing.Point(299, 69);
+
this.chkDumpDNRAsm.Name = "chkDumpDNRAsm";
+
this.chkDumpDNRAsm.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDumpDNRAsm.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDumpDNRAsm.PressForeColor = System.Drawing.Color.Gray;
- this.chkDumpDNRAsm.Size = new System.Drawing.Size(305, 16);
+
+ this.chkDumpDNRAsm.Size = new System.Drawing.Size(290, 16);
+
this.chkDumpDNRAsm.TabIndex = 10;
+
this.chkDumpDNRAsm.Tag = "--dump-asm";
+
this.chkDumpDNRAsm.Text = "Dump Embedded Assemblies";
+
this.chkDumpDNRAsm.UseVisualStyleBackColor = true;
+
this.chkDumpDNRAsm.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkDecryptHiddenCalls
+
//
+
this.chkDecryptHiddenCalls.AutoSize = true;
+
this.chkDecryptHiddenCalls.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDecryptHiddenCalls.Checked = true;
+
this.chkDecryptHiddenCalls.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDecryptHiddenCalls.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDecryptHiddenCalls.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDecryptHiddenCalls.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptHiddenCalls.ForeColor = System.Drawing.Color.Silver;
+
this.chkDecryptHiddenCalls.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptHiddenCalls.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptHiddenCalls.HoverForeColor = System.Drawing.Color.White;
- this.chkDecryptHiddenCalls.Location = new System.Drawing.Point(314, 47);
+
+ this.chkDecryptHiddenCalls.Location = new System.Drawing.Point(299, 47);
+
this.chkDecryptHiddenCalls.Name = "chkDecryptHiddenCalls";
+
this.chkDecryptHiddenCalls.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptHiddenCalls.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptHiddenCalls.PressForeColor = System.Drawing.Color.Gray;
- this.chkDecryptHiddenCalls.Size = new System.Drawing.Size(305, 16);
+
+ this.chkDecryptHiddenCalls.Size = new System.Drawing.Size(290, 16);
+
this.chkDecryptHiddenCalls.TabIndex = 12;
+
this.chkDecryptHiddenCalls.Tag = "--fix-proxy";
+
this.chkDecryptHiddenCalls.Text = "Fix proxied calls";
+
this.chkDecryptHiddenCalls.UseVisualStyleBackColor = true;
+
this.chkDecryptHiddenCalls.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkDeobCFlow
+
//
+
this.chkDeobCFlow.AutoSize = true;
+
this.chkDeobCFlow.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDeobCFlow.Checked = true;
+
this.chkDeobCFlow.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDeobCFlow.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDeobCFlow.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDeobCFlow.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDeobCFlow.ForeColor = System.Drawing.Color.Silver;
+
this.chkDeobCFlow.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDeobCFlow.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDeobCFlow.HoverForeColor = System.Drawing.Color.White;
- this.chkDeobCFlow.Location = new System.Drawing.Point(314, 25);
+
+ this.chkDeobCFlow.Location = new System.Drawing.Point(299, 25);
+
this.chkDeobCFlow.Name = "chkDeobCFlow";
+
this.chkDeobCFlow.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDeobCFlow.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDeobCFlow.PressForeColor = System.Drawing.Color.Gray;
- this.chkDeobCFlow.Size = new System.Drawing.Size(305, 16);
+
+ this.chkDeobCFlow.Size = new System.Drawing.Size(290, 16);
+
this.chkDeobCFlow.TabIndex = 4;
+
this.chkDeobCFlow.Tag = "--deob-cflow";
+
this.chkDeobCFlow.Text = "Deobfuscate Control Flow";
+
this.chkDeobCFlow.UseVisualStyleBackColor = true;
+
this.chkDeobCFlow.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkDecryptTokens
+
//
+
this.chkDecryptTokens.AutoSize = true;
+
this.chkDecryptTokens.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDecryptTokens.Checked = true;
+
this.chkDecryptTokens.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDecryptTokens.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDecryptTokens.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDecryptTokens.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptTokens.ForeColor = System.Drawing.Color.Silver;
+
this.chkDecryptTokens.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptTokens.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptTokens.HoverForeColor = System.Drawing.Color.White;
+
this.chkDecryptTokens.Location = new System.Drawing.Point(3, 91);
+
this.chkDecryptTokens.Name = "chkDecryptTokens";
+
this.chkDecryptTokens.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptTokens.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptTokens.PressForeColor = System.Drawing.Color.Gray;
- this.chkDecryptTokens.Size = new System.Drawing.Size(305, 16);
+
+ this.chkDecryptTokens.Size = new System.Drawing.Size(290, 16);
+
this.chkDecryptTokens.TabIndex = 8;
+
this.chkDecryptTokens.Tag = "--deob-tokens";
+
this.chkDecryptTokens.Text = "Deobfuscate Tokens";
+
this.chkDecryptTokens.UseVisualStyleBackColor = true;
+
this.chkDecryptTokens.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkDecryptResources
+
//
+
this.chkDecryptResources.AutoSize = true;
+
this.chkDecryptResources.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDecryptResources.Checked = true;
+
this.chkDecryptResources.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDecryptResources.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDecryptResources.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDecryptResources.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptResources.ForeColor = System.Drawing.Color.Silver;
+
this.chkDecryptResources.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptResources.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptResources.HoverForeColor = System.Drawing.Color.White;
+
this.chkDecryptResources.Location = new System.Drawing.Point(3, 69);
+
this.chkDecryptResources.Name = "chkDecryptResources";
+
this.chkDecryptResources.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptResources.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptResources.PressForeColor = System.Drawing.Color.Gray;
- this.chkDecryptResources.Size = new System.Drawing.Size(305, 16);
+
+ this.chkDecryptResources.Size = new System.Drawing.Size(290, 16);
+
this.chkDecryptResources.TabIndex = 6;
+
this.chkDecryptResources.Tag = "--dec-rsrc";
+
this.chkDecryptResources.Text = "Decrypt Resources";
+
this.chkDecryptResources.UseVisualStyleBackColor = true;
+
this.chkDecryptResources.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkRemoveRefProxies
+
//
+
this.chkRemoveRefProxies.AutoSize = true;
+
this.chkRemoveRefProxies.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkRemoveRefProxies.Checked = true;
+
this.chkRemoveRefProxies.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkRemoveRefProxies.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkRemoveRefProxies.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkRemoveRefProxies.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemoveRefProxies.ForeColor = System.Drawing.Color.Silver;
+
this.chkRemoveRefProxies.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemoveRefProxies.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRemoveRefProxies.HoverForeColor = System.Drawing.Color.White;
+
this.chkRemoveRefProxies.Location = new System.Drawing.Point(3, 47);
+
this.chkRemoveRefProxies.Name = "chkRemoveRefProxies";
+
this.chkRemoveRefProxies.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemoveRefProxies.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRemoveRefProxies.PressForeColor = System.Drawing.Color.Gray;
- this.chkRemoveRefProxies.Size = new System.Drawing.Size(305, 16);
+
+ this.chkRemoveRefProxies.Size = new System.Drawing.Size(290, 16);
+
this.chkRemoveRefProxies.TabIndex = 5;
+
this.chkRemoveRefProxies.Tag = "--inline-methods";
+
this.chkRemoveRefProxies.Text = "Inline Short Methods";
+
this.chkRemoveRefProxies.UseVisualStyleBackColor = true;
+
this.chkRemoveRefProxies.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkDecryptMethods
+
//
+
this.chkDecryptMethods.AutoSize = true;
+
this.chkDecryptMethods.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkDecryptMethods.Checked = true;
+
this.chkDecryptMethods.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkDecryptMethods.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkDecryptMethods.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkDecryptMethods.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptMethods.ForeColor = System.Drawing.Color.Silver;
+
this.chkDecryptMethods.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptMethods.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptMethods.HoverForeColor = System.Drawing.Color.White;
+
this.chkDecryptMethods.Location = new System.Drawing.Point(3, 25);
+
this.chkDecryptMethods.Name = "chkDecryptMethods";
+
this.chkDecryptMethods.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkDecryptMethods.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkDecryptMethods.PressForeColor = System.Drawing.Color.Gray;
- this.chkDecryptMethods.Size = new System.Drawing.Size(305, 16);
+
+ this.chkDecryptMethods.Size = new System.Drawing.Size(290, 16);
+
this.chkDecryptMethods.TabIndex = 7;
+
this.chkDecryptMethods.Tag = "--dec-methods";
+
this.chkDecryptMethods.Text = "Decrypt Methods Body";
+
this.chkDecryptMethods.UseVisualStyleBackColor = true;
+
this.chkDecryptMethods.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkSelectUnSelectAll
+
//
+
this.chkSelectUnSelectAll.AutoSize = true;
+
this.chkSelectUnSelectAll.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkSelectUnSelectAll.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkSelectUnSelectAll.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkSelectUnSelectAll.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkSelectUnSelectAll.ForeColor = System.Drawing.Color.Silver;
+
this.chkSelectUnSelectAll.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkSelectUnSelectAll.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkSelectUnSelectAll.HoverForeColor = System.Drawing.Color.White;
+
this.chkSelectUnSelectAll.Location = new System.Drawing.Point(3, 3);
+
this.chkSelectUnSelectAll.Name = "chkSelectUnSelectAll";
+
this.chkSelectUnSelectAll.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkSelectUnSelectAll.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkSelectUnSelectAll.PressForeColor = System.Drawing.Color.Gray;
- this.chkSelectUnSelectAll.Size = new System.Drawing.Size(305, 16);
+
+ this.chkSelectUnSelectAll.Size = new System.Drawing.Size(290, 16);
+
this.chkSelectUnSelectAll.TabIndex = 17;
+
this.chkSelectUnSelectAll.Tag = "";
+
this.chkSelectUnSelectAll.Text = "Select All";
+
this.chkSelectUnSelectAll.UseVisualStyleBackColor = true;
+
this.chkSelectUnSelectAll.CheckedChanged += new System.EventHandler(this.chkSelectUnSelectAll_CheckedChanged);
+
//
+
// chkRemSn
+
//
+
this.chkRemSn.AutoSize = true;
+
this.chkRemSn.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkRemSn.Checked = true;
+
this.chkRemSn.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkRemSn.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkRemSn.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkRemSn.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemSn.ForeColor = System.Drawing.Color.Silver;
+
this.chkRemSn.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemSn.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRemSn.HoverForeColor = System.Drawing.Color.White;
- this.chkRemSn.Location = new System.Drawing.Point(625, 91);
+
+ this.chkRemSn.Location = new System.Drawing.Point(595, 91);
+
this.chkRemSn.Name = "chkRemSn";
+
this.chkRemSn.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemSn.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRemSn.PressForeColor = System.Drawing.Color.Gray;
- this.chkRemSn.Size = new System.Drawing.Size(306, 16);
+
+ this.chkRemSn.Size = new System.Drawing.Size(291, 16);
+
this.chkRemSn.TabIndex = 2;
+
this.chkRemSn.Tag = "--rem-sn";
+
this.chkRemSn.Text = "Remove Strong Name Removal Protection";
+
this.chkRemSn.UseVisualStyleBackColor = true;
+
this.chkRemSn.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkRename
+
//
+
this.chkRename.AutoSize = true;
+
this.chkRename.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkRename.Checked = true;
+
this.chkRename.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkRename.ContextMenuStrip = this.ctxRename;
+
this.chkRename.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkRename.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkRename.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRename.ForeColor = System.Drawing.Color.Silver;
+
this.chkRename.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRename.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRename.HoverForeColor = System.Drawing.Color.White;
+
this.chkRename.Location = new System.Drawing.Point(3, 113);
+
this.chkRename.Name = "chkRename";
+
this.chkRename.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRename.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRename.PressForeColor = System.Drawing.Color.Gray;
- this.chkRename.Size = new System.Drawing.Size(305, 16);
+
+ this.chkRename.Size = new System.Drawing.Size(290, 16);
+
this.chkRename.TabIndex = 17;
+
this.chkRename.Tag = "--rename ntmfe";
+
this.chkRename.Text = "Rename obfuscated symbols name";
+
this.chkRename.UseVisualStyleBackColor = true;
+
this.chkRename.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
this.chkRename.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OpenCtxRename);
+
//
+
// ctxRename
+
//
+
this.ctxRename.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(23)))), ((int)(((byte)(23)))), ((int)(((byte)(23)))));
+
this.ctxRename.ImageScalingSize = new System.Drawing.Size(20, 20);
+
this.ctxRename.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+
this.toolStripMenuItem8,
+
this.toolStripMenuItem9,
+
this.toolStripMenuItem10,
+
this.toolStripMenuItem13,
+
this.toolStripMenuItem15,
+
this.toolStripMenuItem14,
+
this.toolStripMenuItem16,
+
this.toolStripMenuItem12});
+
this.ctxRename.Name = "ctxLogs";
+
this.ctxRename.ShowImageMargin = false;
- this.ctxRename.Size = new System.Drawing.Size(152, 158);
+
+ this.ctxRename.Size = new System.Drawing.Size(132, 146);
+
this.ctxRename.Tag = "close";
+
this.ctxRename.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.ctxRename_Closing);
+
//
+
// toolStripMenuItem8
+
//
+
this.toolStripMenuItem8.AutoSize = false;
+
this.toolStripMenuItem8.Enabled = false;
+
this.toolStripMenuItem8.Name = "toolStripMenuItem8";
+
this.toolStripMenuItem8.Size = new System.Drawing.Size(185, 5);
+
this.toolStripMenuItem8.Text = " ";
+
//
+
// toolStripMenuItem9
+
//
+
this.toolStripMenuItem9.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem9.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem9.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem9.Name = "toolStripMenuItem9";
- this.toolStripMenuItem9.Size = new System.Drawing.Size(151, 24);
+
+ this.toolStripMenuItem9.Size = new System.Drawing.Size(131, 22);
+
this.toolStripMenuItem9.Tag = "n";
- this.toolStripMenuItem9.Text = " ✓ Namespaces";
+
+ this.toolStripMenuItem9.Text = " ? Namespaces";
+
this.toolStripMenuItem9.Click += new System.EventHandler(this.SetRenamingOptions);
+
this.toolStripMenuItem9.MouseDown += new System.Windows.Forms.MouseEventHandler(this.KeepCtxRenameOpen);
+
//
+
// toolStripMenuItem10
+
//
+
this.toolStripMenuItem10.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem10.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem10.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem10.Name = "toolStripMenuItem10";
- this.toolStripMenuItem10.Size = new System.Drawing.Size(151, 24);
+
+ this.toolStripMenuItem10.Size = new System.Drawing.Size(131, 22);
+
this.toolStripMenuItem10.Tag = "t";
- this.toolStripMenuItem10.Text = " ✓ Types";
+
+ this.toolStripMenuItem10.Text = " ? Types";
+
this.toolStripMenuItem10.Click += new System.EventHandler(this.SetRenamingOptions);
+
this.toolStripMenuItem10.MouseDown += new System.Windows.Forms.MouseEventHandler(this.KeepCtxRenameOpen);
+
//
+
// toolStripMenuItem13
+
//
+
this.toolStripMenuItem13.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem13.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem13.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem13.Name = "toolStripMenuItem13";
- this.toolStripMenuItem13.Size = new System.Drawing.Size(151, 24);
+
+ this.toolStripMenuItem13.Size = new System.Drawing.Size(131, 22);
+
this.toolStripMenuItem13.Tag = "m";
- this.toolStripMenuItem13.Text = " ✓ Methods";
+
+ this.toolStripMenuItem13.Text = " ? Methods";
+
this.toolStripMenuItem13.Click += new System.EventHandler(this.SetRenamingOptions);
+
this.toolStripMenuItem13.MouseDown += new System.Windows.Forms.MouseEventHandler(this.KeepCtxRenameOpen);
+
//
+
// toolStripMenuItem15
+
//
+
this.toolStripMenuItem15.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem15.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem15.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem15.Name = "toolStripMenuItem15";
- this.toolStripMenuItem15.Size = new System.Drawing.Size(151, 24);
+
+ this.toolStripMenuItem15.Size = new System.Drawing.Size(131, 22);
+
this.toolStripMenuItem15.Tag = "f";
- this.toolStripMenuItem15.Text = " ✓ Fields";
+
+ this.toolStripMenuItem15.Text = " ? Fields";
+
this.toolStripMenuItem15.Click += new System.EventHandler(this.SetRenamingOptions);
+
this.toolStripMenuItem15.MouseDown += new System.Windows.Forms.MouseEventHandler(this.KeepCtxRenameOpen);
+
//
+
// toolStripMenuItem14
+
//
+
this.toolStripMenuItem14.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem14.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem14.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem14.Name = "toolStripMenuItem14";
- this.toolStripMenuItem14.Size = new System.Drawing.Size(151, 24);
+
+ this.toolStripMenuItem14.Size = new System.Drawing.Size(131, 22);
+
this.toolStripMenuItem14.Tag = "p";
+
this.toolStripMenuItem14.Text = " X Properties";
+
this.toolStripMenuItem14.Click += new System.EventHandler(this.SetRenamingOptions);
+
this.toolStripMenuItem14.MouseDown += new System.Windows.Forms.MouseEventHandler(this.KeepCtxRenameOpen);
+
//
+
// toolStripMenuItem16
+
//
+
this.toolStripMenuItem16.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem16.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem16.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem16.Name = "toolStripMenuItem16";
- this.toolStripMenuItem16.Size = new System.Drawing.Size(151, 24);
+
+ this.toolStripMenuItem16.Size = new System.Drawing.Size(131, 22);
+
this.toolStripMenuItem16.Tag = "e";
- this.toolStripMenuItem16.Text = " ✓ Events";
+
+ this.toolStripMenuItem16.Text = " ? Events";
+
this.toolStripMenuItem16.Click += new System.EventHandler(this.SetRenamingOptions);
+
this.toolStripMenuItem16.MouseDown += new System.Windows.Forms.MouseEventHandler(this.KeepCtxRenameOpen);
+
//
+
// toolStripMenuItem12
+
//
+
this.toolStripMenuItem12.AutoSize = false;
+
this.toolStripMenuItem12.Enabled = false;
+
this.toolStripMenuItem12.Name = "toolStripMenuItem12";
+
this.toolStripMenuItem12.Size = new System.Drawing.Size(185, 5);
+
this.toolStripMenuItem12.Text = " ";
+
//
+
// chkRenameShort
+
//
+
this.chkRenameShort.AutoSize = true;
+
this.chkRenameShort.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkRenameShort.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkRenameShort.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkRenameShort.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRenameShort.ForeColor = System.Drawing.Color.Silver;
+
this.chkRenameShort.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRenameShort.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRenameShort.HoverForeColor = System.Drawing.Color.White;
- this.chkRenameShort.Location = new System.Drawing.Point(314, 113);
+
+ this.chkRenameShort.Location = new System.Drawing.Point(299, 113);
+
this.chkRenameShort.Name = "chkRenameShort";
+
this.chkRenameShort.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRenameShort.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRenameShort.PressForeColor = System.Drawing.Color.Gray;
- this.chkRenameShort.Size = new System.Drawing.Size(305, 16);
+
+ this.chkRenameShort.Size = new System.Drawing.Size(290, 16);
+
this.chkRenameShort.TabIndex = 18;
+
this.chkRenameShort.Tag = "--rename-short";
+
this.chkRenameShort.Text = "Rename short names";
+
this.chkRenameShort.UseVisualStyleBackColor = true;
+
this.chkRenameShort.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkRemJunks
+
//
+
this.chkRemJunks.AutoSize = true;
+
this.chkRemJunks.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkRemJunks.Checked = true;
+
this.chkRemJunks.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkRemJunks.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkRemJunks.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkRemJunks.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemJunks.ForeColor = System.Drawing.Color.Silver;
+
this.chkRemJunks.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemJunks.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRemJunks.HoverForeColor = System.Drawing.Color.White;
+
this.chkRemJunks.Location = new System.Drawing.Point(3, 135);
+
this.chkRemJunks.Name = "chkRemJunks";
+
this.chkRemJunks.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemJunks.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRemJunks.PressForeColor = System.Drawing.Color.Gray;
- this.chkRemJunks.Size = new System.Drawing.Size(305, 16);
+
+ this.chkRemJunks.Size = new System.Drawing.Size(290, 16);
+
this.chkRemJunks.TabIndex = 2;
+
this.chkRemJunks.Tag = "--rem-junks";
+
this.chkRemJunks.Text = "Remove Junks (BETA)";
+
this.chkRemJunks.UseVisualStyleBackColor = true;
+
this.chkRemJunks.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkKeepTypes
+
//
+
this.chkKeepTypes.AutoSize = true;
+
this.chkKeepTypes.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkKeepTypes.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkKeepTypes.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkKeepTypes.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkKeepTypes.ForeColor = System.Drawing.Color.Silver;
+
this.chkKeepTypes.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkKeepTypes.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkKeepTypes.HoverForeColor = System.Drawing.Color.White;
- this.chkKeepTypes.Location = new System.Drawing.Point(625, 113);
+
+ this.chkKeepTypes.Location = new System.Drawing.Point(595, 113);
+
this.chkKeepTypes.Name = "chkKeepTypes";
+
this.chkKeepTypes.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkKeepTypes.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkKeepTypes.PressForeColor = System.Drawing.Color.Gray;
- this.chkKeepTypes.Size = new System.Drawing.Size(306, 16);
+
+ this.chkKeepTypes.Size = new System.Drawing.Size(291, 16);
+
this.chkKeepTypes.TabIndex = 2;
+
this.chkKeepTypes.Tag = "--keep-types";
+
this.chkKeepTypes.Text = "Keep Obfuscator Types";
+
this.chkKeepTypes.UseVisualStyleBackColor = true;
+
this.chkKeepTypes.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkRemCalls
+
//
+
this.chkRemCalls.AutoSize = true;
+
this.chkRemCalls.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkRemCalls.Checked = true;
+
this.chkRemCalls.CheckState = System.Windows.Forms.CheckState.Checked;
+
this.chkRemCalls.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkRemCalls.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkRemCalls.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemCalls.ForeColor = System.Drawing.Color.Silver;
+
this.chkRemCalls.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemCalls.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRemCalls.HoverForeColor = System.Drawing.Color.White;
- this.chkRemCalls.Location = new System.Drawing.Point(314, 135);
+
+ this.chkRemCalls.Location = new System.Drawing.Point(299, 135);
+
this.chkRemCalls.Name = "chkRemCalls";
+
this.chkRemCalls.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkRemCalls.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkRemCalls.PressForeColor = System.Drawing.Color.Gray;
- this.chkRemCalls.Size = new System.Drawing.Size(305, 16);
+
+ this.chkRemCalls.Size = new System.Drawing.Size(290, 16);
+
this.chkRemCalls.TabIndex = 2;
+
this.chkRemCalls.Tag = "--rem-calls";
+
this.chkRemCalls.Text = "Remove Calls To Obfuscator Types";
+
this.chkRemCalls.UseVisualStyleBackColor = true;
+
this.chkRemCalls.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkPreserveAll
+
//
+
this.chkPreserveAll.AutoSize = true;
+
this.chkPreserveAll.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkPreserveAll.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkPreserveAll.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkPreserveAll.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkPreserveAll.ForeColor = System.Drawing.Color.Silver;
+
this.chkPreserveAll.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkPreserveAll.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkPreserveAll.HoverForeColor = System.Drawing.Color.White;
- this.chkPreserveAll.Location = new System.Drawing.Point(625, 135);
+
+ this.chkPreserveAll.Location = new System.Drawing.Point(595, 135);
+
this.chkPreserveAll.Name = "chkPreserveAll";
+
this.chkPreserveAll.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkPreserveAll.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkPreserveAll.PressForeColor = System.Drawing.Color.Gray;
- this.chkPreserveAll.Size = new System.Drawing.Size(306, 16);
+
+ this.chkPreserveAll.Size = new System.Drawing.Size(291, 16);
+
this.chkPreserveAll.TabIndex = 15;
+
this.chkPreserveAll.Tag = "--preserve-all";
+
this.chkPreserveAll.Text = "Preserve All MD Tokens";
+
this.chkPreserveAll.UseVisualStyleBackColor = true;
+
this.chkPreserveAll.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// chkKeepOldMaxStack
+
//
+
this.chkKeepOldMaxStack.AutoSize = true;
+
this.chkKeepOldMaxStack.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(117)))), ((int)(((byte)(9)))), ((int)(((byte)(12)))));
+
this.chkKeepOldMaxStack.Cursor = System.Windows.Forms.Cursors.Hand;
+
this.chkKeepOldMaxStack.Dock = System.Windows.Forms.DockStyle.Fill;
+
this.chkKeepOldMaxStack.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkKeepOldMaxStack.ForeColor = System.Drawing.Color.Silver;
+
this.chkKeepOldMaxStack.HoverBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkKeepOldMaxStack.HoverFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkKeepOldMaxStack.HoverForeColor = System.Drawing.Color.White;
+
this.chkKeepOldMaxStack.Location = new System.Drawing.Point(3, 157);
+
this.chkKeepOldMaxStack.Name = "chkKeepOldMaxStack";
+
this.chkKeepOldMaxStack.PressBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(30)))), ((int)(((byte)(35)))));
+
this.chkKeepOldMaxStack.PressFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.chkKeepOldMaxStack.PressForeColor = System.Drawing.Color.Gray;
- this.chkKeepOldMaxStack.Size = new System.Drawing.Size(305, 19);
+
+ this.chkKeepOldMaxStack.Size = new System.Drawing.Size(290, 19);
+
this.chkKeepOldMaxStack.TabIndex = 14;
+
this.chkKeepOldMaxStack.Tag = "--keep-max-stack";
+
this.chkKeepOldMaxStack.Text = "Keep Old Max Stack Value";
+
this.chkKeepOldMaxStack.UseVisualStyleBackColor = true;
+
this.chkKeepOldMaxStack.CheckedChanged += new System.EventHandler(this.CheckedChanged);
+
//
+
// panel1
+
//
+
this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(27)))), ((int)(((byte)(27)))));
+
this.panel1.Controls.Add(this.llblGitHub);
+
this.panel1.Controls.Add(this.label2);
+
this.panel1.Controls.Add(this.label5);
+
this.panel1.Controls.Add(this.lblVersion);
+
this.panel1.Controls.Add(this.llblWebsite);
+
this.panel1.Controls.Add(this.label4);
+
this.panel1.Controls.Add(this.lblAuthor);
+
this.panel1.Controls.Add(this.label1);
+
this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
+
this.panel1.Location = new System.Drawing.Point(30, 591);
+
this.panel1.Name = "panel1";
+
this.panel1.Padding = new System.Windows.Forms.Padding(5, 10, 5, 0);
- this.panel1.Size = new System.Drawing.Size(997, 40);
+
+ this.panel1.Size = new System.Drawing.Size(952, 40);
+
this.panel1.TabIndex = 17;
+
//
+
// llblGitHub
+
//
+
this.llblGitHub.ActiveLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.llblGitHub.AutoSize = true;
+
this.llblGitHub.Dock = System.Windows.Forms.DockStyle.Left;
+
this.llblGitHub.Font = new System.Drawing.Font("Segoe UI Semibold", 7F, System.Drawing.FontStyle.Bold);
+
this.llblGitHub.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.llblGitHub.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
- this.llblGitHub.Location = new System.Drawing.Point(405, 10);
+
+ this.llblGitHub.Location = new System.Drawing.Point(351, 10);
+
this.llblGitHub.Name = "llblGitHub";
- this.llblGitHub.Size = new System.Drawing.Size(45, 15);
+
+ this.llblGitHub.Size = new System.Drawing.Size(38, 12);
+
this.llblGitHub.TabIndex = 7;
+
this.llblGitHub.TabStop = true;
+
this.llblGitHub.Tag = "https://github.com/SychicBoy/NETReactorSlayer";
+
this.llblGitHub.Text = "GitHub";
+
this.llblGitHub.VisitedLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.llblGitHub.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llblGitHub_LinkClicked);
+
//
+
// label2
+
//
+
this.label2.AutoSize = true;
+
this.label2.Dock = System.Windows.Forms.DockStyle.Left;
+
this.label2.Font = new System.Drawing.Font("Segoe UI Semibold", 7F, System.Drawing.FontStyle.Bold);
+
this.label2.ForeColor = System.Drawing.Color.Gray;
- this.label2.Location = new System.Drawing.Point(316, 10);
+
+ this.label2.Location = new System.Drawing.Point(272, 10);
+
this.label2.Name = "label2";
+
this.label2.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
- this.label2.Size = new System.Drawing.Size(89, 15);
+
+ this.label2.Size = new System.Drawing.Size(79, 12);
+
this.label2.TabIndex = 6;
+
this.label2.Text = "Repository: ";
+
//
+
// label5
+
//
+
this.label5.AutoSize = true;
+
this.label5.Dock = System.Windows.Forms.DockStyle.Right;
+
this.label5.Font = new System.Drawing.Font("Segoe UI Semibold", 7F, System.Drawing.FontStyle.Bold);
+
this.label5.ForeColor = System.Drawing.Color.Gray;
- this.label5.Location = new System.Drawing.Point(943, 10);
+
+ this.label5.Location = new System.Drawing.Point(907, 10);
+
this.label5.Name = "label5";
- this.label5.Size = new System.Drawing.Size(49, 15);
+
+ this.label5.Size = new System.Drawing.Size(40, 12);
+
this.label5.TabIndex = 4;
+
this.label5.Text = "Version:";
+
//
+
// lblVersion
+
//
+
this.lblVersion.AutoSize = true;
+
this.lblVersion.Dock = System.Windows.Forms.DockStyle.Right;
+
this.lblVersion.Font = new System.Drawing.Font("Segoe UI Semibold", 7F, System.Drawing.FontStyle.Bold);
+
this.lblVersion.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
- this.lblVersion.Location = new System.Drawing.Point(992, 10);
+
+ this.lblVersion.Location = new System.Drawing.Point(947, 10);
+
this.lblVersion.Name = "lblVersion";
- this.lblVersion.Size = new System.Drawing.Size(0, 15);
+
+ this.lblVersion.Size = new System.Drawing.Size(0, 12);
+
this.lblVersion.TabIndex = 5;
+
//
+
// llblWebsite
+
//
+
this.llblWebsite.ActiveLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.llblWebsite.AutoSize = true;
+
this.llblWebsite.Dock = System.Windows.Forms.DockStyle.Left;
+
this.llblWebsite.Font = new System.Drawing.Font("Segoe UI Semibold", 7F, System.Drawing.FontStyle.Bold);
+
this.llblWebsite.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.llblWebsite.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
- this.llblWebsite.Location = new System.Drawing.Point(193, 10);
+
+ this.llblWebsite.Location = new System.Drawing.Point(166, 10);
+
this.llblWebsite.Name = "llblWebsite";
- this.llblWebsite.Size = new System.Drawing.Size(123, 15);
+
+ this.llblWebsite.Size = new System.Drawing.Size(106, 12);
+
this.llblWebsite.TabIndex = 3;
+
this.llblWebsite.TabStop = true;
+
this.llblWebsite.Tag = "https://www.CodeStrikers.org";
+
this.llblWebsite.Text = "www.CodeStrikers.org";
+
this.llblWebsite.VisitedLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
+
this.llblWebsite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llblWebsite_LinkClicked);
+
//
+
// label4
+
//
+
this.label4.AutoSize = true;
+
this.label4.Dock = System.Windows.Forms.DockStyle.Left;
+
this.label4.Font = new System.Drawing.Font("Segoe UI Semibold", 7F, System.Drawing.FontStyle.Bold);
+
this.label4.ForeColor = System.Drawing.Color.Gray;
- this.label4.Location = new System.Drawing.Point(117, 10);
+
+ this.label4.Location = new System.Drawing.Point(99, 10);
+
this.label4.Name = "label4";
+
this.label4.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
- this.label4.Size = new System.Drawing.Size(76, 15);
+
+ this.label4.Size = new System.Drawing.Size(67, 12);
+
this.label4.TabIndex = 2;
+
this.label4.Text = "Website: ";
+
//
+
// lblAuthor
+
//
+
this.lblAuthor.AutoSize = true;
+
this.lblAuthor.Dock = System.Windows.Forms.DockStyle.Left;
+
this.lblAuthor.Font = new System.Drawing.Font("Segoe UI Semibold", 7F, System.Drawing.FontStyle.Bold);
+
this.lblAuthor.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(188)))), ((int)(((byte)(14)))), ((int)(((byte)(18)))));
- this.lblAuthor.Location = new System.Drawing.Point(55, 10);
+
+ this.lblAuthor.Location = new System.Drawing.Point(48, 10);
+
this.lblAuthor.Name = "lblAuthor";
- this.lblAuthor.Size = new System.Drawing.Size(62, 15);
+
+ this.lblAuthor.Size = new System.Drawing.Size(51, 12);
+
this.lblAuthor.TabIndex = 1;
+
this.lblAuthor.Text = "SychicBoy";
+
//
+
// label1
+
//
+
this.label1.AutoSize = true;
+
this.label1.Dock = System.Windows.Forms.DockStyle.Left;
+
this.label1.Font = new System.Drawing.Font("Segoe UI Semibold", 7F, System.Drawing.FontStyle.Bold);
+
this.label1.ForeColor = System.Drawing.Color.Gray;
+
this.label1.Location = new System.Drawing.Point(5, 10);
+
this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(50, 15);
+
+ this.label1.Size = new System.Drawing.Size(43, 12);
+
this.label1.TabIndex = 0;
+
this.label1.Text = "Author: ";
+
//
+
// ctxMenu
+
//
+
this.ctxMenu.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(23)))), ((int)(((byte)(23)))), ((int)(((byte)(23)))));
+
this.ctxMenu.ImageScalingSize = new System.Drawing.Size(20, 20);
+
this.ctxMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+
this.toolStripMenuItem3,
+
this.toolStripMenuItem6,
+
this.toolStripMenuItem7,
+
this.toolStripMenuItem4,
+
this.toolStripMenuItem5});
+
this.ctxMenu.Name = "ctxLogs";
+
this.ctxMenu.ShowImageMargin = false;
- this.ctxMenu.Size = new System.Drawing.Size(169, 86);
+
+ this.ctxMenu.Size = new System.Drawing.Size(147, 80);
+
//
+
// toolStripMenuItem3
+
//
+
this.toolStripMenuItem3.AutoSize = false;
+
this.toolStripMenuItem3.Enabled = false;
+
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
+
this.toolStripMenuItem3.Size = new System.Drawing.Size(185, 5);
+
this.toolStripMenuItem3.Text = " ";
+
//
+
// toolStripMenuItem6
+
//
+
this.toolStripMenuItem6.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem6.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem6.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem6.Name = "toolStripMenuItem6";
- this.toolStripMenuItem6.Size = new System.Drawing.Size(168, 24);
+
+ this.toolStripMenuItem6.Size = new System.Drawing.Size(146, 22);
+
this.toolStripMenuItem6.Text = " Check For Update";
+
this.toolStripMenuItem6.Click += new System.EventHandler(this.toolStripMenuItem6_Click);
+
//
+
// toolStripMenuItem7
+
//
+
this.toolStripMenuItem7.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem7.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem7.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem7.Name = "toolStripMenuItem7";
- this.toolStripMenuItem7.Size = new System.Drawing.Size(168, 24);
+
+ this.toolStripMenuItem7.Size = new System.Drawing.Size(146, 22);
+
this.toolStripMenuItem7.Text = " About";
+
this.toolStripMenuItem7.Click += new System.EventHandler(this.toolStripMenuItem7_Click);
+
//
+
// toolStripMenuItem4
+
//
+
this.toolStripMenuItem4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+
this.toolStripMenuItem4.Font = new System.Drawing.Font("Segoe UI Semibold", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.toolStripMenuItem4.ForeColor = System.Drawing.Color.Silver;
+
this.toolStripMenuItem4.Name = "toolStripMenuItem4";
- this.toolStripMenuItem4.Size = new System.Drawing.Size(168, 24);
+
+ this.toolStripMenuItem4.Size = new System.Drawing.Size(146, 22);
+
this.toolStripMenuItem4.Text = " Exit";
+
this.toolStripMenuItem4.Click += new System.EventHandler(this.toolStripMenuItem4_Click);
+
//
+
// toolStripMenuItem5
+
//
+
this.toolStripMenuItem5.AutoSize = false;
+
this.toolStripMenuItem5.Enabled = false;
+
this.toolStripMenuItem5.Name = "toolStripMenuItem5";
+
this.toolStripMenuItem5.Size = new System.Drawing.Size(185, 5);
+
this.toolStripMenuItem5.Text = " ";
+
//
+
// MainWindow
+
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+
+ this.AutoScaleDimensions = new System.Drawing.SizeF(5F, 12F);
+
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(27)))), ((int)(((byte)(27)))));
- this.ClientSize = new System.Drawing.Size(1057, 631);
+
+ this.ClientSize = new System.Drawing.Size(1012, 631);
+
this.Controls.Add(this.pnlBase);
+
this.Controls.Add(this.pnlHeader);
+
this.Controls.Add(this.panel1);
+
this.Font = new System.Drawing.Font("Consolas", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+
this.ForeColor = System.Drawing.Color.White;
+
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+
this.MaximizeBox = false;
+
this.Name = "MainWindow";
+
this.Opacity = 0D;
+
this.Padding = new System.Windows.Forms.Padding(30, 5, 30, 0);
+
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+
this.Text = ".NET Reactor Slayer";
+
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Closing);
+
this.Shown += new System.EventHandler(this.MainWindow_Shown);
+
this.pnlHeader.ResumeLayout(false);
+
((System.ComponentModel.ISupportInitialize)(this.picMenu)).EndInit();
+
((System.ComponentModel.ISupportInitialize)(this.picMinimize)).EndInit();
+
((System.ComponentModel.ISupportInitialize)(this.picExit)).EndInit();
+
((System.ComponentModel.ISupportInitialize)(this.picHeader)).EndInit();
+
this.pnlBase.ResumeLayout(false);
+
this.pnlButton.ResumeLayout(false);
+
this.panelLogs.ResumeLayout(false);
+
this.ctxLogs.ResumeLayout(false);
+
this.pnlInput.ResumeLayout(false);
+
((System.ComponentModel.ISupportInitialize)(this.picBrowse)).EndInit();
+
this.pnlTextBox.ResumeLayout(false);
+
this.pnlOptions.ResumeLayout(false);
+
this.tabelOptions.ResumeLayout(false);
+
this.tabelOptions.PerformLayout();
+
this.ctxRename.ResumeLayout(false);
+
this.panel1.ResumeLayout(false);
+
this.panel1.PerformLayout();
+
this.ctxMenu.ResumeLayout(false);
+
this.ResumeLayout(false);
+
this.PerformLayout();
+
+
}
#endregion
diff --git a/NETReactorSlayer.GUI/MainWindow.cs b/NETReactorSlayer.GUI/MainWindow.cs
index 20abe12..4003d3f 100644
--- a/NETReactorSlayer.GUI/MainWindow.cs
+++ b/NETReactorSlayer.GUI/MainWindow.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,6 +13,11 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using dnlib.DotNet;
+using dnlib.PE;
+using NETReactorSlayer.GUI.Dialogs;
+using NETReactorSlayer.GUI.Properties;
+using NETReactorSlayer.GUI.UserControls;
using System;
using System.Diagnostics;
using System.Drawing;
@@ -26,11 +31,6 @@ You should have received a copy of the GNU General Public License
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
-using dnlib.DotNet;
-using dnlib.PE;
-using NETReactorSlayer.GUI.Dialogs;
-using NETReactorSlayer.GUI.Properties;
-using NETReactorSlayer.GUI.UserControls;
namespace NETReactorSlayer.GUI
{
@@ -486,8 +486,8 @@ private void CheckedChanged(object sender, EventArgs e)
chkPreserveAll.Checked = false;
if ((from x in tabelOptions.Controls.OfType()
- where x.Name != "chkSelectUnSelectAll"
- select x).Any(control => !control.Checked))
+ where x.Name != "chkSelectUnSelectAll"
+ select x).Any(control => !control.Checked))
{
_return = true;
chkSelectUnSelectAll.Checked = false;
@@ -515,19 +515,19 @@ private void chkSelectUnSelectAll_CheckedChanged(object sender, EventArgs e)
chkRename.Tag = "--dont-rename";
chkRename.Checked = false;
foreach (ToolStripMenuItem control in ctxRename.Items)
- control.Text = control.Text.Replace("✓", "X");
+ control.Text = control.Text.Replace("?", "X");
}
else
{
chkRename.Tag = "--rename --rename ntmfpe";
chkRename.Checked = true;
foreach (ToolStripMenuItem control in ctxRename.Items)
- control.Text = control.Text.Replace("X", "✓");
+ control.Text = control.Text.Replace("X", "?");
}
foreach (var control in (from x in tabelOptions.Controls.OfType()
- where x.Name != "chkSelectUnSelectAll"
- select x).Where(control => control.Checked != @checked))
+ where x.Name != "chkSelectUnSelectAll"
+ select x).Where(control => control.Checked != @checked))
{
_return = true;
control.Checked = @checked;
@@ -604,14 +604,14 @@ private void SetRenamingOptions(object sender, EventArgs e)
return;
tag = tag.Replace("--rename ", string.Empty).Replace("--dont-rename", string.Empty);
var text = control.Text;
- if (text.Contains("✓"))
+ if (text.Contains("?"))
{
- control.Text = text.Replace("✓", "X");
+ control.Text = text.Replace("?", "X");
chkRename.Tag = "--rename " + tag.Replace(option, string.Empty);
}
else if (text.Contains("X") && !tag.Contains(option))
{
- control.Text = text.Replace("X", "✓");
+ control.Text = text.Replace("X", "?");
chkRename.Tag = $"--rename {tag}{option}";
}
diff --git a/NETReactorSlayer.GUI/MenuColorTable.cs b/NETReactorSlayer.GUI/MenuColorTable.cs
index ee1a567..4d92c2f 100644
--- a/NETReactorSlayer.GUI/MenuColorTable.cs
+++ b/NETReactorSlayer.GUI/MenuColorTable.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.GUI/NETReactorSlayer.GUI.csproj b/NETReactorSlayer.GUI/NETReactorSlayer.GUI.csproj
index 9ba55a7..6589316 100644
--- a/NETReactorSlayer.GUI/NETReactorSlayer.GUI.csproj
+++ b/NETReactorSlayer.GUI/NETReactorSlayer.GUI.csproj
@@ -1,4 +1,4 @@
-
+
@@ -15,7 +15,8 @@
true
true
true
- True
+ False
+ x86
@@ -44,7 +45,7 @@
.NET Framework 3.5 SP1
false
-
+
diff --git a/NETReactorSlayer.GUI/Program.cs b/NETReactorSlayer.GUI/Program.cs
index fdd8294..98fe066 100644
--- a/NETReactorSlayer.GUI/Program.cs
+++ b/NETReactorSlayer.GUI/Program.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.GUI/Properties/AssemblyInfo.cs b/NETReactorSlayer.GUI/Properties/AssemblyInfo.cs
index a7deee0..7cde3f4 100644
--- a/NETReactorSlayer.GUI/Properties/AssemblyInfo.cs
+++ b/NETReactorSlayer.GUI/Properties/AssemblyInfo.cs
@@ -1,4 +1,4 @@
-using System.Reflection;
+using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle(".NET Reactor Slayer")]
diff --git a/NETReactorSlayer.GUI/Properties/Resources.Designer.cs b/NETReactorSlayer.GUI/Properties/Resources.Designer.cs
index 93c5f9e..ff979ca 100644
--- a/NETReactorSlayer.GUI/Properties/Resources.Designer.cs
+++ b/NETReactorSlayer.GUI/Properties/Resources.Designer.cs
@@ -1,4 +1,4 @@
-//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
diff --git a/NETReactorSlayer.GUI/Properties/Settings.Designer.cs b/NETReactorSlayer.GUI/Properties/Settings.Designer.cs
index a87a968..57d83c3 100644
--- a/NETReactorSlayer.GUI/Properties/Settings.Designer.cs
+++ b/NETReactorSlayer.GUI/Properties/Settings.Designer.cs
@@ -1,4 +1,4 @@
-//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
diff --git a/NETReactorSlayer.GUI/UserControls/NRSButton.Designer.cs b/NETReactorSlayer.GUI/UserControls/NRSButton.Designer.cs
index 2d013d1..5274f2f 100644
--- a/NETReactorSlayer.GUI/UserControls/NRSButton.Designer.cs
+++ b/NETReactorSlayer.GUI/UserControls/NRSButton.Designer.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.GUI/UserControls/NRSButton.cs b/NETReactorSlayer.GUI/UserControls/NRSButton.cs
index 76ab82a..3171f84 100644
--- a/NETReactorSlayer.GUI/UserControls/NRSButton.cs
+++ b/NETReactorSlayer.GUI/UserControls/NRSButton.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.GUI/UserControls/NRSCheckBox.cs b/NETReactorSlayer.GUI/UserControls/NRSCheckBox.cs
index 302ce31..d9a7853 100644
--- a/NETReactorSlayer.GUI/UserControls/NRSCheckBox.cs
+++ b/NETReactorSlayer.GUI/UserControls/NRSCheckBox.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.GUI/UserControls/NRSScrollBar.cs b/NETReactorSlayer.GUI/UserControls/NRSScrollBar.cs
index a848623..1e56b41 100644
--- a/NETReactorSlayer.GUI/UserControls/NRSScrollBar.cs
+++ b/NETReactorSlayer.GUI/UserControls/NRSScrollBar.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
@@ -13,11 +13,11 @@ You should have received a copy of the GNU General Public License
along with NETReactorSlayer. If not, see .
*/
+using NETReactorSlayer.GUI.Properties;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
-using NETReactorSlayer.GUI.Properties;
namespace NETReactorSlayer.GUI.UserControls
{
@@ -118,46 +118,46 @@ protected override void OnMouseMove(MouseEventArgs e)
switch (_isScrolling)
{
case false:
- {
- var thumbHot = _thumbArea.Contains(e.Location);
- if (_thumbHot != thumbHot)
- {
- _thumbHot = thumbHot;
- Invalidate();
- }
-
- var upArrowHot = _upArrowArea.Contains(e.Location);
- if (_upArrowHot != upArrowHot)
- {
- _upArrowHot = upArrowHot;
- Invalidate();
- }
-
- var downArrowHot = _downArrowArea.Contains(e.Location);
- if (_downArrowHot != downArrowHot)
{
- _downArrowHot = downArrowHot;
- Invalidate();
+ var thumbHot = _thumbArea.Contains(e.Location);
+ if (_thumbHot != thumbHot)
+ {
+ _thumbHot = thumbHot;
+ Invalidate();
+ }
+
+ var upArrowHot = _upArrowArea.Contains(e.Location);
+ if (_upArrowHot != upArrowHot)
+ {
+ _upArrowHot = upArrowHot;
+ Invalidate();
+ }
+
+ var downArrowHot = _downArrowArea.Contains(e.Location);
+ if (_downArrowHot != downArrowHot)
+ {
+ _downArrowHot = downArrowHot;
+ Invalidate();
+ }
+
+ break;
}
-
- break;
- }
case true when e.Button != MouseButtons.Left:
// ReSharper disable once AssignNullToNotNullAttribute
OnMouseUp(null);
return;
case true:
- {
- var difference = new Point(e.Location.X - _initialContact.X, e.Location.Y - _initialContact.Y);
+ {
+ var difference = new Point(e.Location.X - _initialContact.X, e.Location.Y - _initialContact.Y);
- var thumbPos = _initialValue - _trackArea.Top;
- var newPosition = thumbPos + difference.Y;
+ var thumbPos = _initialValue - _trackArea.Top;
+ var newPosition = thumbPos + difference.Y;
- ScrollToPhysical(newPosition);
- UpdateScrollBar();
+ ScrollToPhysical(newPosition);
+ UpdateScrollBar();
- break;
- }
+ break;
+ }
}
}
@@ -183,11 +183,11 @@ private void ScrollTimerTick(object sender, EventArgs e)
ScrollBy(-1);
break;
default:
- {
- if (_downArrowClicked)
- ScrollBy(1);
- break;
- }
+ {
+ if (_downArrowClicked)
+ ScrollBy(1);
+ break;
+ }
}
}
diff --git a/NETReactorSlayer.GUI/UserControls/NRSTextBox.Designer.cs b/NETReactorSlayer.GUI/UserControls/NRSTextBox.Designer.cs
index 386b2c5..4982466 100644
--- a/NETReactorSlayer.GUI/UserControls/NRSTextBox.Designer.cs
+++ b/NETReactorSlayer.GUI/UserControls/NRSTextBox.Designer.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.GUI/UserControls/NRSTextBox.cs b/NETReactorSlayer.GUI/UserControls/NRSTextBox.cs
index 4f0249f..5e79885 100644
--- a/NETReactorSlayer.GUI/UserControls/NRSTextBox.cs
+++ b/NETReactorSlayer.GUI/UserControls/NRSTextBox.cs
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 2021 CodeStrikers.org
This file is part of NETReactorSlayer.
NETReactorSlayer is free software: you can redistribute it and/or modify
diff --git a/NETReactorSlayer.GUI/packages.lock.json b/NETReactorSlayer.GUI/packages.lock.json
new file mode 100644
index 0000000..495e993
--- /dev/null
+++ b/NETReactorSlayer.GUI/packages.lock.json
@@ -0,0 +1,132 @@
+{
+ "version": 1,
+ "dependencies": {
+ ".NETFramework,Version=v4.8": {
+ "dnlib": {
+ "type": "Direct",
+ "requested": "[4.5.0, )",
+ "resolved": "4.5.0",
+ "contentHash": "YkwstIbjyiJ12uGIAN8oSmImgVFkPHit7MJXPHvJqeKV1DMNqxZWszjHfykgiSs4Y/XmjnZts7pI2/AYme5/uA=="
+ },
+ "System.Net.Http": {
+ "type": "Direct",
+ "requested": "[4.3.4, )",
+ "resolved": "4.3.4",
+ "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==",
+ "dependencies": {
+ "System.Security.Cryptography.X509Certificates": "4.3.0"
+ }
+ },
+ "System.Resources.Extensions": {
+ "type": "Direct",
+ "requested": "[5.0.0, )",
+ "resolved": "5.0.0",
+ "contentHash": "KBiqY/+W6hWVwucHBHO76JkgBGyawlxCcP946MhK8dNjalaBgZkyHaux8ko58PENTqQHHjoDa7cfIkAchfJPPA==",
+ "dependencies": {
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.IO": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg=="
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Runtime": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "4.5.3",
+ "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw=="
+ },
+ "System.Security.Cryptography.Algorithms": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
+ "dependencies": {
+ "System.IO": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Encoding": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw=="
+ },
+ "System.Security.Cryptography.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg=="
+ },
+ "System.Security.Cryptography.X509Certificates": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
+ "dependencies": {
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0"
+ }
+ }
+ },
+ ".NETFramework,Version=v4.8/win-x86": {
+ "System.Net.Http": {
+ "type": "Direct",
+ "requested": "[4.3.4, )",
+ "resolved": "4.3.4",
+ "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==",
+ "dependencies": {
+ "System.Security.Cryptography.X509Certificates": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Algorithms": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
+ "dependencies": {
+ "System.IO": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Encoding": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw=="
+ },
+ "System.Security.Cryptography.X509Certificates": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
+ "dependencies": {
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/NETReactorSlayerCommon.props b/NETReactorSlayerCommon.props
index 1279fa6..2b363ce 100644
--- a/NETReactorSlayerCommon.props
+++ b/NETReactorSlayerCommon.props
@@ -2,8 +2,8 @@
- net48;netcoreapp3.1;net6.0
- net6.0
+ net48;net7.0
+ net7.0
false
false
false
@@ -17,7 +17,8 @@
A deobfuscator and unpacker for Eziriz .NET Reactor
CodeStrikers.org
embedded
-
+ true
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 65c6a44..639591c 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,8 @@ GUI | CLI
### Binaries:
-Get the latest stable version from [GitHub releases](https://github.com/SychicBoy/NETReactorSlayer/releases/latest).
+Get the latest stable version from [GitHub releases](https://github.com/gembleman/NETReactorSlayer/releases/latest).
+Thanks to [JBou](https://github.com/JBou/NETReactorSlayer)
### Documentation:
Check out the [Wiki](https://github.com/SychicBoy/NETReactorSlayer/wiki) for guides and information on how to use it.
diff --git a/build.ps1 b/build.ps1
index fd2f845..c16a77d 100644
--- a/build.ps1
+++ b/build.ps1
@@ -1,5 +1,5 @@
param(
- [ValidateSet("all", "netframework", "net6.0-win32", "net6.0-win64", "net6.0-win-arm", "net6.0-win-arm64", "net6.0-linux64", "net6.0-linux-arm", "net6.0-linux-arm64", "net6.0-osx64", "netcoreapp3.1-win32", "netcoreapp3.1-win64", "netcoreapp3.1-win-arm", "netcoreapp3.1-win-arm64", "netcoreapp3.1-linux64", "netcoreapp3.1-linux-arm", "netcoreapp3.1-linux-arm64", "netcoreapp3.1-osx64")]
+ [ValidateSet("all", "netframework", "net9.0-win32", "net9.0-win64", "net9.0-win-arm64", "net9.0-linux64", "net9.0-linux-arm", "net9.0-linux-arm64", "net9.0-osx64", "net6.0-win32", "net6.0-win64", "net6.0-win-arm", "net6.0-win-arm64", "net6.0-linux64", "net6.0-linux-arm", "net6.0-linux-arm64", "net6.0-osx64", "netcoreapp3.1-win32", "netcoreapp3.1-win64", "netcoreapp3.1-win-arm", "netcoreapp3.1-win-arm64", "netcoreapp3.1-linux64", "netcoreapp3.1-linux-arm", "netcoreapp3.1-linux-arm64", "netcoreapp3.1-osx64")]
[string]$framework = 'all',
${-no-msbuild}
)
@@ -36,9 +36,35 @@ function BuildNETCore {
Write-Host "Building .NET $architecture binaries"
$runtimeidentifier = "$architecture"
+
+ $platformTarget = "AnyCPU"
+ if ($architecture.Contains("x86") -and !$architecture.Contains("x64")) {
+ $platformTarget = "x86"
+ } elseif ($architecture.Contains("x64")) {
+ $platformTarget = "x64"
+ } elseif ($architecture.Contains("arm64")) {
+ $platformTarget = "ARM64"
+ } elseif ($architecture.Contains("arm")) {
+ $platformTarget = "ARM"
+ }
+
+ # Fix: Only enable trimming for .NET Core 3.0+ and .NET 5+
+ $publishTrimmed = "False"
+ $publishSingleFile = "False"
+
+ # Check if the target framework supports trimming
+ $supportsTrimming = $false
+ if ($tfm -eq "netcoreapp3.1" -or $tfm.StartsWith("net5.") -or $tfm.StartsWith("net6.") -or $tfm.StartsWith("net7.") -or $tfm.StartsWith("net8.") -or $tfm.StartsWith("net9.") -or ($tfm.StartsWith("net") -and $tfm -match "^\d+\.\d+$" -and [int]($tfm.Split('.')[0].Substring(3)) -ge 5)) {
+ $supportsTrimming = $true
+ }
+
+ if ($supportsTrimming) {
+ $publishTrimmed = "True"
+ $publishSingleFile = "True"
+ }
if (${-no-msbuild}) {
- dotnet publish NETReactorSlayer.CLI\NETReactorSlayer.CLI.csproj -v:m -c $configuration -f $tfm -r $runtimeidentifier --self-contained -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishTrimmed=True -p:PublishSingleFile=true
+ dotnet publish NETReactorSlayer.CLI\NETReactorSlayer.CLI.csproj -v:m -c $configuration -f $tfm -r $runtimeidentifier --self-contained -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishTrimmed=$publishTrimmed -p:PublishSingleFile=$publishSingleFile -p:PlatformTarget=$platformTarget
if ($LASTEXITCODE) {
Write-Host
Write-Host ==========================
@@ -47,7 +73,7 @@ function BuildNETCore {
}
}
else {
- msbuild NETReactorSlayer.CLI\NETReactorSlayer.CLI.csproj -v:m -m -restore -t:Publish -p:Configuration=$configuration -p:TargetFramework=$tfm -p:RuntimeIdentifier=$runtimeidentifier -p:SelfContained=True -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishTrimmed=True -p:PublishSingleFile=true
+ msbuild NETReactorSlayer.CLI\NETReactorSlayer.CLI.csproj -v:m -m -restore -t:Publish -p:Configuration=$configuration -p:TargetFramework=$tfm -p:RuntimeIdentifier=$runtimeidentifier -p:SelfContained=True -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishTrimmed=$publishTrimmed -p:PublishSingleFile=$publishSingleFile -p:PlatformTarget=$platformTarget
if ($LASTEXITCODE) {
Write-Host
Write-Host ==========================
@@ -59,6 +85,13 @@ function BuildNETCore {
if($framework -eq 'all') {
BuildNETFramework
+ BuildNETCore win-x86 "net9.0"
+ BuildNETCore win-x64 "net9.0"
+ BuildNETCore win-arm64 "net9.0"
+ BuildNETCore linux-x64 "net9.0"
+ BuildNETCore linux-arm "net9.0"
+ BuildNETCore linux-arm64 "net9.0"
+ BuildNETCore osx-x64 "net9.0"
BuildNETCore win-x86 "net6.0"
BuildNETCore win-x64 "net6.0"
BuildNETCore win-arm "net6.0"
@@ -84,6 +117,27 @@ else {
if($framework -eq 'netframework'){
BuildNETFramework
}
+ elseif($framework -eq 'net9.0-win32'){
+ BuildNETCore win-x86 'net9.0'
+ }
+ elseif($framework -eq 'net9.0-win64'){
+ BuildNETCore win-x64 'net9.0'
+ }
+ elseif($framework -eq 'net9.0-win-arm64'){
+ BuildNETCore win-arm64 'net9.0'
+ }
+ elseif($framework -eq 'net9.0-linux64'){
+ BuildNETCore linux-x64 'net9.0'
+ }
+ elseif($framework -eq 'net9.0-linux-arm'){
+ BuildNETCore linux-arm 'net9.0'
+ }
+ elseif($framework -eq 'net9.0-linux-arm64'){
+ BuildNETCore linux-arm64 'net9.0'
+ }
+ elseif($framework -eq 'net9.0-osx64'){
+ BuildNETCore osx-x64 'net9.0'
+ }
elseif($framework -eq 'net6.0-win32'){
BuildNETCore win-x86 'net6.0'
}