├── .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 | ![](https://github.com/guillaC/BatchObfuscator/blob/main/Randomize%20variable%20and%20subroutine%20names.png?raw=true) 18 | ### Custom substrings encoding 19 | ![](https://github.com/guillaC/BatchObfuscator/blob/main/Encode%20substrings%20by%20custom%20variables.png?raw=true) 20 | ### Obfuscate Flow 21 | ![](https://github.com/guillaC/BatchObfuscator/blob/main/Obfuscate%20Flow.png?raw=true) 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 --------------------------------------------------------------------------------