├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── BatchProtect.sln
├── BatchProtect
├── BatchProtect.csproj
├── Form1.Designer.cs
├── Form1.cs
├── Form1.resx
├── Obfuscator.cs
└── Program.cs
├── Encode substrings by custom variables.png
├── LICENSE
├── Obfuscate Flow.png
├── README.md
└── Randomize variable and subroutine names.png
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Code
29 |
30 | **Additional context**
31 | Add any other context about the problem here.
32 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Aa][Rr][Mm]/
27 | [Aa][Rr][Mm]64/
28 | bld/
29 | [Bb]in/
30 | [Oo]bj/
31 | [Ll]og/
32 | [Ll]ogs/
33 |
34 | # Visual Studio 2015/2017 cache/options directory
35 | .vs/
36 | # Uncomment if you have tasks that create the project's static files in wwwroot
37 | #wwwroot/
38 |
39 | # Visual Studio 2017 auto generated files
40 | Generated\ Files/
41 |
42 | # MSTest test Results
43 | [Tt]est[Rr]esult*/
44 | [Bb]uild[Ll]og.*
45 |
46 | # NUnit
47 | *.VisualState.xml
48 | TestResult.xml
49 | nunit-*.xml
50 |
51 | # Build Results of an ATL Project
52 | [Dd]ebugPS/
53 | [Rr]eleasePS/
54 | dlldata.c
55 |
56 | # Benchmark Results
57 | BenchmarkDotNet.Artifacts/
58 |
59 | # .NET Core
60 | project.lock.json
61 | project.fragment.lock.json
62 | artifacts/
63 |
64 | # StyleCop
65 | StyleCopReport.xml
66 |
67 | # Files built by Visual Studio
68 | *_i.c
69 | *_p.c
70 | *_h.h
71 | *.ilk
72 | *.meta
73 | *.obj
74 | *.iobj
75 | *.pch
76 | *.pdb
77 | *.ipdb
78 | *.pgc
79 | *.pgd
80 | *.rsp
81 | *.sbr
82 | *.tlb
83 | *.tli
84 | *.tlh
85 | *.tmp
86 | *.tmp_proj
87 | *_wpftmp.csproj
88 | *.log
89 | *.vspscc
90 | *.vssscc
91 | .builds
92 | *.pidb
93 | *.svclog
94 | *.scc
95 |
96 | # Chutzpah Test files
97 | _Chutzpah*
98 |
99 | # Visual C++ cache files
100 | ipch/
101 | *.aps
102 | *.ncb
103 | *.opendb
104 | *.opensdf
105 | *.sdf
106 | *.cachefile
107 | *.VC.db
108 | *.VC.VC.opendb
109 |
110 | # Visual Studio profiler
111 | *.psess
112 | *.vsp
113 | *.vspx
114 | *.sap
115 |
116 | # Visual Studio Trace Files
117 | *.e2e
118 |
119 | # TFS 2012 Local Workspace
120 | $tf/
121 |
122 | # Guidance Automation Toolkit
123 | *.gpState
124 |
125 | # ReSharper is a .NET coding add-in
126 | _ReSharper*/
127 | *.[Rr]e[Ss]harper
128 | *.DotSettings.user
129 |
130 | # TeamCity is a build add-in
131 | _TeamCity*
132 |
133 | # DotCover is a Code Coverage Tool
134 | *.dotCover
135 |
136 | # AxoCover is a Code Coverage Tool
137 | .axoCover/*
138 | !.axoCover/settings.json
139 |
140 | # Visual Studio code coverage results
141 | *.coverage
142 | *.coveragexml
143 |
144 | # NCrunch
145 | _NCrunch_*
146 | .*crunch*.local.xml
147 | nCrunchTemp_*
148 |
149 | # MightyMoose
150 | *.mm.*
151 | AutoTest.Net/
152 |
153 | # Web workbench (sass)
154 | .sass-cache/
155 |
156 | # Installshield output folder
157 | [Ee]xpress/
158 |
159 | # DocProject is a documentation generator add-in
160 | DocProject/buildhelp/
161 | DocProject/Help/*.HxT
162 | DocProject/Help/*.HxC
163 | DocProject/Help/*.hhc
164 | DocProject/Help/*.hhk
165 | DocProject/Help/*.hhp
166 | DocProject/Help/Html2
167 | DocProject/Help/html
168 |
169 | # Click-Once directory
170 | publish/
171 |
172 | # Publish Web Output
173 | *.[Pp]ublish.xml
174 | *.azurePubxml
175 | # Note: Comment the next line if you want to checkin your web deploy settings,
176 | # but database connection strings (with potential passwords) will be unencrypted
177 | *.pubxml
178 | *.publishproj
179 |
180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
181 | # checkin your Azure Web App publish settings, but sensitive information contained
182 | # in these scripts will be unencrypted
183 | PublishScripts/
184 |
185 | # NuGet Packages
186 | *.nupkg
187 | # NuGet Symbol Packages
188 | *.snupkg
189 | # The packages folder can be ignored because of Package Restore
190 | **/[Pp]ackages/*
191 | # except build/, which is used as an MSBuild target.
192 | !**/[Pp]ackages/build/
193 | # Uncomment if necessary however generally it will be regenerated when needed
194 | #!**/[Pp]ackages/repositories.config
195 | # NuGet v3's project.json files produces more ignorable files
196 | *.nuget.props
197 | *.nuget.targets
198 |
199 | # Microsoft Azure Build Output
200 | csx/
201 | *.build.csdef
202 |
203 | # Microsoft Azure Emulator
204 | ecf/
205 | rcf/
206 |
207 | # Windows Store app package directories and files
208 | AppPackages/
209 | BundleArtifacts/
210 | Package.StoreAssociation.xml
211 | _pkginfo.txt
212 | *.appx
213 | *.appxbundle
214 | *.appxupload
215 |
216 | # Visual Studio cache files
217 | # files ending in .cache can be ignored
218 | *.[Cc]ache
219 | # but keep track of directories ending in .cache
220 | !?*.[Cc]ache/
221 |
222 | # Others
223 | ClientBin/
224 | ~$*
225 | *~
226 | *.dbmdl
227 | *.dbproj.schemaview
228 | *.jfm
229 | *.pfx
230 | *.publishsettings
231 | orleans.codegen.cs
232 |
233 | # Including strong name files can present a security risk
234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
235 | #*.snk
236 |
237 | # Since there are multiple workflows, uncomment next line to ignore bower_components
238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
239 | #bower_components/
240 |
241 | # RIA/Silverlight projects
242 | Generated_Code/
243 |
244 | # Backup & report files from converting an old project file
245 | # to a newer Visual Studio version. Backup files are not needed,
246 | # because we have git ;-)
247 | _UpgradeReport_Files/
248 | Backup*/
249 | UpgradeLog*.XML
250 | UpgradeLog*.htm
251 | ServiceFabricBackup/
252 | *.rptproj.bak
253 |
254 | # SQL Server files
255 | *.mdf
256 | *.ldf
257 | *.ndf
258 |
259 | # Business Intelligence projects
260 | *.rdl.data
261 | *.bim.layout
262 | *.bim_*.settings
263 | *.rptproj.rsuser
264 | *- [Bb]ackup.rdl
265 | *- [Bb]ackup ([0-9]).rdl
266 | *- [Bb]ackup ([0-9][0-9]).rdl
267 |
268 | # Microsoft Fakes
269 | FakesAssemblies/
270 |
271 | # GhostDoc plugin setting file
272 | *.GhostDoc.xml
273 |
274 | # Node.js Tools for Visual Studio
275 | .ntvs_analysis.dat
276 | node_modules/
277 |
278 | # Visual Studio 6 build log
279 | *.plg
280 |
281 | # Visual Studio 6 workspace options file
282 | *.opt
283 |
284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
285 | *.vbw
286 |
287 | # Visual Studio LightSwitch build output
288 | **/*.HTMLClient/GeneratedArtifacts
289 | **/*.DesktopClient/GeneratedArtifacts
290 | **/*.DesktopClient/ModelManifest.xml
291 | **/*.Server/GeneratedArtifacts
292 | **/*.Server/ModelManifest.xml
293 | _Pvt_Extensions
294 |
295 | # Paket dependency manager
296 | .paket/paket.exe
297 | paket-files/
298 |
299 | # FAKE - F# Make
300 | .fake/
301 |
302 | # CodeRush personal settings
303 | .cr/personal
304 |
305 | # Python Tools for Visual Studio (PTVS)
306 | __pycache__/
307 | *.pyc
308 |
309 | # Cake - Uncomment if you are using it
310 | # tools/**
311 | # !tools/packages.config
312 |
313 | # Tabs Studio
314 | *.tss
315 |
316 | # Telerik's JustMock configuration file
317 | *.jmconfig
318 |
319 | # BizTalk build output
320 | *.btp.cs
321 | *.btm.cs
322 | *.odx.cs
323 | *.xsd.cs
324 |
325 | # OpenCover UI analysis results
326 | OpenCover/
327 |
328 | # Azure Stream Analytics local run output
329 | ASALocalRun/
330 |
331 | # MSBuild Binary and Structured Log
332 | *.binlog
333 |
334 | # NVidia Nsight GPU debugger configuration file
335 | *.nvuser
336 |
337 | # MFractors (Xamarin productivity tool) working folder
338 | .mfractor/
339 |
340 | # Local History for Visual Studio
341 | .localhistory/
342 |
343 | # BeatPulse healthcheck temp database
344 | healthchecksdb
345 |
346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
347 | MigrationBackup/
348 |
349 | # Ionide (cross platform F# VS Code tools) working folder
350 | .ionide/
351 |
--------------------------------------------------------------------------------
/BatchProtect.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.1.31911.260
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BatchProtect", "BatchProtect\BatchProtect.csproj", "{1EAF62F9-6A75-4211-9154-9658AED1AC28}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {1EAF62F9-6A75-4211-9154-9658AED1AC28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {1EAF62F9-6A75-4211-9154-9658AED1AC28}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {1EAF62F9-6A75-4211-9154-9658AED1AC28}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {1EAF62F9-6A75-4211-9154-9658AED1AC28}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {037A4BC1-4903-4710-A94A-4657BEAFEEA5}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/BatchProtect/BatchProtect.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | WinExe
5 | net6.0-windows
6 | enable
7 | true
8 | enable
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/BatchProtect/Form1.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace BatchProtect
2 | {
3 | partial class Form1
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
33 | contextMenu = new ContextMenuStrip(components);
34 | TSMIRemoveCommentary = new ToolStripMenuItem();
35 | TSMIRandomVarSub = new ToolStripMenuItem();
36 | TSMISubstringEncode = new ToolStripMenuItem();
37 | TSMIFlowObf = new ToolStripMenuItem();
38 | TSMIEncapsulateInTempFiles = new ToolStripMenuItem();
39 | FCTBBatchCode = new FastColoredTextBoxNS.FastColoredTextBox();
40 | contextMenu.SuspendLayout();
41 | ((System.ComponentModel.ISupportInitialize)FCTBBatchCode).BeginInit();
42 | SuspendLayout();
43 | //
44 | // contextMenu
45 | //
46 | contextMenu.Items.AddRange(new ToolStripItem[] { TSMIRemoveCommentary, TSMIRandomVarSub, TSMISubstringEncode, TSMIEncapsulateInTempFiles, TSMIFlowObf });
47 | contextMenu.Name = "contextMenuStrip1";
48 | contextMenu.ShowImageMargin = false;
49 | contextMenu.Size = new Size(274, 136);
50 | //
51 | // TSMIRemoveCommentary
52 | //
53 | TSMIRemoveCommentary.Name = "TSMIRemoveCommentary";
54 | TSMIRemoveCommentary.Size = new Size(273, 22);
55 | TSMIRemoveCommentary.Text = "Remove comments";
56 | TSMIRemoveCommentary.Click += TSMIRemoveCommentary_Click;
57 | //
58 | // TSMIRandomVarSub
59 | //
60 | TSMIRandomVarSub.Name = "TSMIRandomVarSub";
61 | TSMIRandomVarSub.Size = new Size(273, 22);
62 | TSMIRandomVarSub.Text = "Randomize variable and subroutine names";
63 | TSMIRandomVarSub.Click += TSMIRandomVar_Click;
64 | //
65 | // TSMISubstringEncode
66 | //
67 | TSMISubstringEncode.Name = "TSMISubstringEncode";
68 | TSMISubstringEncode.Size = new Size(273, 22);
69 | TSMISubstringEncode.Text = "Encode substrings by custom variables";
70 | TSMISubstringEncode.Click += TSMISubstringEncode_Click;
71 | //
72 | // TSMIFlowObf
73 | //
74 | TSMIFlowObf.Name = "TSMIFlowObf";
75 | TSMIFlowObf.Size = new Size(273, 22);
76 | TSMIFlowObf.Text = "Obfuscate flow";
77 | TSMIFlowObf.Click += TSMIFlowObf_Click;
78 | //
79 | // TSMIEncapsulateInTempFiles
80 | //
81 | TSMIEncapsulateInTempFiles.Name = "TSMIEncapsulateInTempFiles";
82 | TSMIEncapsulateInTempFiles.Size = new Size(273, 22);
83 | TSMIEncapsulateInTempFiles.Text = "Encapsulate In Temp File";
84 | TSMIEncapsulateInTempFiles.Click += TSMIEncapsulateInTempFile_Click;
85 | //
86 | // FCTBBatchCode
87 | //
88 | this.FCTBBatchCode.AllowMacroRecording = false;
89 | this.FCTBBatchCode.AutoCompleteBracketsList = new char[] {
90 | '(',
91 | ')',
92 | '{',
93 | '}',
94 | '[',
95 | ']',
96 | '\"',
97 | '\"',
98 | '\'',
99 | '\''};
100 | this.FCTBBatchCode.AutoIndentCharsPatterns = "\r\n^\\s*\\$[\\w\\.\\[\\]\\\'\\\"]+\\s*(?=)\\s*(?[^;]+);\r\n";
101 | this.FCTBBatchCode.AutoScrollMinSize = new System.Drawing.Size(227, 14);
102 | this.FCTBBatchCode.BackBrush = null;
103 | this.FCTBBatchCode.BracketsHighlightStrategy = FastColoredTextBoxNS.BracketsHighlightStrategy.Strategy2;
104 | this.FCTBBatchCode.CharHeight = 14;
105 | this.FCTBBatchCode.CharWidth = 8;
106 | this.FCTBBatchCode.ContextMenuStrip = this.contextMenu;
107 | this.FCTBBatchCode.Cursor = System.Windows.Forms.Cursors.IBeam;
108 | this.FCTBBatchCode.DisabledColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))));
109 | this.FCTBBatchCode.Dock = System.Windows.Forms.DockStyle.Fill;
110 | this.FCTBBatchCode.IsReplaceMode = false;
111 | this.FCTBBatchCode.LeftBracket = '(';
112 | this.FCTBBatchCode.LeftBracket2 = '{';
113 | this.FCTBBatchCode.Location = new System.Drawing.Point(0, 0);
114 | this.FCTBBatchCode.Name = "FCTBBatchCode";
115 | this.FCTBBatchCode.Paddings = new System.Windows.Forms.Padding(0);
116 | this.FCTBBatchCode.RightBracket = ')';
117 | this.FCTBBatchCode.RightBracket2 = '}';
118 | this.FCTBBatchCode.SelectionColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(255)))));
119 | this.FCTBBatchCode.ServiceColors = ((FastColoredTextBoxNS.ServiceColors)(resources.GetObject("FCTBBatchCode.ServiceColors")));
120 | this.FCTBBatchCode.Size = new System.Drawing.Size(637, 369);
121 | this.FCTBBatchCode.TabIndex = 1;
122 | this.FCTBBatchCode.Text = "REM Batch Code Obfuscator github.com/guillaC";
123 | this.FCTBBatchCode.Zoom = 100;
124 | this.FCTBBatchCode.TextChanged += new System.EventHandler(this.FCTBBatchCode_TextChanged);
125 | this.FCTBBatchCode.Pasting += new System.EventHandler(this.FCTBBatchCode_Pasting);
126 | //
127 | // Form1
128 | //
129 | AutoScaleDimensions = new SizeF(7F, 15F);
130 | AutoScaleMode = AutoScaleMode.Font;
131 | ClientSize = new Size(637, 369);
132 | Controls.Add(FCTBBatchCode);
133 | Name = "Form1";
134 | Text = "Batch Code Obfuscator";
135 | contextMenu.ResumeLayout(false);
136 | ((System.ComponentModel.ISupportInitialize)FCTBBatchCode).EndInit();
137 | ResumeLayout(false);
138 | }
139 |
140 | #endregion
141 |
142 | private ContextMenuStrip contextMenu;
143 | private FastColoredTextBoxNS.FastColoredTextBox FCTBBatchCode;
144 | private ToolStripMenuItem TSMIRemoveCommentary;
145 | private ToolStripMenuItem TSMIRandomVarSub;
146 | private ToolStripMenuItem TSMISubstringEncode;
147 | private ToolStripMenuItem TSMIFlowObf;
148 | private ToolStripMenuItem TSMIEncapsulateInTempFiles;
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/BatchProtect/Form1.cs:
--------------------------------------------------------------------------------
1 | using FastColoredTextBoxNS;
2 |
3 | namespace BatchProtect
4 | {
5 | public partial class Form1 : Form
6 | {
7 | Style BlueStyle = new TextStyle(Brushes.DarkBlue, null, FontStyle.Bold);
8 | Style OrangeStyle = new TextStyle(Brushes.DarkOrange, null, FontStyle.Bold);
9 | Style GreenStyle = new TextStyle(Brushes.Green, null, FontStyle.Italic);
10 | Style TurquoiseStyle = new TextStyle(Brushes.DarkTurquoise, null, FontStyle.Bold);
11 | Style RedStyle = new TextStyle(Brushes.DarkRed, null, FontStyle.Bold);
12 |
13 | public Form1()
14 | {
15 | InitializeComponent();
16 | }
17 |
18 | private void TSMIRemoveCommentary_Click(object sender, EventArgs e)
19 | {
20 | FCTBBatchCode.SelectedText = Obfuscator.RemoveCommentary(FCTBBatchCode.SelectedText);
21 | }
22 |
23 | private void TSMIRandomVar_Click(object sender, EventArgs e)
24 | {
25 | FCTBBatchCode.SelectedText = Obfuscator.RandomVariableName(Obfuscator.RandomSubroutineName(FCTBBatchCode.SelectedText)); ;
26 | }
27 |
28 | private void TSMISubstringEncode_Click(object sender, EventArgs e)
29 | {
30 | Tuple data = Obfuscator.SubstringEncode(FCTBBatchCode.SelectedText);
31 | FCTBBatchCode.SelectedText = data.Item2;
32 | FCTBBatchCode.Text = data.Item1 + FCTBBatchCode.Text;
33 | }
34 |
35 | private void TSMIFlowObf_Click(object sender, EventArgs e)
36 | {
37 | FCTBBatchCode.SelectedText = Obfuscator.ControlFlow(FCTBBatchCode.SelectedText);
38 | }
39 |
40 | private void TSMIEncapsulateInTempFile_Click(object sender, EventArgs e)
41 | {
42 | FCTBBatchCode.SelectedText = Obfuscator.EncapsulateInTempFile(FCTBBatchCode.SelectedText);
43 | }
44 |
45 | private void FCTBBatchCode_TextChanged(object sender, FastColoredTextBoxNS.TextChangedEventArgs e)
46 | {
47 | e.ChangedRange.SetStyle(BlueStyle, @"(?i)(\W|^)(ASSOC|AT|ATTRIB|CALL|CD|CERTUTIL|CHCP|CHDIR|CHKDSK|CLS|CMDKEY|COLOR|COPY|CPROFILE|CSCRIPT|DATE|DEL|DIR|ECHO|ENDLOCAL|ERASE|EVENTCREATE|SET|EXIT|EXPAND|EXTRACT|FC|FIND|FINDSTR|FORMAT|GPRESULT|LABEL|MD|MKDIR|MKLINK|MOVE|PATH|PAUSE|PRINT|RD|REG|REGEDIT|REN|RENAME|REPLACE|RMDIR|SHUTDOWN|SORT|START|TASKKILL|TASKLIST|TIME|TITLE|TREE|TYPE|WMIC|WSCRIPT|XCOPY)(\W|$)");
48 | e.ChangedRange.SetStyle(OrangeStyle, @"(?i)(\W|^)(ARP|FTP|GETMAC|NBTSTAT|NET|NETSH|NETSTAT|NLTEST|NSLOOKUP|PING|PING6|POPD)(\W|$)");
49 | e.ChangedRange.SetStyle(GreenStyle, "REM.*$");
50 | e.ChangedRange.SetStyle(GreenStyle, "::.*$");
51 | e.ChangedRange.SetStyle(TurquoiseStyle, @"(?i)(\W|^)(IF|ELSE|FOR)(\W|$)");
52 | e.ChangedRange.SetStyle(RedStyle, @"(?i)(\W|^)(EQU|NEQ|LSS|LEQ|GTR|GEQ)(\W|$)");
53 | }
54 |
55 | private void FCTBBatchCode_Pasting(object sender, TextChangingEventArgs e)
56 | {
57 | e.InsertingText = Obfuscator.TrimSpace(e.InsertingText);
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/BatchProtect/Form1.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 |
125 | AAEAAAD/////AQAAAAAAAAAMAgAAAERGYXN0Q29sb3JlZFRleHRCb3gsIEN1bHR1cmU9bmV1dHJhbCwg
126 | UHVibGljS2V5VG9rZW49ZmI4YWExMmI5OTRlZjYxYgwDAAAAUVN5c3RlbS5EcmF3aW5nLCBWZXJzaW9u
127 | PTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49YjAzZjVmN2YxMWQ1MGEzYQUB
128 | AAAAIkZhc3RDb2xvcmVkVGV4dEJveE5TLlNlcnZpY2VDb2xvcnMGAAAAKDxDb2xsYXBzZU1hcmtlckZv
129 | cmVDb2xvcj5rX19CYWNraW5nRmllbGQoPENvbGxhcHNlTWFya2VyQmFja0NvbG9yPmtfX0JhY2tpbmdG
130 | aWVsZCo8Q29sbGFwc2VNYXJrZXJCb3JkZXJDb2xvcj5rX19CYWNraW5nRmllbGQmPEV4cGFuZE1hcmtl
131 | ckZvcmVDb2xvcj5rX19CYWNraW5nRmllbGQmPEV4cGFuZE1hcmtlckJhY2tDb2xvcj5rX19CYWNraW5n
132 | RmllbGQoPEV4cGFuZE1hcmtlckJvcmRlckNvbG9yPmtfX0JhY2tpbmdGaWVsZAQEBAQEBBRTeXN0ZW0u
133 | RHJhd2luZy5Db2xvcgMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5EcmF3aW5nLkNv
134 | bG9yAwAAABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5
135 | c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAIAAAAF/P///xRTeXN0ZW0uRHJhd2luZy5Db2xvcgQAAAAEbmFt
136 | ZQV2YWx1ZQprbm93bkNvbG9yBXN0YXRlAQAAAAkHBwMAAAAKAAAAAAAAAACWAAEAAfv////8////CgAA
137 | AAAAAAAApAABAAH6/////P///woAAAAAAAAAAJYAAQAB+f////z///8KAAAAAAAAAACNAAEAAfj////8
138 | ////CgAAAAAAAAAApAABAAH3/////P///woAAAAAAAAAAJYAAQAL
139 |
140 |
141 |
142 | 48
143 |
144 |
--------------------------------------------------------------------------------
/BatchProtect/Obfuscator.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Text.RegularExpressions;
7 |
8 | namespace BatchProtect
9 | {
10 | public static class Obfuscator
11 | {
12 |
13 | private static Random random = new Random();
14 | public static string GetRandomString(int length = 10, bool special = true)
15 | {
16 | string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
17 | if (special) chars = "קצקרשׁበአየጊግᏯᏰᎠᎢ阿贝色德饿艾豆贝尔维埃克斯爱耻";
18 | return new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
19 | }
20 |
21 | public static string OneLineIF(string code)
22 | {
23 | string[] splittedCode = code.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
24 | bool inIf = false;
25 | code = "";
26 |
27 | for (int i = 0; i < splittedCode.Length; i++)
28 | {
29 | if (splittedCode[i].Contains("(")) inIf = true;
30 | if (splittedCode[i].Contains(")") && !splittedCode[i].ToUpper().Contains("ELSE")) inIf = false;
31 | if (inIf)
32 | {
33 | code += splittedCode[i];
34 | if (splittedCode.Length > i + 1 && splittedCode[i + 1].Contains(")")) continue;
35 | if (splittedCode[i].Contains("(")) continue;
36 | code += " && ";
37 | }
38 | if (!inIf) code += splittedCode[i] + Environment.NewLine;
39 | }
40 | return code;
41 | }
42 |
43 | public static string TrimSpace(string code)
44 | {
45 | string[] splittedCode = code.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
46 | code = "";
47 | foreach (string line in splittedCode) code += line.TrimStart(' ', '\t') + Environment.NewLine;
48 | return code;
49 | }
50 |
51 | public static string RemoveCommentary(string code)
52 | {
53 | string[] splittedCode = code.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
54 | code = "";
55 | foreach (string line in splittedCode)
56 | {
57 | if (line.Length > 2 && line.Substring(0, 3).ToUpper() != "REM" && line.Substring(0, 2) != "::")
58 | {
59 | code += line + Environment.NewLine;
60 | }
61 | }
62 | return code;
63 | }
64 |
65 | public static List getVariables(string code)
66 | {
67 | string[] splittedCode = code.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
68 | List variables = new List();
69 |
70 | foreach (string line in splittedCode)
71 | {
72 | if (line.Length >= 3 && line.ToUpper().Contains("SET ") && line.Contains("="))
73 | {
74 | string clearLine = line.Replace(" =", "=").Replace("/A ", "").Replace("/a ", "");
75 | string[] words = new Regex(" (.*?)=").Split(clearLine);
76 | string variableName = words[1];
77 | if (variableName.Contains(" ")) variableName = variableName.Split(' ').Last();
78 | if (variableName.Contains("[")) variableName = variableName.Split('[').First(); //array
79 | variableName = Regex.Replace(variableName, "[^a-zA-Z0-9_.]+", "", RegexOptions.Compiled);
80 | if (!variables.Contains(variableName)) variables.Add(variableName);
81 | };
82 | }
83 | return variables;
84 | }
85 |
86 | public static List getLabels(string code)
87 | {
88 | List labels = new List();
89 | string[] splittedCode = code.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
90 | foreach (string line in splittedCode)
91 | {
92 | if (line.Length > 1 && line.Substring(0, 1) == ":" && line.Substring(1, 1) != ":")
93 | {
94 | string subName = line.Replace(":", "");
95 | if (!labels.Contains((subName))) labels.Add(subName);
96 | };
97 | }
98 | return labels;
99 | }
100 |
101 | public static string RandomSubroutineName(string code)
102 | {
103 | List labels = getLabels(code);
104 | foreach (string label in labels)
105 | {
106 | string newSubName = GetRandomString();
107 | code = code.Replace(":" + label, ":" + newSubName);
108 | code = code.Replace("GOTO " + label, "GOTO " + newSubName);
109 | code = code.Replace("goto " + label, "GOTO " + newSubName);
110 | };
111 | return code;
112 | }
113 |
114 | public static string RandomVariableName(string code)
115 | {
116 | List variables = getVariables(code);
117 |
118 | foreach (string variable in variables)
119 | {
120 | string newVariableName = GetRandomString();
121 | code = code.Replace("%" + variable + "%", "%" + newVariableName + "%");
122 | code = code.Replace("%" + variable + ":", "%" + newVariableName + ":");
123 | code = code.Replace(variable + "=", newVariableName + "=");
124 | code = code.Replace(variable + " =", newVariableName + "=");
125 | code = code.Replace(variable + "[", newVariableName + "[");
126 | code = code.Replace("[%" + variable + "%]", "[%" + newVariableName + "%]");
127 | }
128 | return code;
129 | }
130 |
131 | public static Tuple SubstringEncode(string code)
132 | {
133 | char[] letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray().OrderBy(x => Guid.NewGuid()).ToArray();
134 | string[] splittedCode = code.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
135 | string varName = GetRandomString();
136 | string setStr = "SET " + varName + "=" + new string(letters) + Environment.NewLine;
137 | string result = "";
138 | int i = 0;
139 | int j = 0;
140 | foreach (string line in splittedCode)
141 | {
142 | i++;
143 | if (line.ToUpper().Contains("SET") || line.Contains(":"))
144 | {
145 | result += line;
146 | }
147 | else
148 | {
149 | string[] splittedLine = line.Split(' ');
150 | foreach (string word in splittedLine)
151 | {
152 | j++;
153 | char[] characters = word.ToCharArray();
154 | if (word.Contains('%'))
155 | {
156 | result += word + " ";
157 | }
158 | else
159 | {
160 | foreach (char character in characters)
161 | {
162 | if (letters.Contains(character))
163 | {
164 | string lettersStr = new string(letters);
165 | result += "%" + varName + ":~" + lettersStr.IndexOf(character) + ",1%";
166 | }
167 | else
168 | {
169 | result += character;
170 | }
171 | }
172 | if (splittedLine.Count() != j) result += " ";
173 | }
174 | }
175 | }
176 |
177 | if (i< splittedCode.Count()) result += Environment.NewLine;
178 |
179 | }
180 | return new Tuple(setStr, result);
181 | }
182 | public static string ControlFlow(string code)
183 | {
184 | code = OneLineIF(code);
185 |
186 | string[] splittedCode = code.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
187 | Dictionary shuffledCode = new Dictionary();
188 | int lNumber = 0;
189 | while (code.Contains(":l" + Convert.ToString(lNumber))) lNumber++;
190 | int startNumber = lNumber;
191 | string eoc = GetRandomString();
192 | foreach (string line in splittedCode)
193 | {
194 | while (code.Contains(":l" + Convert.ToString(lNumber))) lNumber++;
195 | shuffledCode.Add(lNumber, line);
196 | lNumber++;
197 | }
198 | shuffledCode = shuffledCode.OrderBy(x => Guid.NewGuid())
199 | .ToDictionary(item => item.Key, item => item.Value);
200 | code = "";
201 | foreach (KeyValuePair kvPair in shuffledCode)
202 | {
203 | code += ":l" + kvPair.Key.ToString() + Environment.NewLine;
204 | code += kvPair.Value + Environment.NewLine; ;
205 | code += "GOTO l" + (kvPair.Key + 1).ToString() + Environment.NewLine;
206 | }
207 |
208 | code = "GOTO l" + startNumber.ToString() + Environment.NewLine + code + ":l" + shuffledCode.Count;
209 | return RandomSubroutineName(code);
210 | }
211 |
212 | public static string EncapsulateInTempFile(string code)
213 | {
214 | string tempFileName = "%temp%\\" + GetRandomString(8, false) + ".bat";
215 | List lines = new List();
216 |
217 | foreach (var line in code.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.None))
218 | {
219 | string escapedLine = line
220 | .Replace("\\", "\\\\")
221 | .Replace("\"", "\\\"")
222 | .Replace("^", "^^")
223 | .Replace("&", "^&")
224 | .Replace("|", "^|")
225 | .Replace(">", "^>")
226 | .Replace("<", "^<")
227 | .Replace("!", "^^!");
228 |
229 | lines.Add("echo " + escapedLine + " >> " + tempFileName);
230 | }
231 |
232 | string encapsulatedCode = "";
233 |
234 | encapsulatedCode +=
235 | string.Join(Environment.NewLine, lines) + Environment.NewLine +
236 | "CALL " + tempFileName + Environment.NewLine +
237 | "DEL " + tempFileName + Environment.NewLine;
238 |
239 | return encapsulatedCode;
240 | }
241 | }
242 | }
--------------------------------------------------------------------------------
/BatchProtect/Program.cs:
--------------------------------------------------------------------------------
1 | namespace BatchProtect
2 | {
3 | internal static class Program
4 | {
5 | ///
6 | /// The main entry point for the application.
7 | ///
8 | [STAThread]
9 | static void Main()
10 | {
11 | ApplicationConfiguration.Initialize();
12 | Application.Run(new Form1());
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/Encode substrings by custom variables.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guillaC/BatchObfuscator/13580629b261000eecdb105a4d8d7ebd3b76412f/Encode substrings by custom variables.png
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 GuillaC
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Obfuscate Flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guillaC/BatchObfuscator/13580629b261000eecdb105a4d8d7ebd3b76412f/Obfuscate Flow.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BatchObfuscator
2 | BatchObfuscator is a tool designed to assist software developers in making their Windows batch scripts difficult to modify and understand. By utilizing obfuscation techniques, BatchObfuscator protects the source code of a batch script by concealing sensitive information and making the process of reverse engineering more complex.
3 |
4 | During the obfuscation of a script, you have the option to choose from various obfuscation methods provided. These methods can be used individually or in combination, depending on your specific needs. You can also apply them successively to further enhance the protection of your script. This gives you precise control over the level of protection you want to apply to each section of your code.
5 |
6 | > **⚠ The project is currently on hold.**
7 |
8 | I take no responsibility for how this program is used. My hope is that others see it as a good tool to use and perhaps add more stuff to it.
9 | ## Usage
10 | - Paste your batch code into the input box.
11 | - Select the part of the code (or all the code).
12 | - Right-click to access the obfuscation features.
13 | - You can obfuscate all or parts of the code, using different obfuscation methods if desired.
14 |
15 | ## Features
16 | ### Randomize variables and subroutines names
17 | 
18 | ### Custom substrings encoding
19 | 
20 | ### Obfuscate Flow
21 | 
22 | ### Encapsulate In Temp File
23 | ### Remove comments
24 | ## Example
25 | original :
26 | ```batch
27 | @echo off
28 | SET URL=https://umod.org/games/rust/download
29 | SET FILE="./%RANDOM%.zip"
30 | SET FOLDERPATH="C:\Users\Guillaume\Desktop\RustServer\common\rust_dedicated\data\Managed"
31 | ECHO Downloading from %URL%
32 | powershell.exe -c "(New-Object Net.WebClient).DownloadFile('%URL%','%FILE%')"
33 | ECHO Done.
34 | ECHO Extract to current folder
35 | powershell.exe -c "Expand-Archive -Force '%FILE%' ./"
36 | ECHO Done.
37 | ECHO Copy to %FOLDERPATH%.
38 | COPY .\RustDedicated_Data\Managed\* %FOLDERPATH% /Y
39 | COPY .\RustDedicated_Data\Managed\x64\* %FOLDERPATH%\x64\ /Y
40 | COPY .\RustDedicated_Data\Managed\x86\* %FOLDERPATH%\x86\ /Y
41 | ECHO Done.
42 | pause
43 | ```
44 | ofbuscated :
45 | ```batch
46 | SET 贝斯尔斯贝色贝斯爱阿=sKCnjqmoPSMJlkXFvxIgYpDRdcVNhuwQfaLGryeTEUAtHiOBzbZW
47 | SET 饿阿艾艾艾尔豆克埃豆=xIXeZSdvAoOgDQKbrwWphTyzVUPjtCkGMJHRfuYsmqNanEciLFlB
48 | @%饿阿艾艾艾尔豆克埃豆:~3,1%%饿阿艾艾艾尔豆克埃豆:~46,1%%饿阿艾艾艾尔豆克埃豆:~20,1%%饿阿艾艾艾尔豆克埃豆:~9,1% %饿阿艾艾艾尔豆克埃豆:~9,1%%饿阿艾艾艾尔豆克埃豆:~36,1%%饿阿艾艾艾尔豆克埃豆:~36,1%
49 | cls
50 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 贝阿德尔埃贝阿贝斯爱
51 | :耻尔德色斯耻埃德贝耻
52 | SET 饿艾贝维色艾色饿贝克=RfvbGnJLZgSKiPczNtoWIMHuqplBAsOEFYkxmyXVeQjrwCThUDad
53 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 尔埃阿克阿阿耻维阿爱
54 | :阿艾贝贝阿豆色克阿饿
55 | SET 豆豆尔饿色德饿阿阿埃=aJwbietSzLNvPDnICoqYcxudlFOQMrTUjAfyKpHGshWZgBmXVRkE
56 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 克艾埃艾贝阿克阿维维
57 | :贝豆爱维艾饿色色爱饿
58 | SET 饿维贝耻艾贝埃斯爱埃=IyhlmENbGvJkXfuzRwVrDStPWaTqUKCxeFYcAZLdnHsBogpMiOjQ
59 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 阿色艾埃豆贝克贝贝贝
60 | :尔埃阿克阿阿耻维阿爱
61 | SET 爱艾贝德豆色克埃贝德=YwsPbznSkFdKLthXQTNqMVHyZErIvCWuapRgJDloxejGOiUcBfAm
62 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 贝豆爱维艾饿色色爱饿
63 | :贝阿德尔埃贝阿贝斯爱
64 | SET 艾贝爱尔阿阿尔豆耻维=GrMCmovQzuAckqENalUXKyYVnDpsRwjTefxLBtJObiWPIZSHdFgh
65 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 耻尔德色斯耻埃德贝耻
66 | :阿色艾埃豆贝克贝贝贝
67 | SET 斯豆贝饿尔尔豆耻色贝=wrfWEcOHudYsRNjtFnezPAJgBQmISxopUlaiXbZTMKyqkCVvDhLG
68 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 阿艾贝贝阿豆色克阿饿
69 | :色爱贝色耻艾克贝爱埃
70 | SET 饿维尔贝爱饿饿艾尔艾=fcMrVUTLwalPJDxmIXRsYCQEiWzGAoKSveZFhtujkBOgyqHNdnbp
71 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 饿埃埃贝维克贝艾爱艾
72 | :克艾埃艾贝阿克阿维维
73 | SET 斯色贝克贝贝维耻斯尔=jLXsOEBVgveTtkDrQzGyFpIMoHZwdlPchURiuabSxKAfNmqJnWYC
74 | %饿阿艾艾艾尔豆克埃豆:~31,1%%饿阿艾艾艾尔豆克埃豆:~10,1%%饿阿艾艾艾尔豆克埃豆:~21,1%%饿阿艾艾艾尔豆克埃豆:~10,1% 色爱贝色耻艾克贝爱埃
75 | :饿埃埃贝维克贝艾爱艾
76 | SET 爱爱贝埃尔尔贝埃尔尔=https://%豆豆尔饿色德饿阿阿埃:~22,1%%豆豆尔饿色德饿阿阿埃:~46,1%%豆豆尔饿色德饿阿阿埃:~17,1%%豆豆尔饿色德饿阿阿埃:~23,1%.%豆豆尔饿色德饿阿阿埃:~17,1%%豆豆尔饿色德饿阿阿埃:~29,1%%豆豆尔饿色德饿阿阿埃:~44,1%/%饿维贝耻艾贝埃斯爱埃:~45,1%%饿维贝耻艾贝埃斯爱埃:~25,1%%饿维贝耻艾贝埃斯爱埃:~4,1%%饿维贝耻艾贝埃斯爱埃:~32,1%%饿维贝耻艾贝埃斯爱埃:~42,1%/rust/%爱艾贝德豆色克埃贝德:~10,1%%爱艾贝德豆色克埃贝德:~39,1%%爱艾贝德豆色克埃贝德:~1,1%%爱艾贝德豆色克埃贝德:~6,1%%爱艾贝德豆色克埃贝德:~38,1%%爱艾贝德豆色克埃贝德:~39,1%%爱艾贝德豆色克埃贝德:~32,1%%爱艾贝德豆色克埃贝德:~10,1%
77 | SET 阿爱饿爱饿贝贝克贝耻="./%RANDOM%.%斯豆贝饿尔尔豆耻色贝:~19,1%%斯豆贝饿尔尔豆耻色贝:~35,1%%斯豆贝饿尔尔豆耻色贝:~31,1%"
78 | SET 维艾维克维贝豆豆阿德="C:\%贝斯尔斯贝色贝斯爱阿:~41,1%%贝斯尔斯贝色贝斯爱阿:~0,1%%贝斯尔斯贝色贝斯爱阿:~38,1%%贝斯尔斯贝色贝斯爱阿:~36,1%%贝斯尔斯贝色贝斯爱阿:~0,1%\%贝斯尔斯贝色贝斯爱阿:~35,1%%贝斯尔斯贝色贝斯爱阿:~29,1%%贝斯尔斯贝色贝斯爱阿:~45,1%%贝斯尔斯贝色贝斯爱阿:~12,1%%贝斯尔斯贝色贝斯爱阿:~12,1%%贝斯尔斯贝色贝斯爱阿:~33,1%%贝斯尔斯贝色贝斯爱阿:~29,1%%贝斯尔斯贝色贝斯爱阿:~6,1%%贝斯尔斯贝色贝斯爱阿:~38,1%\%贝斯尔斯贝色贝斯爱阿:~22,1%%贝斯尔斯贝色贝斯爱阿:~38,1%%贝斯尔斯贝色贝斯爱阿:~0,1%%贝斯尔斯贝色贝斯爱阿:~13,1%%贝斯尔斯贝色贝斯爱阿:~43,1%%贝斯尔斯贝色贝斯爱阿:~7,1%%贝斯尔斯贝色贝斯爱阿:~21,1%\%贝斯尔斯贝色贝斯爱阿:~23,1%%贝斯尔斯贝色贝斯爱阿:~29,1%%贝斯尔斯贝色贝斯爱阿:~0,1%%贝斯尔斯贝色贝斯爱阿:~43,1%%贝斯尔斯贝色贝斯爱阿:~9,1%%贝斯尔斯贝色贝斯爱阿:~38,1%%贝斯尔斯贝色贝斯爱阿:~36,1%%贝斯尔斯贝色贝斯爱阿:~16,1%%贝斯尔斯贝色贝斯爱阿:~38,1%%贝斯尔斯贝色贝斯爱阿:~36,1%\%贝斯尔斯贝色贝斯爱阿:~25,1%%贝斯尔斯贝色贝斯爱阿:~7,1%%贝斯尔斯贝色贝斯爱阿:~6,1%%贝斯尔斯贝色贝斯爱阿:~6,1%%贝斯尔斯贝色贝斯爱阿:~7,1%%贝斯尔斯贝色贝斯爱阿:~3,1%\%贝斯尔斯贝色贝斯爱阿:~36,1%%贝斯尔斯贝色贝斯爱阿:~29,1%%贝斯尔斯贝色贝斯爱阿:~0,1%%贝斯尔斯贝色贝斯爱阿:~43,1%_%贝斯尔斯贝色贝斯爱阿:~24,1%%贝斯尔斯贝色贝斯爱阿:~38,1%%贝斯尔斯贝色贝斯爱阿:~24,1%%贝斯尔斯贝色贝斯爱阿:~45,1%%贝斯尔斯贝色贝斯爱阿:~25,1%%贝斯尔斯贝色贝斯爱阿:~33,1%%贝斯尔斯贝色贝斯爱阿:~43,1%%贝斯尔斯贝色贝斯爱阿:~38,1%%贝斯尔斯贝色贝斯爱阿:~24,1%\%贝斯尔斯贝色贝斯爱阿:~24,1%%贝斯尔斯贝色贝斯爱阿:~33,1%%贝斯尔斯贝色贝斯爱阿:~43,1%%贝斯尔斯贝色贝斯爱阿:~33,1%\%贝斯尔斯贝色贝斯爱阿:~10,1%%贝斯尔斯贝色贝斯爱阿:~33,1%%贝斯尔斯贝色贝斯爱阿:~3,1%%贝斯尔斯贝色贝斯爱阿:~33,1%%贝斯尔斯贝色贝斯爱阿:~19,1%%贝斯尔斯贝色贝斯爱阿:~38,1%%贝斯尔斯贝色贝斯爱阿:~24,1%"
79 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 德饿尔德斯色克艾克豆
80 | :尔阿色豆艾尔阿耻维豆
81 | %饿维尔贝爱饿饿艾尔艾:~51,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~38,1%%饿维尔贝爱饿饿艾尔艾:~19,1%%饿维尔贝爱饿饿艾尔艾:~33,1%
82 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 贝维豆艾色埃艾德德斯2
83 | :德饿尔德斯色克艾克豆
84 | %饿维尔贝爱饿饿艾尔艾:~23,1%%饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~46,1%%饿维尔贝爱饿饿艾尔艾:~42,1% %饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~8,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~10,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~48,1%%饿维尔贝爱饿饿艾尔艾:~24,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~43,1% %饿维尔贝爱饿饿艾尔艾:~0,1%%饿维尔贝爱饿饿艾尔艾:~3,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~15,1% %爱爱贝埃尔尔贝埃尔尔%
85 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 贝维豆艾色埃艾德德斯
86 | :爱饿贝饿爱艾德爱艾艾
87 | %饿维尔贝爱饿饿艾尔艾:~23,1%%饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~46,1%%饿维尔贝爱饿饿艾尔艾:~42,1% %饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~33,1%.
88 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 色色色阿克阿艾艾贝德
89 | :尔艾饿维克斯埃饿阿贝
90 | %饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~42,1%%饿维尔贝爱饿饿艾尔艾:~11,1%%饿维尔贝爱饿饿艾尔艾:~20,1% .\%饿维尔贝爱饿饿艾尔艾:~18,1%%饿维尔贝爱饿饿艾尔艾:~38,1%%饿维尔贝爱饿饿艾尔艾:~19,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%%饿维尔贝爱饿饿艾尔艾:~24,1%%饿维尔贝爱饿饿艾尔艾:~1,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%_%饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~9,1%\%饿维尔贝爱饿饿艾尔艾:~2,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~43,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%\* %维艾维克维贝豆豆阿德% /%饿维尔贝爱饿饿艾尔艾:~20,1%
91 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 维饿贝德贝克贝斯色尔
92 | :埃贝克克埃爱尔尔尔德
93 | %饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~42,1%%饿维尔贝爱饿饿艾尔艾:~11,1%%饿维尔贝爱饿饿艾尔艾:~20,1% .\%饿维尔贝爱饿饿艾尔艾:~18,1%%饿维尔贝爱饿饿艾尔艾:~38,1%%饿维尔贝爱饿饿艾尔艾:~19,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%%饿维尔贝爱饿饿艾尔艾:~24,1%%饿维尔贝爱饿饿艾尔艾:~1,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%_%饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~9,1%\%饿维尔贝爱饿饿艾尔艾:~2,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~43,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%\%饿维尔贝爱饿饿艾尔艾:~14,1%86\* %维艾维克维贝豆豆阿德%\x86\ /%饿维尔贝爱饿饿艾尔艾:~20,1%
94 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 贝维豆艾色埃艾德德斯0
95 | :贝维豆艾色埃艾德德斯
96 | %饿维尔贝爱饿饿艾尔艾:~51,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~8,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~3,1%%饿维尔贝爱饿饿艾尔艾:~19,1%%饿维尔贝爱饿饿艾尔艾:~36,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~10,1%%饿维尔贝爱饿饿艾尔艾:~10,1%.%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~14,1%%饿维尔贝爱饿饿艾尔艾:~33,1% -%饿维尔贝爱饿饿艾尔艾:~1,1% "(%饿维尔贝爱饿饿艾尔艾:~47,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~8,1%-%饿维尔贝爱饿饿艾尔艾:~42,1%%饿维尔贝爱饿饿艾尔艾:~50,1%%饿维尔贝爱饿饿艾尔艾:~39,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~1,1%%饿维尔贝爱饿饿艾尔艾:~37,1% Net.%艾贝爱尔阿阿尔豆耻维:~42,1%%艾贝爱尔阿阿尔豆耻维:~32,1%%艾贝爱尔阿阿尔豆耻维:~40,1%%艾贝爱尔阿阿尔豆耻维:~3,1%%艾贝爱尔阿阿尔豆耻维:~17,1%%艾贝爱尔阿阿尔豆耻维:~41,1%%艾贝爱尔阿阿尔豆耻维:~32,1%%艾贝爱尔阿阿尔豆耻维:~24,1%%艾贝爱尔阿阿尔豆耻维:~37,1%).%饿艾贝维色艾色饿贝克:~49,1%%饿艾贝维色艾色饿贝克:~18,1%%饿艾贝维色艾色饿贝克:~44,1%%饿艾贝维色艾色饿贝克:~5,1%%饿艾贝维色艾色饿贝克:~26,1%%饿艾贝维色艾色饿贝克:~18,1%%饿艾贝维色艾色饿贝克:~50,1%%饿艾贝维色艾色饿贝克:~51,1%%饿艾贝维色艾色饿贝克:~32,1%%饿艾贝维色艾色饿贝克:~12,1%%饿艾贝维色艾色饿贝克:~26,1%%饿艾贝维色艾色饿贝克:~40,1%('%爱爱贝埃尔尔贝埃尔尔%','%阿爱饿爱饿贝贝克贝耻%')"
97 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 饿阿斯维阿维耻克贝克
98 | :贝维豆艾色埃艾德德斯0
99 | %饿维尔贝爱饿饿艾尔艾:~23,1%%饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~46,1%%饿维尔贝爱饿饿艾尔艾:~42,1% %饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~33,1%.
100 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 尔阿色豆艾尔阿耻维豆
101 | :饿阿斯维阿维耻克贝克
102 | %饿维尔贝爱饿饿艾尔艾:~23,1%%饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~46,1%%饿维尔贝爱饿饿艾尔艾:~42,1% %饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~33,1%.
103 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 贝贝艾色维德豆豆德阿
104 | :贝贝艾色维德豆豆德阿
105 | %饿维尔贝爱饿饿艾尔艾:~23,1%%饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~46,1%%饿维尔贝爱饿饿艾尔艾:~42,1% %饿维尔贝爱饿饿艾尔艾:~23,1%%饿维尔贝爱饿饿艾尔艾:~14,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~3,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~1,1%%饿维尔贝爱饿饿艾尔艾:~37,1% %饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~29,1% %饿维尔贝爱饿饿艾尔艾:~1,1%%饿维尔贝爱饿饿艾尔艾:~38,1%%饿维尔贝爱饿饿艾尔艾:~3,1%%饿维尔贝爱饿饿艾尔艾:~3,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~37,1% %饿维尔贝爱饿饿艾尔艾:~0,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~10,1%%饿维尔贝爱饿饿艾尔艾:~48,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~3,1%
106 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 爱德斯贝饿豆贝克色维
107 | :色色色阿克阿艾艾贝德
108 | %饿维尔贝爱饿饿艾尔艾:~23,1%%饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~46,1%%饿维尔贝爱饿饿艾尔艾:~42,1% %饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~51,1%%饿维尔贝爱饿饿艾尔艾:~44,1% %饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~29,1% %维艾维克维贝豆豆阿德%.
109 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 尔艾饿维克斯埃饿阿贝
110 | :爱德斯贝饿豆贝克色维
111 | %饿维尔贝爱饿饿艾尔艾:~51,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~8,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~3,1%%饿维尔贝爱饿饿艾尔艾:~19,1%%饿维尔贝爱饿饿艾尔艾:~36,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~10,1%%饿维尔贝爱饿饿艾尔艾:~10,1%.%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~14,1%%饿维尔贝爱饿饿艾尔艾:~33,1% -%饿维尔贝爱饿饿艾尔艾:~1,1% "%饿维尔贝爱饿饿艾尔艾:~23,1%%饿维尔贝爱饿饿艾尔艾:~14,1%%饿维尔贝爱饿饿艾尔艾:~51,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~48,1%-%饿维尔贝爱饿饿艾尔艾:~28,1%%饿维尔贝爱饿饿艾尔艾:~3,1%%饿维尔贝爱饿饿艾尔艾:~1,1%%饿维尔贝爱饿饿艾尔艾:~36,1%%饿维尔贝爱饿饿艾尔艾:~24,1%%饿维尔贝爱饿饿艾尔艾:~32,1%%饿维尔贝爱饿饿艾尔艾:~33,1% -%饿维尔贝爱饿饿艾尔艾:~35,1%%饿维尔贝爱饿饿艾尔艾:~29,1%%饿维尔贝爱饿饿艾尔艾:~3,1%%饿维尔贝爱饿饿艾尔艾:~1,1%%饿维尔贝爱饿饿艾尔艾:~33,1% '%阿爱饿爱饿贝贝克贝耻%' ./"
112 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 爱饿贝饿爱艾德爱艾艾
113 | :维饿贝德贝克贝斯色尔
114 | %饿维尔贝爱饿饿艾尔艾:~21,1%%饿维尔贝爱饿饿艾尔艾:~42,1%%饿维尔贝爱饿饿艾尔艾:~11,1%%饿维尔贝爱饿饿艾尔艾:~20,1% .\%饿维尔贝爱饿饿艾尔艾:~18,1%%饿维尔贝爱饿饿艾尔艾:~38,1%%饿维尔贝爱饿饿艾尔艾:~19,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%%饿维尔贝爱饿饿艾尔艾:~24,1%%饿维尔贝爱饿饿艾尔艾:~1,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%_%饿维尔贝爱饿饿艾尔艾:~13,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~37,1%%饿维尔贝爱饿饿艾尔艾:~9,1%\%饿维尔贝爱饿饿艾尔艾:~2,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~49,1%%饿维尔贝爱饿饿艾尔艾:~9,1%%饿维尔贝爱饿饿艾尔艾:~43,1%%饿维尔贝爱饿饿艾尔艾:~33,1%%饿维尔贝爱饿饿艾尔艾:~48,1%\%饿维尔贝爱饿饿艾尔艾:~14,1%64\* %维艾维克维贝豆豆阿德%\x64\ /%饿维尔贝爱饿饿艾尔艾:~20,1%
115 | %斯色贝克贝贝维耻斯尔:~18,1%%斯色贝克贝贝维耻斯尔:~4,1%%斯色贝克贝贝维耻斯尔:~11,1%%斯色贝克贝贝维耻斯尔:~4,1% 埃贝克克埃爱尔尔尔德
116 | :贝维豆艾色埃艾德德斯2
117 | ```
118 |
--------------------------------------------------------------------------------
/Randomize variable and subroutine names.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guillaC/BatchObfuscator/13580629b261000eecdb105a4d8d7ebd3b76412f/Randomize variable and subroutine names.png
--------------------------------------------------------------------------------