├── LICENSE.md ├── README.md └── AbobusObf.py /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 EscaLag 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Abobus obfuscator by EscaLag 2 | 3 | Batch code obfuscator written on Python. The best tool to obfuscate your batch code! 4 | 5 | Abobus - is the most powerful obfuscator, written in Python. developed by Escalag. 6 | 7 | ## Features 8 | 9 | There is some fetures available in this obfuscator: 10 | 11 | - FUD obfuscation 12 | - 10 layers of obfuscation 13 | - Flexible obfuscation settings 14 | - support for complex batch scripts 15 | - cleans the detections from virus total 16 | - Very fast obfuscation process (under 0.02ms!) 17 | 18 | ## Example 19 | 20 | Without obfuscation: 21 | 22 | ```bat 23 | @echo off 24 | echo hello world 25 | pause 26 | ``` 27 | 28 | w/ obfuscation, with disabled china symbol function: 29 | 30 | ```bat 31 | ;@;@@(@ch^c%法凡文無被^法%p%貼^是製是字護%.c%凡已人訊^這上%om 43^7)>n^ul&@e%魔法上保神^人%%保凡護上人被^%%人神文法^被上%^cho o%字的保製^保這%f^%凡行人行製^法%f&c%這凡護無^文法%%魔神^字製息護%^ls&&s%ت^◯تسﭲﻁ%e^%سﮢﭫ^◯ﺖﯔ%t ill%ﯤ^ﭲكتتﻁ%llii^%ﺹﭲ^ﮢﭫﮱﺼ%i%ﮢﺹﻁﺼﺖت^%iii=%0&s^e%ﮱتﮕﮚﭲﮱ^%%ﻁﯔ^كﭲﮚﮚ%t 𝧽= c 32 | @:ABOBUS-OBFUSCATOR 33 | 34 | ;SE^T "__author__=EscaLag" 35 | ;SE^T "__github__=github.com/EscaLag/Abobus-obfuscator" 36 | 37 | ; ;@s^%魔這被此^訊上%e%無^訊無製人字%t /a ‎+=1 >n^uL &F^o%此製魔訊^上已%%的法^訊字人字%r %%a in ( s%ﮢ^ﮚﺼﯔكﮕ%%﷽ﮢ^ﺹ◯ﯔ﷽%^et g%製的訊魔貼^法%^%製秘^被訊無秘%%字製人^神是人%oto e%(◕^‿◕)(⊙ω⊙)┌( ಠ_ಠ)┘(◕‿◕)ヾ(⌐■_■)ノ(◕‿◕)%c%┌(^ ಠ_ಠ)┘(◕‿◕)ヾ(⌐■_■)ノ(◕‿◕)┌( ಠ_ಠ)┘(⊙ω⊙)%h^%(⊙ω⊙)(◕‿◕)(⊙ω⊙)ヾ(⌐■_■)ノ(⊙ω⊙)ヾ^(⌐■_■)ノ%o pau%┌( ಠ_ಠ)┘(⊙ω⊙)(⊙ω⊙)(^⊙ω⊙)(⊙ω⊙)(⊙ω⊙)%^s%┌( ಠ_ಠ)┘(◕‿◕)(◕‿◕)(⊙ω⊙)┌( ಠ_ಠ)┘(⊙ω⊙)^%%(⊙ω⊙)(⊙ω⊙)ヾ(⌐■_■)ノヾ(⌐■_■)ノ(◕‿◕^)(⊙ω⊙)%e )do @f%人保保訊^已此%%魔被這這文凡^%^inds%無息神已^凡無%tr /L /I %%a %iLllLiiiIii%&&e%的凡字法文已^%x^%神法法秘貼神^%i%護人上^是法此%t 38 | @%PUblic:~4,1%%PUblic:~5,1%t "埃耻尔阿=SD1p3zX%PUblic:~14,1%Rk%PUblic:~9,1%75%PUblic:~0,1%oa8t%PUblic:~3,1%FfK2%PUblic:~4,1%TndVQmW%PUblic:~11,1%OLYAwGxgv9yMEq%PUblic:~12,1%jI%PUblic:~13,1%0N4Jh%PUblic:~10,1%%PUblic:~6,1%%PUblic:~5,1%6Z B@=H" 39 | @f%(⊙ω⊙)(⊙ω⊙)(◕‿◕)┌( ಠ_ಠ)┘┌( ಠ_ಠ)┘┌^( ಠ_ಠ)┘%i^%(^◕‿◕)ヾ(⌐■_■)ノ(⊙ω⊙)┌( ಠ_ಠ)┘ヾ(⌐■_■)ノヾ(⌐■_■)ノ%n%ヾ(⌐■_■)ノヾ(⌐■_■)ノヾ(⌐■_■)ノ(◕‿◕)┌( ಠ_ಠ)┘┌( ಠ_ಠ)^┘%d >n^UL 2>&1&&f^o%製保人^魔行行%%製上^人已護訊%R /l %%c iN (.)do (@e%複保秘^法行字%c^%文^被被保文保%h%無神秘護息已^%o AB%凡凡無保法是^%O^B%法魔神上^行法%U%複已保^保無複%S O^%ﺖ◯ك﷽ﺖ^ﮚ%B%ﻁﮕ^ﯤﺖﺼﻁ%FUSCAT%ﻁﭲ^ﮢﺹﯔ﷽%ION)||@exi%(⊙ω⊙)ヾ(⌐■_■)ノ(^◕‿◕)(◕‿◕)(◕‿◕)(◕‿◕)%^%ヾ(⌐■_■)ノ┌( ಠ_ಠ)┘(◕‿^◕)(◕‿◕)(◕‿◕)(⊙ω⊙)%%┌( ಠ_ಠ)┘^(⊙ω⊙)┌( ಠ_ಠ)┘ヾ(⌐■_■)ノヾ(⌐■_■)ノ(◕‿◕)%t 40 | @@%埃耻尔阿:~62,1%%埃耻尔阿:~23,1%%埃耻尔阿:~57,1%%埃耻尔阿:~17,1% "饿豆斯维%埃耻尔阿:~63,1%%埃耻尔阿:~56,1%%埃耻尔阿:~62,1%%埃耻尔阿:~6,1%%埃耻尔阿:~31,1%%埃耻尔阿:~58,1%%埃耻尔阿:~0,1%%埃耻尔阿:~9,1%%埃耻尔阿:~17,1%%埃耻尔阿:~4,1%%埃耻尔阿:~26,1%%埃耻尔阿:~12,1%%埃耻尔阿:~7,1%%埃耻尔阿:~64,1%%埃耻尔阿:~15,1%%埃耻尔阿:~61,1%%埃耻尔阿:~43,1%%埃耻尔阿:~63,1%%埃耻尔阿:~50,1%%埃耻尔阿:~48,1%%埃耻尔阿:~27,1%%埃耻尔阿:~53,1%%埃耻尔阿:~34,1%%埃耻尔阿:~55,1%%埃耻尔阿:~44,1%%埃耻尔阿:~25,1%%埃耻尔阿:~3,1%%埃耻尔阿:~5,1%%埃耻尔阿:~51,1%%埃耻尔阿:~24,1%%埃耻尔阿:~10,1%%埃耻尔阿:~37,1%%埃耻尔阿:~16,1%%埃耻尔阿:~14,1%%埃耻尔阿:~35,1%%埃耻尔阿:~32,1%%埃耻尔阿:~46,1%%埃耻尔阿:~13,1%%埃耻尔阿:~41,1%%埃耻尔阿:~8,1%%埃耻尔阿:~28,1%%埃耻尔阿:~20,1%%埃耻尔阿:~21,1%%埃耻尔阿:~22,1%%埃耻尔阿:~29,1%%埃耻尔阿:~11,1%%埃耻尔阿:~57,1%%埃耻尔阿:~60,1%%埃耻尔阿:~38,1%%埃耻尔阿:~18,1%%埃耻尔阿:~23,1%%埃耻尔阿:~1,1%%埃耻尔阿:~39,1%%埃耻尔阿:~47,1%%埃耻尔阿:~19,1%%埃耻尔阿:~40,1%%埃耻尔阿:~54,1%%埃耻尔阿:~36,1%%埃耻尔阿:~2,1%%埃耻尔阿:~52,1%%埃耻尔阿:~59,1%%埃耻尔阿:~45,1%%埃耻尔阿:~30,1%%埃耻尔阿:~33,1%%埃耻尔阿:~49,1%%埃耻尔阿:~42,1%" 41 | ;@;@s^e%製訊複^被秘被%%字訊製秘文複^%t /a ‎+=1 >n^UL &F%(◕‿◕)(◕‿◕)┌( ಠ_ಠ)┘(^◕‿◕)┌( ಠ_ಠ)┘ヾ(⌐■_■)ノ%%┌( ಠ_ಠ)┘ヾ(⌐■_■)ノヾ(⌐■_■)ノ(◕‿◕)^ヾ(⌐■_■)ノヾ(⌐■_■)ノ%o^R /l %%i iN (1 1 1) do F%(◕‿◕)(◕‿◕)┌( ಠ_ಠ)┘(^◕‿◕)┌( ಠ_ಠ)┘ヾ(⌐■_■)ノ%%┌( ಠ_ಠ)┘ヾ(⌐■_■)ノヾ(⌐■_■)ノ(◕‿◕)^ヾ(⌐■_■)ノヾ(⌐■_■)ノ%o^R %%a iN ( il%(⊙ω⊙)(◕‿◕)┌( ಠ_ಠ)┘ヾ(⌐^■_■)ノヾ(⌐■_■)ノヾ(⌐■_■)ノ%%ヾ(⌐■_■)ノヾ(⌐■_■)ノ(⊙ω⊙)(⊙^ω⊙)(◕‿◕)(◕‿◕)%llliii^ii%┌( ಠ_ಠ)┘(⊙ω⊙)ヾ^(⌐■_■)ノヾ(⌐■_■)ノ(◕‿◕)┌( ಠ_ಠ)┘%i _%ﺖ^ﮕ◯ﺼﮕﮕ%_%ﺹكﮱ﷽^ﻁﮱ%%ﮚﭲ^ﮚﭫﮚﺼ%author^__ _^_gi%被製這已^無人%%被魔秘上^護這%%複^已無人文凡%thub__)do i^f no%ヾ(⌐■_■)ノ^┌( ಠ_ಠ)┘(◕‿◕)ヾ(⌐■_■)ノ┌( ಠ_ಠ)┘(◕‿◕)%^%(◕‿◕)ヾ(⌐■_■)ノ(◕‿◕)ヾ(⌐■_■)ノ(◕‿◕)ヾ(⌐■_■^)ノ%t de%┌( ಠ_ಠ)┘(◕‿◕)┌(^ ಠ_ಠ)┘(◕‿◕)(◕‿◕)(⊙ω⊙)%%(⊙ω⊙^)┌( ಠ_ಠ)┘ヾ(⌐■_■)ノ(⊙ω⊙)(◕‿◕)(⊙ω⊙)%f%(⊙ω⊙)(⊙ω⊙)(^◕‿◕)(⊙ω⊙)┌( ಠ_ಠ)┘ヾ(⌐■_■)ノ%iN^ed %%a ex%秘神息此^魔文%%保神息魔訊^訊%i^%人魔^的的文製%t 42 | @@%饿豆斯维:~1,1%%饿豆斯维:~49,1%%饿豆斯维:~45,1%%饿豆斯维:~7,1% "艾埃克贝%饿豆斯维:~16,1%%饿豆斯维:~31,1%%饿豆斯维:~32,1%%饿豆斯维:~40,1%%饿豆斯维:~39,1%%饿豆斯维:~36,1%%饿豆斯维:~58,1%%饿豆斯维:~60,1%%饿豆斯维:~30,1%%饿豆斯维:~52,1%%饿豆斯维:~21,1%%饿豆斯维:~27,1%%饿豆斯维:~46,1%%饿豆斯维:~56,1%%饿豆斯维:~20,1%%饿豆斯维:~17,1%%饿豆斯维:~35,1%%饿豆斯维:~57,1%%饿豆斯维:~18,1%%饿豆斯维:~61,1%%饿豆斯维:~41,1%%饿豆斯维:~9,1%%饿豆斯维:~48,1%%饿豆斯维:~29,1%%饿豆斯维:~54,1%%饿豆斯维:~51,1%%饿豆斯维:~50,1%%饿豆斯维:~33,1%%饿豆斯维:~15,1%%饿豆斯维:~8,1%%饿豆斯维:~53,1%%饿豆斯维:~23,1%%饿豆斯维:~2,1%%饿豆斯维:~25,1%%饿豆斯维:~62,1%%饿豆斯维:~10,1%%饿豆斯维:~5,1%%饿豆斯维:~38,1%%饿豆斯维:~55,1%%饿豆斯维:~26,1%%饿豆斯维:~22,1%%饿豆斯维:~64,1%%饿豆斯维:~49,1%%饿豆斯维:~16,1%%饿豆斯维:~12,1%%饿豆斯维:~37,1%%饿豆斯维:~47,1%%饿豆斯维:~4,1%%饿豆斯维:~44,1%%饿豆斯维:~1,1%%饿豆斯维:~24,1%%饿豆斯维:~63,1%%饿豆斯维:~19,1%%饿豆斯维:~42,1%%饿豆斯维:~7,1%%饿豆斯维:~59,1%%饿豆斯维:~34,1%%饿豆斯维:~28,1%%饿豆斯维:~14,1%%饿豆斯维:~3,1%%饿豆斯维:~11,1%%饿豆斯维:~43,1%%饿豆斯维:~0,1%%饿豆斯维:~13,1%%饿豆斯维:~6,1%%饿豆斯维:~45,1%" 43 | @@e%這已是文已^無%^%字秘這^法法行%%人^無神字此貼%cho>tmp&@f%(⊙ω⊙)ヾ(⌐■_■)ノヾ(⌐■_^■)ノ(⊙ω⊙)┌( ಠ_ಠ)┘┌( ಠ_ಠ)┘%^O%(◕‿◕)ヾ(⌐■_■)ノ(⊙ω⊙)(⊙ω⊙)(◕‿◕)┌( ಠ_^ಠ)┘%r /f "tokens=3" %%i iN ('t^%س◯تﮚتﺼ^%yp%ﺖكتﯔﮕ^ﮚ%%سكﭲﯔﻁﮱ^%e tmp')DO i^f "%%i" E%貼秘上^護被法%%無複這神行^貼%Q^U "on." (@ex%保已上^的神無%%息複人人^秘息%i%這^秘是此神息%^t) else (@d^%字這法行^人此%%已是是^此法已%el /f/q tmp) 44 | @@%艾埃克贝:~48,1%%艾埃克贝:~41,1%%艾埃克贝:~64,1%%艾埃克贝:~53,1% "维艾爱阿%艾埃克贝:~42,1%%艾埃克贝:~47,1%%艾埃克贝:~30,1%%艾埃克贝:~17,1%%艾埃克贝:~49,1%%艾埃克贝:~28,1%%艾埃克贝:~55,1%%艾埃克贝:~36,1%%艾埃克贝:~5,1%%艾埃克贝:~29,1%%艾埃克贝:~19,1%%艾埃克贝:~13,1%%艾埃克贝:~57,1%%艾埃克贝:~40,1%%艾埃克贝:~11,1%%艾埃克贝:~2,1%%艾埃克贝:~14,1%%艾埃克贝:~62,1%%艾埃克贝:~43,1%%艾埃克贝:~12,1%%艾埃克贝:~25,1%%艾埃克贝:~37,1%%艾埃克贝:~35,1%%艾埃克贝:~26,1%%艾埃克贝:~27,1%%艾埃克贝:~53,1%%艾埃克贝:~45,1%%艾埃克贝:~58,1%%艾埃克贝:~44,1%%艾埃克贝:~24,1%%艾埃克贝:~63,1%%艾埃克贝:~34,1%%艾埃克贝:~1,1%%艾埃克贝:~48,1%%艾埃克贝:~56,1%%艾埃克贝:~15,1%%艾埃克贝:~46,1%%艾埃克贝:~8,1%%艾埃克贝:~33,1%%艾埃克贝:~61,1%%艾埃克贝:~18,1%%艾埃克贝:~20,1%%艾埃克贝:~32,1%%艾埃克贝:~59,1%%艾埃克贝:~23,1%%艾埃克贝:~64,1%%艾埃克贝:~3,1%%艾埃克贝:~38,1%%艾埃克贝:~39,1%%艾埃克贝:~54,1%%艾埃克贝:~60,1%%艾埃克贝:~10,1%%艾埃克贝:~31,1%%艾埃克贝:~22,1%%艾埃克贝:~16,1%%艾埃克贝:~9,1%%艾埃克贝:~52,1%%艾埃克贝:~41,1%%艾埃克贝:~42,1%%艾埃克贝:~50,1%%艾埃克贝:~0,1%%艾埃克贝:~7,1%%艾埃克贝:~6,1%%艾埃克贝:~21,1%%艾埃克贝:~51,1%%艾埃克贝:~4,1%" 45 | @s^%س﷽س^◯ﯔﯔ%e%ﮢﯤ^◯ﭲﭲﮢ%t b=1 >Nu^l 2>&1 & if n%ﯤﮚﭫﮢﮕ^ﭲ%o^%◯^ﭲﺖكﭲت%t d%ﺼﻁﮚﭲ^ت﷽%e%كﺖ^ﮱﮚﮚﮕ%fiNe%ﯤﺼﮢﭫ^ﺼﯤ%^d b (@ech%神魔被被的貼^%^%的行字秘是上^%%製保凡息的^息%o =D&@p^%(⊙ω⊙)(⊙ω⊙)┌( ಠ_ಠ)┘┌^( ಠ_ಠ)┘ヾ(⌐■_■)ノ(⊙ω⊙)%aus%(◕‿◕)(⊙^ω⊙)ヾ(⌐■_■)ノ┌( ಠ_ಠ)┘ヾ(⌐■_■)ノヾ(⌐■_■)ノ%%(⊙^ω⊙)(◕‿◕)(◕‿◕)ヾ(⌐■_■)ノ┌( ಠ_ಠ)┘(⊙ω⊙)%e&@ex%行^複此已訊秘%%神文複^人法訊%^%息^無行製息秘%it) 46 | @@%维艾爱阿:~32,1%%维艾爱阿:~56,1%%维艾爱阿:~44,1%%维艾爱阿:~24,1% "豆贝艾埃%维艾爱阿:~57,1%%维艾爱阿:~58,1%%维艾爱阿:~40,1%%维艾爱阿:~9,1%%维艾爱阿:~42,1%%维艾爱阿:~32,1%%维艾爱阿:~41,1%%维艾爱阿:~38,1%%维艾爱阿:~21,1%%维艾爱阿:~44,1%%维艾爱阿:~8,1%%维艾爱阿:~26,1%%维艾爱阿:~49,1%%维艾爱阿:~59,1%%维艾爱阿:~6,1%%维艾爱阿:~11,1%%维艾爱阿:~24,1%%维艾爱阿:~56,1%%维艾爱阿:~17,1%%维艾爱阿:~50,1%%维艾爱阿:~0,1%%维艾爱阿:~7,1%%维艾爱阿:~13,1%%维艾爱阿:~63,1%%维艾爱阿:~57,1%%维艾爱阿:~3,1%%维艾爱阿:~52,1%%维艾爱阿:~36,1%%维艾爱阿:~31,1%%维艾爱阿:~12,1%%维艾爱阿:~60,1%%维艾爱阿:~53,1%%维艾爱阿:~4,1%%维艾爱阿:~54,1%%维艾爱阿:~43,1%%维艾爱阿:~22,1%%维艾爱阿:~16,1%%维艾爱阿:~35,1%%维艾爱阿:~27,1%%维艾爱阿:~23,1%%维艾爱阿:~64,1%%维艾爱阿:~55,1%%维艾爱阿:~61,1%%维艾爱阿:~2,1%%维艾爱阿:~48,1%%维艾爱阿:~29,1%%维艾爱阿:~5,1%%维艾爱阿:~1,1%%维艾爱阿:~51,1%%维艾爱阿:~46,1%%维艾爱阿:~30,1%%维艾爱阿:~18,1%%维艾爱阿:~25,1%%维艾爱阿:~10,1%%维艾爱阿:~14,1%%维艾爱阿:~45,1%%维艾爱阿:~20,1%%维艾爱阿:~19,1%%维艾爱阿:~34,1%%维艾爱阿:~33,1%%维艾爱阿:~37,1%%维艾爱阿:~62,1%%维艾爱阿:~15,1%%维艾爱阿:~28,1%%维艾爱阿:~39,1%%维艾爱阿:~47,1%" 47 | @f^i%法複複此凡^貼%n%人的的^是是已%%複秘被被這^凡%d >nU^l 2>&1&&F%ﮢ^ﺼ◯ﮚﺹﺼ%o^%ﺹﮕ^ﺼﮢﻁﻁ%r /l %%c in (.)DO (@ec%的複法秘法^秘%^h%上是^貼複法此%%貼貼字字秘被^%o A%被護法保魔是^%%字法魔製製^無%BO^%法是^上無的上%BUS O%無魔人^已神護%%此行息此此凡^%B^FUSCAT%字^的貼行字秘%ION)||@e%(◕‿◕)(◕‿◕)(⊙ω⊙)(⊙ω^⊙)(⊙ω⊙)(⊙ω⊙)%x%┌( ಠ_ಠ)┘(⊙ω⊙^)(⊙ω⊙)┌( ಠ_ಠ)┘┌( ಠ_ಠ)┘(⊙ω⊙)%^i%(⊙ω⊙)ヾ(⌐■_■)ノヾ(⌐■_■)ノ(◕‿^◕)(⊙ω⊙)(◕‿◕)%t 48 | @if %‎% N%تﻁﭲﮱ^ﯔﮱ%^E%ﺹﯔﮚﯔك^ﯔ%q 2 e%上^行秘這魔貼%%秘無字息製息^%x%被^貼上上人法%^it 49 | ;@;@@e%ﮱ^تﮱﭲﺼﺼ%ch%ﺼ^ﮱكﮢﺖﭲ%%ﮕﭲﺼﯤ^تت%^o>tmp&f%ﭲ﷽ﮢﯔ^◯س%^%ﮕﺖﯤﺖﺼ^ﺹ%or /f "tokens=3" %%i iN ('t%ﭫكﭲسﮚ^ﮢ%y%ﭫﮱت^ﮕﯤت%^%سﺼ◯س﷽^ك%pe tmp')Do if "%%i" E^Q%(⊙ω⊙)^ヾ(⌐■_■)ノヾ(⌐■_■)ノ┌( ಠ_ಠ)┘ヾ(⌐■_■)ノ(◕‿◕)%%┌( ಠ_ಠ)┘ヾ(⌐■_■)ノヾ(⌐■_■)ノ(⊙ω⊙)┌( ಠ_ಠ^)┘ヾ(⌐■_■)ノ%U "on." (e%ﮚﮢﯔﮚ^ﯤك%x%ﺹ^ﯔﻁﮱكﭫ%i^%ﮢكسﮕ^﷽ﭲ%t) else (d%神複^息文的魔%%法製^製訊保訊%e^l /f/q tmp) 50 | ;@;@if 74 LsS 139 %维艾爱阿:~32,1%%饿豆斯维:~45,1%%艾埃克贝:~59,1%%艾埃克贝:~37,1%%饿豆斯维:~32,1%%豆贝艾埃:~21,1%%维艾爱阿:~31,1%%饿豆斯维:~40,1%%埃耻尔阿:~20,1% 51 | ;@If ex^i%┌( ಠ_ಠ)┘(◕‿◕)(◕‿◕)┌( ಠ_ಠ)┘┌( ಠ_ಠ^)┘(◕‿◕)%%(◕‿◕)(◕‿◕)┌( ಠ_ಠ)┘ヾ(⌐■_■)ノ(◕‿◕)(⊙^ω⊙)%s%ヾ(⌐■_■)ノ(⊙ω⊙)┌( ^ಠ_ಠ)┘ヾ(⌐■_■)ノ(◕‿◕)┌( ಠ_ಠ)┘%t %iLllliiiiii% %饿豆斯维:~45,1%%维艾爱阿:~42,1%%埃耻尔阿:~54,1%%饿豆斯维:~32,1%%饿豆斯维:~46,1%%艾埃克贝:~37,1%%埃耻尔阿:~57,1%%埃耻尔阿:~46,1%%维艾爱阿:~34,1%%艾埃克贝:~1,1%%饿豆斯维:~46,1%%维艾爱阿:~18,1%%维艾爱阿:~31,1%%豆贝艾埃:~6,1%%维艾爱阿:~34,1%%豆贝艾埃:~1,1% 52 | ;@@iF 43 EQ^%ﮕ^﷽ﭲﮚﺖ﷽%%ﻁﭫ^ﺖﮢﮢﮕ%U 0 (@exit) else %豆贝艾埃:~5,1%%豆贝艾埃:~35,1%%艾埃克贝:~39,1%%艾埃克贝:~41,1%%埃耻尔阿:~57,1% 53 | ``` 54 | 55 | w/obfuscation, with enabled china symbol function: 56 | 57 | ```bat 58 | 渾汵㈠☾‱挦獬䀊敀隺꫘膻꿯놮껯▕捞膻뫯�庳뫯�骮┥뫯庼껯�붷꿯꒯栥╯꿯閮릺꿯��▪╞菙뫯膻껯�広韢▯晦昦潞貔
닠徠ꂲ颔铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔馊觏諢⦙馊觏諢⦙┥铢⢌ꂲꂲ颔閗胢閗⠩韢뾀韢⦕铢⢌ꂲꂲ颔铢⢌帠닠徠닠⦠铢⢘韢뾀韢⦕爥⼠┥⁩义⠠‱‱⤱佤⠠幦╯铢⢌ꂲ幟닠⦠铢貔
닠徠닠⦠铢뺃邌離徠離⦠菣貔
닠徠닠⦠铢⢘諢쾙馊⠩諢쾙馊┩貔
닠徠닠⦠铢⢘韢뾀韢⦕閗胢閗貔
닠徠닠⦠铢貔
ꂲꂲ颔閗胢閗┩⁲氯┠椥䤠⁎ㄨㄠㄠ搩⁏椨䙞┠牅潲汲癅汥‥╅閗胢閗⠩諢쾙馊뺃帨賢ꂖꂖ躃馊觏諢⦙馊觏諢⦙铢⢌ꂲꂲ颔帥⠥韢뾀韢⦕閗胢閗⠩韢뾀韢⦕帨韢뾀韢⦕馊觏諢⦙馊觏諢⦙儥⁕‰╥꿯ꮭ꿯꾗믯�庪┥럯庽껯꾗귯벺믯▁╸껯钯늭믯�꒯帥瑩⤩㬊㭀䁀䀨档뺃邌離徠離⦠菣뺃邌離徠離⦠菣貔
닠徠닠⦠颔菣⢾賢ꂖꂖ躃閗胢閗⠩諢쾙馊┩뺃邌離庠ꂖ躃菣⢾賢ꂖꂖ躃馊觏諢⦙铢⢌ꂲꂲ颔閗胢閗貔
닠徠닠⦠铢▘灣帮⠥韢뾀韢⦕⡞韢뾀韢⦕閗胢閗⠩諢쾙馊貔
닠徠닠⦠铢⢘諢쾙馊┩潣帴㜳㸩畮䱞䀦捥╞꿯��꾗돘뫯庼┥껯놮뫯�広돘껯▢�閮럯�庳귯膻栥景貔⡞ꂲꂲ颔馊觏諢⦙铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃閗胢閗⠩諢쾙馊┩⠥諢쾙馊뺃邌離徠離⦠菣뺃邌離徠離⦠菣⢎韢뾀韢⦕菣⢾邌離徠離⦠菣⢎韢뾀韢⦕帥♦╣돘귯庲믯릺뫯�▪幬꒯隺뫯隺껯꾗猥☦╳铢⢌ꂲꂲ颔閗胢庿韢⦕閗胢閗⠩韢뾀韢⦕铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃攥╞閗胢閗貔⡞ꂲꂲ颔馊觏諢⦙铢⢌ꂲꂲ颔馊觏諢⦙铢⢌ꂲꂲ颔琥氠╩ꋨ颧룤꾘꣨床蟥□財돦底蓧랭髧螖椥楬汩╩ꏨ庽단誨귥誨룤▊幬楬┽☰╳뫯庼뫯꾗돘뫯놮帥╥꿯膻껯钯귯庫껯▚⁴鷰붧‽挛䀊䄺佂啂ⵓ䉏商䍓呁剏ਊ医幅⁔弢慟瑵潨彲㵟獅慣慌≧㬊䕓呞∠彟楧桴扵彟朽瑩畨⹢潣⽭獅慣慌⽧扁扯獵漭晢獵慣潴≲ਊ敀�벺껯꒯꿯应껯▚╞껯릺膻껯릺菙挥╨껯庢꿯閮뫯�膻漥琾灭䀦╆菣⢾賢ꂖꂖ躃閗胢閗뺃邌離徠離⦠菣貔
닠徠닠⦠颔菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃帥⠥諢쾙馊⠩韢뾀韢⦕铢⢌ꂲꂲ颔铢⢌ꂲꂲ颔⡞韢뾀韢⦕馊觏諢⦙漥⁲是∠潴敫獮㌽•┥⁩义⠠琧╹閗胢閗貔
닠徠닠⦠铢⢘諢쾙馊⠩馊觏諢⦙铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃┥菣⢾賢ꂖꂖ躃馊觏諢⦙馊觏諢⦙閗胢閗⠩韢뾀韢⦕貔
닠徠닠⦠铢▘╞閗胢閗⠩諢쾙馊⠩韢뾀韢⦕閗胢閗貔
닠庠ꂲ颔菣⢾賢ꂖꂖ躃瀥⁥浴❰搩晉∠┥≩䔠⠥諢쾙馊뺃邌離徠離⦠菣⢎韢뾀韢⦕铢⢌帠닠徠닠⦠铢⢘韢뾀韢⦕馊觏諢⦙帥║閗뾀韢⦕菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃馊觏諢⦙閗胢閗┩⁕漢⹮•䀨硥╩閗胢閗⠩諢쾙馊뺃邌離徠ꂖ躃閗胢閗⠩韢뾀韢⦕閗胢閗┩⠥諢쾙馊뺃邌離徠離⦠菣뺃邌離徠離⦠菣⢎韢뾀韢⦕菣⢾賢ꂖꂖ躃閗胢庿韢⦕帥⠥韢뾀韢⦕閗胢閗⠩韢뾀韢⦕菣⢾賢ꂖꂖ帩菣뺃邌離徠離⦠菣뺃邌離徠離⦠菣▎⥴攠獬⁥䀨敤閮꿯�ꮭꮭ뫯▖벺꒯꫘믯隺꿯▔汞⼠⽦ⁱ浴⥰㬊㭀╀異汢捩縺ⰴ┱瀥扵楬㩣㕾ㄬ琥∠藥뺉뻥뒻䀽䩅瀥扵楬㩣ㅾⰲ┱┵異汢捩縺〱ㄬ稥瀥扵楬㩣まㄬ䬥ㅆ硉瀥扵楬㩣ㅾⰳ┱吽䵴瀥扵楬㩣㙾ㄬ䈥㝧儰卒╦異汢捩縺ⰳ┱乤䡌瀥扵楬㩣㥾ㄬ㘥㉭歰㤸癏䝁瀥扵楬㩣㕾ㄬ䐥奮塱橷瀥扵楬㩣ㅾⰴ┱坹瀥扵楬㩣㑾ㄬ┥異汢捩縺ㄱㄬ漥嘠㑨娳≡㬊㬠晀誨귩螤뿤ꆇ誸帥閳飦꒭럥誸ꗧ庞椥鶿ꇨ閳ꋨ庫ꗧ閳渥⁤渾幵㸲ㄦ☦╆꿯钯돘閮韢늭┥뫯庖韢�늭껯�▪潞⁲氯┠挥椠⸨䐩䀨╥꿯庤껯붷韢骮뫯▼╞뫯붷韢庯귯ꮭ껯▱╣뫯�놮韢�钯╞潨䄠늭믯ꮭ뫯骮믯庁䈥꾗菙꫘閮믯ꊮ伥膻菙꫘隺韢꾗䈥幕⁓䉏商䍓⠥諢쾙馊⠩諢庙觏諢⦙閗胢閗뺃邌離徠離⦠菣뺃邌離徠離⦠菣⢎韢뾀韢⦕┥閗胢閗貔
닠徠닠⦠铢⢘韢뾀韢⦕閗胢閗뺃邌離徠離庠躃铢⢌ꂲꂲ颔䄥幔佉뺃邌離徠離⦠菣貔
닠庠ꂲ颔閗胢閗⠩諢쾙馊뺃邌離徠離⦠菣⢎韢뾀韢⦕严簩䁼╥韢隺뫯庹뫯꾗뫯▹╞韢�ꊮ뫯膻�▪╸귯붷�隺귯钯椥ੴ䀻䀻讅觨랾믧㪴まㄬ┥藥뺉뻥뒻縺㔵ㄬ┥藥뺉뻥뒻縺㐴ㄬ┥藥뺉뻥뒻縺㘱ㄬ‥莟듨뾥飩▿藥뺉뻥뒻縺㐱ㄬ┥藥뺉뻥뒻縺㈱ㄬ┥藥뺉뻥뒻縺ㄴㄬ┥藥뺉뻥뒻縺ⰰ┱讅觨랾믧㪴ㅾⰴ┱讅觨랾믧㪴㍾ⰹ┱讅觨랾믧㪴㍾ㄬ┥藥뺉뻥뒻縺㐲ㄬ┥藥뺉뻥뒻縺㤲ㄬ┥藥뺉뻥뒻縺㠲ㄬ┥藥뺉뻥뒻縺ⰶ┱讅觨랾믧㪴㙾ⰲ┱讅觨랾믧㪴㕾ⰹ┱讅觨랾믧㪴㕾ⰸ┱讅觨랾믧㪴㍾ⰶ┱讅觨랾믧㪴ㅾⰸ┱讅觨랾믧㪴ㅾⰷ┱讅觨랾믧㪴㉾ⰰ┱讅觨랾믧㪴ㅾⰳ┱讅觨랾믧㪴ㅾⰰ┱讅觨랾믧㪴㙾ⰱ┱讅觨랾믧㪴㑾ⰵ┱讅觨랾믧㪴㑾ⰳ┱讅觨랾믧㪴㕾ⰲ┱讅觨랾믧㪴㉾ⰱ┱讅觨랾믧㪴㕾ⰴ┱讅觨랾믧㪴㑾ㄬ┥藥뺉뻥뒻縺〴ㄬ┥藥뺉뻥뒻縺㤱ㄬ┥藥뺉뻥뒻縺㌳ㄬ┥藥뺉뻥뒻縺㐳ㄬ┥藥뺉뻥뒻縺㠴ㄬ┥藥뺉뻥뒻縺〳ㄬ┥藥뺉뻥뒻縺㜲ㄬ┥藥뺉뻥뒻縺ⰸ┱讅觨랾믧㪴㥾ㄬ┥藥뺉뻥뒻縺㔲ㄬ┥藥뺉뻥뒻縺〵ㄬ┥藥뺉뻥뒻縺ⰲ┱讅觨랾믧㪴㝾ㄬ┥藥뺉뻥뒻縺ㄵㄬ┥藥뺉뻥뒻縺㈴ㄬ┥藥뺉뻥뒻縺㈳ㄬ┥藥뺉뻥뒻縺〶ㄬ┥藥뺉뻥뒻縺ⰱ┱讅觨랾믧㪴㍾ⰷ┱讅觨랾믧㪴㍾ⰵ┱讅觨랾믧㪴㑾ⰷ┱讅觨랾믧㪴㑾ⰴ┱讅觨랾믧㪴㉾ⰲ┱讅觨랾믧㪴㑾ⰹ┱讅觨랾믧㪴㍾ⰱ┱讅觨랾믧㪴ㅾⰵ┱讅觨랾믧㪴㕾ⰶ┱讅觨랾믧㪴ㅾⰱ┱讅觨랾믧㪴㙾ⰳ┱讅觨랾믧㪴㑾ⰶ┱讅觨랾믧㪴ㅾⰶ┱讅觨랾믧㪴㕾ⰷ┱讅觨랾믧㪴㙾ⰴ┱讅觨랾믧㪴㕾ⰵ┱讅觨랾믧㪴㉾ⰶ┱讅觨랾믧㪴㉾ⰳ┱讅觨랾믧㪴㍾ⰸ┱讅觨랾믧㪴㕾ㄬ┥藥뺉뻥뒻縺㌵ㄬ∥䀊╳뫯릺��钯韢▯敞릺膻껯骮껯꾗琥⼠⁡胢⮎ㄽ㸠幮汵☠幦隺껯붷껯庢돘뫯▹�릺꿯应韢릺뫯▹副⼠┥⁩湉⠠ⰱⰱ⤱搠幦隺껯붷껯庢돘뫯▹�릺꿯应韢릺뫯▹副┠愥䤠
╬귨꒭돦底ꓨꆄꋨ▫楩楬汩幩╬뿤ꆄ꾘臦誸蓧□鞭髧庄ꗧ閳ꇨ鞭氥⁩╟铢⢌ꂲ幟닠⦠铢⢘諢쾙馊⠩諢쾙馊뺃邌離徠離⦠菣⢎韢뾀韢⦕閗胢閗┩慟畞⠥諢쾙馊⠩韢뾀韢⦕菣⢾賢ꂖꂖ躃閗胢閗⠩韢뾀韢⦕菣⢾賢ꂖꂖ躃╞桴牯╟閗胢閗⥞馊觏諢⦙菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃馊觏諢⦙铢⢌ꂲꂲ颔弥张束瑩畨╞韢�庳껯꾗껯놮戥ꮭ껯꾗껯붷럯庽弥�隺뫯ꊮ�隺弥搩幩⁆潮뺃邌離徠離⦠菣뺃邌離徠離⦠菣⢎韢底胢閗貔
닠徠닠⦠铢貔
닠徠닠⦠铢⢘韢뾀韢⦕帥貔
닠徠닠⦠铢⢘韢뾀韢⦕閗胢閗貔
닠徠닠⦠铢⢘諢쾙庉諢⦙閗胢閗┩⁴敤붷뫯�놮꾗韢▯��钯껯늭隺春╩돘菙뫯隺믯膻╞湞摥┠愥攠╸뫯놮閮꿯릺돘椥隺菙귯庫돘귯붷┥韢庯돘껯ꊮ럯ꊮ帥ੴ䀻䀻╀鿥鶴ꗩ뾘縺ⰲ┱莟듨뾥飩㪿㕾ⰹ┱莟듨뾥飩㪿㑾ⰷ┱莟듨뾥飩㪿㕾ⰶ┱∠雦뺉믧鶴莟듨뾥飩㪿㍾ㄬ┥鿥鶴ꗩ뾘縺ⰲ┱莟듨뾥飩㪿㑾ⰰ┱莟듨뾥飩㪿㑾ⰸ┱莟듨뾥飩㪿㥾ㄬ┥鿥鶴ꗩ뾘縺㈲ㄬ┥鿥鶴ꗩ뾘縺ⰸ┱莟듨뾥飩㪿㙾ⰲ┱莟듨뾥飩㪿㑾ⰲ┱莟듨뾥飩㪿㍾ㄬ┥鿥鶴ꗩ뾘縺ⰰ┱莟듨뾥飩㪿㕾ⰶ┱莟듨뾥飩㪿㍾ⰶ┱莟듨뾥飩㪿㍾ⰲ┱莟듨뾥飩㪿㑾ⰴ┱莟듨뾥飩㪿㉾ⰵ┱莟듨뾥飩㪿㉾ⰱ┱莟듨뾥飩㪿ㅾⰱ┱莟듨뾥飩㪿㉾ⰸ┱莟듨뾥飩㪿ㅾⰸ┱莟듨뾥飩㪿㙾ⰱ┱莟듨뾥飩㪿㍾ⰷ┱莟듨뾥飩㪿㍾ⰰ┱莟듨뾥飩㪿㍾ⰹ┱莟듨뾥飩㪿㕾ⰲ┱莟듨뾥飩㪿ㅾⰵ┱莟듨뾥飩㪿㕾ㄬ┥鿥鶴ꗩ뾘縺㘲ㄬ┥鿥鶴ꗩ뾘縺㌴ㄬ┥鿥鶴ꗩ뾘縺㤴ㄬ┥鿥鶴ꗩ뾘縺㐳ㄬ┥鿥鶴ꗩ뾘縺㈱ㄬ┥鿥鶴ꗩ뾘縺ⰶ┱莟듨뾥飩㪿㉾ⰷ┱莟듨뾥飩㪿ㅾⰰ┱莟듨뾥飩㪿㑾ⰱ┱莟듨뾥飩㪿㙾ⰰ┱莟듨뾥飩㪿㑾ⰷ┱莟듨뾥飩㪿㍾ⰵ┱莟듨뾥飩㪿㕾ⰹ┱莟듨뾥飩㪿㕾ⰷ┱莟듨뾥飩㪿㕾ⰳ┱莟듨뾥飩㪿㉾ⰳ┱莟듨뾥飩㪿㕾ⰰ┱莟듨뾥飩㪿㉾ⰴ┱莟듨뾥飩㪿ㅾⰹ┱莟듨뾥飩㪿ㅾⰴ┱莟듨뾥飩㪿㑾ㄬ┥鿥鶴ꗩ뾘縺㤲ㄬ┥鿥鶴ꗩ뾘縺㠳ㄬ┥鿥鶴ꗩ뾘縺㐶ㄬ┥鿥鶴ꗩ뾘縺ⰷ┱莟듨뾥飩㪿㕾ⰱ┱莟듨뾥飩㪿ㅾⰷ┱莟듨뾥飩㪿㉾ⰰ┱莟듨뾥飩㪿㍾ⰳ┱莟듨뾥飩㪿㑾ⰵ┱莟듨뾥飩㪿ㅾⰶ┱莟듨뾥飩㪿ㅾㄬ┥鿥鶴ꗩ뾘縺㘴ㄬ┥鿥鶴ꗩ뾘縺㌶ㄬ┥鿥鶴ꗩ뾘縺㌱ㄬ┥鿥鶴ꗩ뾘縺㔵ㄬ┥鿥鶴ꗩ뾘縺㠵ㄬ┥鿥鶴ꗩ뾘縺㐵ㄬ┥鿥鶴ꗩ뾘縺ㄳㄬ∥㬊㬠獀╥馊觏諢⦙閗胢閗뺃邌離徠離⦠菣⢎韢뾀韢底뺃邌離徠離⦠菣⢎韢뾀韢⦕┥菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔閗胢庿韢⦕閗胢閗뺃邌離徠離⦠菣貔
닠徠닠⦠铢▘瑞⼠⁡胢⮎ㄽ㸠幮䱕☠╆꿯ꊮ�꒯껯隺帥놮껯늭隺꫘껯▢剏┠愥椠⁎
平╥雦庇ꓨꆇ뫤颧꣨▊랭颧蟥랭돦颧琥朠늭꿯�庳럯�隺帥瑯�隺菙꫘껯底돘┥귯꾗껯膻膻꿯▤捥╨귯庲뫯꒯껯�閮┥믯骮껯隺껯庱럯▽╞菙믯�閮膻뫯▹╰껯�庳껯閮껯ꊮ帥畡늭꫘韢벺놮돘猥붷韢隺꿯늭꒯攥⤠潤䀠楦摎뺃邌離徠離⦠菣貔
닠徠닠⦠颔菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔馊觏諢⦙猥⠥諢쾙馊⠩韢뾀韢⦕帨諢쾙馊⠩韢뾀韢⦕菣⢾賢ꂖꂖ躃閗胢閗┩╴閗胢閗⠩韢뾀閗⠩諢쾙馊貔
닠徠닠⦠铢貔
닠徠닠⦠铢貔
닠徠닠⦠铢▘牞⼠⁌䤯┠愥┠䥬汉楩楬汬╩☦╥铢⢌ꂲ彞닠⦠铢⢘諢쾙馊⠩諢쾙馊⠩韢뾀韢⦕铢⢌ꂲꂲ颔馊觏諢⦙砥╞铢⢌ꂲꂲ颔馊觏諢⦙馊觏諢⦙铢⢌ꂲꂲ颔馊觏諢⦙菣⢾賢庐離徠離⦠菣▎╩閗胢閗⥞馊觏諢⦙铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃琥䀊╀雦뺉믧鶴縺ⰰ┱꾖觨뒻듨㪝㍾ⰸ┱꾖觨뒻듨㪝㍾ⰶ┱꾖觨뒻듨㪝ㅾⰰ┱∠飩钰雦鶴꾖觨뒻듨㪝㡾ㄬ┥雦뺉믧鶴縺㐲ㄬ┥雦뺉믧鶴縺㘴ㄬ┥雦뺉믧鶴縺ⰱ┱꾖觨뒻듨㪝ㅾⰴ┱꾖觨뒻듨㪝ㅾⰶ┱꾖觨뒻듨㪝㑾ⰲ┱꾖觨뒻듨㪝㑾ⰱ┱꾖觨뒻듨㪝㉾ⰷ┱꾖觨뒻듨㪝㑾ⰴ┱꾖觨뒻듨㪝㍾ⰴ┱꾖觨뒻듨㪝㕾ⰶ┱꾖觨뒻듨㪝ㅾⰲ┱꾖觨뒻듨㪝㉾ⰶ┱꾖觨뒻듨㪝㉾ⰲ┱꾖觨뒻듨㪝㕾ⰵ┱꾖觨뒻듨㪝㕾ㄬ┥雦뺉믧鶴縺㔳ㄬ┥雦뺉믧鶴縺㐵ㄬ┥雦뺉믧鶴縺ㄳㄬ┥雦뺉믧鶴縺ⰹ┱꾖觨뒻듨㪝㑾ⰷ┱꾖觨뒻듨㪝㙾ⰰ┱꾖觨뒻듨㪝㕾ⰱ┱꾖觨뒻듨㪝㑾ⰰ┱꾖觨뒻듨㪝㍾ⰲ┱꾖觨뒻듨㪝ㅾⰹ┱꾖觨뒻듨㪝㍾ⰳ┱꾖觨뒻듨㪝㡾ㄬ┥雦뺉믧鶴縺㔴ㄬ┥雦뺉믧鶴縺㔲ㄬ┥雦뺉믧鶴縺㌱ㄬ┥雦뺉믧鶴縺㠴ㄬ┥雦뺉믧鶴縺ⰴ┱꾖觨뒻듨㪝㍾ⰶ┱꾖觨뒻듨㪝㕾ⰰ┱꾖觨뒻듨㪝㕾ⰹ┱꾖觨뒻듨㪝㉾ⰰ┱꾖觨뒻듨㪝㍾ⰸ┱꾖觨뒻듨㪝㝾ㄬ┥雦뺉믧鶴縺㈶ㄬ┥雦뺉믧鶴縺㈵ㄬ┥雦뺉믧鶴縺㌵ㄬ┥雦뺉믧鶴縺〱ㄬ┥雦뺉믧鶴縺ㄶㄬ┥雦뺉믧鶴縺ⰳ┱꾖觨뒻듨㪝㑾ⰹ┱꾖觨뒻듨㪝㍾ⰹ┱꾖觨뒻듨㪝㙾ⰴ┱꾖觨뒻듨㪝㉾ⰸ┱꾖觨뒻듨㪝㕾ⰸ┱꾖觨뒻듨㪝ㅾⰱ┱꾖觨뒻듨㪝㍾ⰷ┱꾖觨뒻듨㪝ㅾⰷ┱꾖觨뒻듨㪝㍾ⰰ┱꾖觨뒻듨㪝㙾ㄬ┥雦뺉믧鶴縺ⰲ┱꾖觨뒻듨㪝㉾ⰳ┱꾖觨뒻듨㪝㉾ⰱ┱꾖觨뒻듨㪝ㅾⰵ┱꾖觨뒻듨㪝まㄬ┥雦뺉믧鶴縺㤲ㄬ┥雦뺉믧鶴縺㌶ㄬ┥雦뺉믧鶴縺㠱ㄬ┥雦뺉믧鶴縺㜵ㄬ┥雦뺉믧鶴縺㌴ㄬ∥䀊╳껯��릺꿯꾗╞幥릺隺돘귯钯韢▯⁴㵢‱渾幵㸲ㄦ☠椠晞渠螖髧鶿벲룤財漥蒚誸ꇨ財ꗧ꾘帥⁴╤菣⢾賢ꂖꂖ躃馊觏諢⦙馊觏諢⦙閗胢閗뺃⡞賢ꂖꂖ躃菣⢾賢ꂖꂖ躃攥⠥韢뾀韢⦕铢⢌ꂲꂲ颔閗胢閗⠩諢쾙馊⥞馊觏諢⦙馊觏諢⦙春乩貔
닠徠닠⦠铢庘铢⢌ꂲꂲ颔閗胢閗⠩諢쾙馊⠩諢쾙馊⠩諢쾙馊┩幥⁤⁢䀨╥귥店胩ꮢ蟥ꆇ단▼捞벲벲돦ꮢ胩ꆄ栥誨蓧庡胩鶿꣨랭漥㴠♄灀钭胩ꆇꋨ馀늷愥獵벲귩鞭ꏨ螤ꓨ庇┥飦鞭귨閳ꇨ庌꣨▊敞䀦╥菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔馊콞馊┩⠥諢쾙馊貔⡞ꂲꂲ颔閗胢閗貔
닠徠닠⦠铢貔
닠徠닠⦠铢⢘韢뾀韢⦕砥貔
닠徠닠⦠颔菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔馊觏諢⦙閗胢閗┩楞⥴㬊㭀╀飩钰雦鶴縺㤵ㄬ┥飩钰雦鶴縺㜳ㄬ┥飩钰雦鶴縺㌳ㄬ┥飩钰雦鶴縺㈴ㄬ‥늉鿥늉飩▿飩钰雦鶴縺㜲ㄬ┥飩钰雦鶴縺㐱ㄬ┥飩钰雦鶴縺㔱ㄬ┥飩钰雦鶴縺㌵ㄬ┥飩钰雦鶴縺㌶ㄬ┥飩钰雦鶴縺㤱ㄬ┥飩钰雦鶴縺ⰴ┱뾘냥꾖듨㪝㑾ⰹ┱뾘냥꾖듨㪝㥾ㄬ┥飩钰雦鶴縺㘴ㄬ┥飩钰雦鶴縺㠵ㄬ┥飩钰雦鶴縺㔴ㄬ┥飩钰雦鶴縺㜱ㄬ┥飩钰雦鶴縺㘳ㄬ┥飩钰雦鶴縺ⰳ┱뾘냥꾖듨㪝㉾ⰳ┱뾘냥꾖듨㪝㉾ⰷ┱뾘냥꾖듨㪝ㅾⰳ┱뾘냥꾖듨㪝㑾ⰰ┱뾘냥꾖듨㪝ㅾⰲ┱뾘냥꾖듨㪝㕾ⰶ┱뾘냥꾖듨㪝㉾ⰴ┱뾘냥꾖듨㪝㕾ⰰ┱뾘냥꾖듨㪝㉾ⰰ┱뾘냥꾖듨㪝㉾ㄬ┥飩钰雦鶴縺㜵ㄬ┥飩钰雦鶴縺㠳ㄬ┥飩钰雦鶴縺ㄱㄬ┥飩钰雦鶴縺㌴ㄬ┥飩钰雦鶴縺ⰷ┱뾘냥꾖듨㪝㍾ⰱ┱뾘냥꾖듨㪝㙾ⰴ┱뾘냥꾖듨㪝㍾ⰲ┱뾘냥꾖듨㪝㑾ⰱ┱뾘냥꾖듨㪝ㅾⰰ┱뾘냥꾖듨㪝㙾ⰰ┱뾘냥꾖듨㪝㉾ⰸ┱뾘냥꾖듨㪝㑾ⰷ┱뾘냥꾖듨㪝㍾ⰷ┱뾘냥꾖듨㪝㕾ⰹ┱뾘냥꾖듨㪝㕾ㄬ┥飩钰雦鶴縺㘱ㄬ┥飩钰雦鶴縺㠴ㄬ┥飩钰雦鶴縺ㄲㄬ┥飩钰雦鶴縺㠱ㄬ┥飩钰雦鶴縺ㄶㄬ┥飩钰雦鶴縺㘲ㄬ┥飩钰雦鶴縺ⰶ┱뾘냥꾖듨㪝㕾ⰵ┱뾘냥꾖듨㪝㉾ⰹ┱뾘냥꾖듨㪝まㄬ┥飩钰雦鶴縺ⰸ┱뾘냥꾖듨㪝㕾ⰴ┱뾘냥꾖듨㪝㍾ⰰ┱뾘냥꾖듨㪝㍾ⰵ┱뾘냥꾖듨㪝㑾ⰴ┱뾘냥꾖듨㪝ㅾㄬ┥飩钰雦鶴縺㈲ㄬ┥飩钰雦鶴縺㔲ㄬ┥飩钰雦鶴縺ㄵㄬ┥飩钰雦鶴縺㈵ㄬ┥飩钰雦鶴縺㤳ㄬ┥飩钰雦鶴縺㈴ㄬ┥飩钰雦鶴縺㈶ㄬ┥飩钰雦鶴縺㐳ㄬ┥飩钰雦鶴縺㌳ㄬ∥㬊㭀晀╩꣨붣飦馀귥誸╞閳귦誸럥螖벲帥閳뫤꾁雦钭ꆇ渥⁤渾畞⁌㸲ㄦ☦╦馊觏諢⦙铢⢌帠닠徠닠⦠铢貔
닠徠닠⦠铢뺃邌離徠離⦠菣貔
닠徠닠⦠铢貔
닠徠닠⦠铢▘幏貔
닠徠닠⦠铢⢘韢뾀韢⦕閗胢閗貔
닠徠닠⦠铢⢘諢쾙馊⥞菣⢾賢ꂖꂖ躃爥⼠┥⁣湉⠠⤮潤⠠敀╞菣⢾賢ꂖꂖ躃馊觏諢⦙铢⢌ꂲꂲ帩铢⢘韢뾀韢⦕铢⢌ꂲꂲ颔铢⢌ꂲꂲ颔┥菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔閗胢閗⠩諢쾙馊貔
닠徠닠⦠铢庘┥菣⢾賢ꂖꂖ躃뺃邌離徠離⦠菣⢎諢쾙馊⠩諢쾙馊뺃邌離徠離⦠菣뺃邌離徠離⦠菣▎档䉁誸ꓨ馀鶿뫤ꮢ伥閳돦꾘단蒚럥庲䈥╞뫤庺雦ꮢ蟥馀귨▷单传䙂单䅃벺럯�広껯钯귯▲ꊮ뫯벺믯隺韢庯┥뫯钯껯놮껯庱菙吥佉乞簩䁼╥ꋨ閳단벲ꏨ庽꟧▘ꆄ臦꒭ꇨ螖늷帥╸雦ꆇ귦몺ꏨ꾁╞瑩㬊䁀幉⁦躀‥╎菙귯膻껯庢뫯�△╞韢钯꫘껯閮늭䔥⁑′╥ꋨ붣럥庲꟧꒭ꇨ▌╸귦庤ꓨ늷蟥꾘ꗧ▞楞꾁ꏨꆄ돦랭벲琥㬊㬠䁀捥颧뿤鶿ꓨ붣誸┥귨钭ꗧ庞ꇨ誨蟥□╞飦財귩应ꗧ誨꣨▊潨琾灭昦幯貔
닠徠닠⦠铢⢘韢뾀韢⦕閗胢閗⠩韢뾀韢⦕铢⢌ꂲꂲ颔铢⢌帠닠徠닠⦠铢▘貔
닠徠닠⦠铢뺃邌離徠離⦠菣⢎韢뾀韢⦕铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃菣庾邌離徠離⦠菣▎⁒是∠潴敫獮㌽•┥⁩乩⠠琧⠥諢쾙馊⠩諢쾙馊帩菣⢾賢ꂖꂖ躃菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃┥馊觏諢⦙菣⢾賢ꂖꂖ躃铢⢌ꂲꂲ颔菣⢾賢ꂖꂖ躃뺃邌離徠離⦠菣⢎韢뾀韢⦕礥幰貔
닠徠닠⦠铢⢘諢쾙馊⠩韢뾀韢⦕馊觏諢⦙閗胢閗⥞菣⢾賢ꂖꂖ躃攥琠灭⤧潤椠⁆┢椥•充랭ꗧ螖ꋨ庫꟧붣帥誸胩벲귥꒭꟧庘唥∠湯∮⠠╥돦底꟧螖ꋨ몺髧▄랭飦閳飦蒚ꓨ庇砥몺돦鞭閳럥벲帥瑩
汥敳⠠╤閗胢閗뺃帨賢ꂖꂖ躃馊觏諢⦙菣⢾賢ꂖꂖ躃馊觏諢⦙铢⢌ꂲꂲ颔攥뺃邌離徠離⦠菣貔
닠徠닠⦠铢貔
닠徠닠⦠铢뺃邌離徠離⦠菣⢎諢庙觏諢⦙馊觏諢⦙帥是焯琠灭਩晀╯럯릺뫯ꊮ껯底뫯▼╞껯底꿯�閮럯꾗爥⼠┥⁹湩⠠ⰱⰱ⤱搠꾖觨뒻듨㪝まㄬ┥飩钰雦鶴縺㌳ㄬ┥雦뺉믧鶴縺ⰴ┱讅觨랾믧㪴㙾ⰰ┱讅觨랾믧㪴㕾ⰷ┱꾖觨뒻듨㪝㍾ⰰ┱꾖觨뒻듨㪝㍾ⰹ┱늉鿥늉飩㪿㑾ⰰ┱莟듨뾥飩㪿㙾ⰰ┱㬊楀⁆ㄳ䔠║룤颧髧颧ꏨ庽ꋨ▫╞臦庯뫤誨뫤麥雦▇⁕‰䀨硥瑩
汥敳┠雦뺉믧鶴縺㘳ㄬ┥觨莟觨뾘縺ㄳㄬ┥鿥鶴ꗩ뾘縺㈴ㄬ┥飩钰雦鶴縺㘴ㄬ┥藥뺉뻥뒻縺㠵ㄬ┥鿥鶴ꗩ뾘縺㈴ㄬ┥藥뺉뻥뒻縺㐴ㄬ┥飩钰雦鶴縺㤲ㄬ┥鿥鶴ꗩ뾘縺ⰵ┱늉鿥늉飩㪿㡾ㄬ┥鿥鶴ꗩ뾘縺㈱ㄬ┥鿥鶴ꗩ뾘縺㘳ㄬ┥鿥鶴ꗩ뾘縺㜵ㄬ┥雦뺉믧鶴縺㔴ㄬ┥藥뺉뻥뒻縺ⰳ┱莟듨뾥飩㪿㡾ㄬਥ䀻䀻䙀╞飦ꮢ麥胩꾘ꇨ▌ꆄꓨ誨蟥庡뫤財漥⁲氯┠礥椠ㄨㄬㄬ
佤┠鿥鶴ꗩ뾘縺㌱ㄬ┥雦뺉믧鶴縺㈶ㄬ┥飩钰雦鶴縺㔳ㄬ┥雦뺉믧鶴縺㠳ㄬ┥飩钰雦鶴縺㌳ㄬਥਊ 59 | ``` 60 | 61 | ## How it works? 62 | 63 | Abobus has 10 layers of obfuscation: 64 | 65 | 1. Addition random symbols and chunks in code. 66 | 2. Addition of commands, that protects code from deobfusction. -------------------------------------------------------------------------------- /AbobusObf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from os import system 4 | from os.path import isfile 5 | from random import shuffle, choice, randint 6 | 7 | logo = ''' 8 | █████ ██████ ██████ ██████ ██ ██ ███████ 9 | ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ 10 | ███████ ██████ ██ ██ ██ ██████ ██ ██ ███████ v2 11 | ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ 12 | ██ ██ ██████ ██████ ██████ ██████ ███████ 13 | ''' 14 | 15 | #################################### 16 | # settings: # 17 | class status: 18 | random_at = True 19 | random_semicolon = True 20 | random_space = False #possible crashes 21 | random_if = True 22 | code_obfuscation = True 23 | random_newline = False #possible crashes 24 | cleaning_comments = True 25 | lower_upper_character = True 26 | function_name_obfuscation = False #this can break the argument system 27 | china_symbol = True 28 | #################################### 29 | 30 | 31 | def random_at(content: str) -> str: 32 | content = content.split('\n') 33 | result = '' 34 | for line in content: 35 | if len(line) > 1 and not line.startswith(' ') and not line.startswith('\t') and not line.startswith('@') and not line.startswith(')') and not line.startswith(';SE^T'): 36 | if randint(0, 10) < 6 and line[0] != ':': 37 | line = '@@' + line 38 | else: 39 | line = '@' + line 40 | result += line + '\n' 41 | return result 42 | 43 | def random_semicolon(content: str) -> str: 44 | content = content.split('\n') 45 | result = '' 46 | for line in content: 47 | if len(line) > 1 and line[0] != ' ' and line[0] != ')' and ':A' not in line and ';SE^T' not in line: 48 | if randint(0,1) == 1: 49 | if randint(0, 10) >= 8 and line[0] != ':' and '@:' not in line: 50 | line = '; ;' + line 51 | elif randint(0, 10) >= 6 and line[0] != ':' and '@:' not in line: 52 | line = ';@;' + line 53 | elif line[0] != ':' and '@:' not in line: 54 | line = ';' + line 55 | result += line + '\n' 56 | return result 57 | 58 | def anti_detect(content: str) -> str: 59 | obf1 = list('ﭲسﺖﮚﮱﮕﯔتﮢﯤﺼكﻁﺹﭫ﷽◯') 60 | obf2 = ['ヾ(⌐■_■)ノ', '(◕‿◕)', '(⊙ω⊙)', '┌( ಠ_ಠ)┘'] 61 | obf3 = list('此訊息已被神秘魔法保護凡人是無法複製貼上這行文字的') 62 | result = list(content) 63 | result.insert(randint(1, len(result) - 1), '^') 64 | rand = randint(1,3) 65 | for _ in range(2 if len(result) < 5 else 3): 66 | if rand == 1: 67 | result.insert(randint(1, len(result) - 1), "%" + easy_anti_detect(''.join([str(choice(obf1)) for _ in range(6)]) + "%")) 68 | elif rand == 2: 69 | result.insert(randint(1, len(result) - 1), "%" + easy_anti_detect(''.join([str(choice(obf2)) for _ in range(6)]) + "%")) 70 | elif rand == 3: 71 | result.insert(randint(1, len(result) - 1), "%" + easy_anti_detect(''.join([str(choice(obf3)) for _ in range(6)]) + "%")) 72 | result = ''.join(result) 73 | return result 74 | 75 | def easy_anti_detect(content: str) -> str: 76 | word = list(content) 77 | word.insert(randint(1, len(word)-1), '^') 78 | return ''.join(word) 79 | 80 | def substring_generation() -> dict: 81 | alphabet = list("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ @=") 82 | virable_name = list("阿贝色德饿艾豆贝尔维埃克斯爱耻") 83 | subsrtings = {} 84 | for _ in range(5): 85 | shuffle(alphabet) 86 | subsrtings["".join(choice(virable_name) for _ in range(4))] = "".join(alphabet) 87 | return subsrtings 88 | 89 | def substring_obfuscation(subsrtings: dict) -> list: 90 | obf_substrings = [] 91 | i = 0 92 | alphabet = ['C', '\\\\', '\\\\', 'U', 's', 'e', 'r', 's', '\\\\', 'P', 'u', 'b', 'l', 'i', 'c'] 93 | for key, source in subsrtings.items(): 94 | if i != 1: 95 | previous_key = key 96 | previous_source = source 97 | first_source = '' 98 | for a in f'set "{key}={previous_source}"': 99 | if a in alphabet: 100 | first_source += f'%public:~{alphabet.index(a)},1%' 101 | else: 102 | first_source += a 103 | obf_substrings.append(first_source) 104 | i += 1 105 | continue 106 | result = '' 107 | for a in source: 108 | result += f'%{previous_key}:~{previous_source.find(a)},1%' 109 | set_ = '' 110 | for a in "@set": 111 | set_ += f'%{previous_key}:~{previous_source.find(a)},1%' 112 | equal = f'%{previous_key}:~{previous_source.find("=")},1%' 113 | 114 | obf_substrings.append(f'{set_} "{key}{equal}{result}"') 115 | previous_key, previous_source = key, source 116 | return obf_substrings 117 | 118 | def code_obfuscation(content: str, subsrtings: dict) -> str: 119 | keys = [] 120 | values = [] 121 | result = [] 122 | for i in subsrtings.values(): values.append(i) 123 | for i in subsrtings.keys(): keys.append(i) 124 | content = content.split('\n') 125 | for _a in range(len(content)): 126 | temp_content = content[_a] 127 | if temp_content != '': 128 | if temp_content.startswith(':'): 129 | result.append(temp_content) 130 | else: 131 | temp_result = '' 132 | status = False 133 | for i in temp_content: 134 | if status == False and i == '%' or i == '!': 135 | status = True 136 | temp_result += '%' if i == '%' else '!' 137 | continue 138 | if status == True and i == '%' or i == '!': 139 | status = False 140 | score = randint(0, len(values)-1) 141 | value = values[score] 142 | if i in value and status == False: 143 | temp_result += f'%{keys[score]}:~{value.find(i)},1%' 144 | else: 145 | temp_result += i 146 | result.append(temp_result) 147 | return '\n'.join(result) 148 | 149 | def random_newline(content: str) -> str: 150 | content = content.split('\n') 151 | for i in range(5): 152 | content.insert(randint(0,len(content)), ''.join('\n' * randint(1,10))) 153 | return '\n'.join(i for i in content) 154 | 155 | def random_space(content: str) -> str: 156 | content = content.split('\n') 157 | result = '' 158 | for i in content: 159 | if not ':' in i[:5]: 160 | result += f"{' ' * randint(70,300)} {i}\n" 161 | else: 162 | result += i+'\n' 163 | return result 164 | 165 | def lower_upper_character(content: str, antidetect: bool) -> str: 166 | result = '' 167 | for a in content: 168 | result += a.upper() if randint(1,3) == 1 else a 169 | return result if antidetect == False else easy_anti_detect(result) 170 | 171 | def random_if(content :str, name_file :str) -> str: 172 | content = content.split('\n') 173 | random_ifs = [f'if {randint(1,50)} EQU 0 (@exit) else ', f'if 1 EQU 1 ', f'if {randint(0,100)} LsS {randint(101,150)} ', 174 | f'if {anti_detect("exist")} %{name_file}% ', f'for /l %%y in ({"1 1 1" if randint(1,2) == 1 else "1,1,1"}) do '] 175 | result = [] 176 | for i in range(len(content)): 177 | cont = content[i] 178 | if cont.startswith('(') or cont.startswith(')') or cont.startswith(':'): 179 | result.append(cont) 180 | else: 181 | result.append(choice(random_ifs) + cont) 182 | return '\n'.join(result) 183 | 184 | def function_name_obfuscation(content :str) -> str: 185 | obf = ["i", "l"] 186 | result = [] 187 | content = content.split('\n') 188 | for line in content: 189 | if len(line) > 1 and line[0] == ':': 190 | if len(line[1:]) != 1: 191 | result.append(f':{easy_anti_detect(line[1:])} {anti_detect("".join([str(choice(obf)) for _ in range(11)]))} {anti_detect("".join([str(choice(obf)) for _ in range(11)]))}') 192 | else: 193 | result.append(f':{line[1:]} {anti_detect("".join([str(choice(obf)) for _ in range(11)]))} {anti_detect("".join([str(choice(obf)) for _ in range(11)]))}') 194 | else: 195 | result.append(line) 196 | return '\n'.join(result) 197 | 198 | def cleaning_comments(content :str) -> str: 199 | content = content.split('\n') 200 | result = [] 201 | for i in range(len(content)): 202 | cont = content[i] 203 | if not cont.lower().startswith('::') or not cont.lower().startswith('rem'): 204 | result.append(cont) 205 | return '\n'.join(result) 206 | 207 | def password_generate(lengt: int) -> str: 208 | #all these 3 characters are completely different 209 | сhar = ["o", "ο", "о"] 210 | return ''.join(choice(сhar) for i in range(lengt)) 211 | 212 | 213 | def main() -> None: 214 | print(logo) 215 | file = input(r'Drag your Batch file: ').replace('\\', '/').replace('"', '') # this replacement to work correctly with the file 216 | if not isfile(file): 217 | print("This file does not exist!") 218 | 219 | subsrtings = substring_generation() 220 | obf_substrings = substring_obfuscation(subsrtings) 221 | 222 | content = open(file, 'rb').read().decode("utf-8") 223 | 224 | #clearing empty cells in a list 225 | content = content.split('\r\n') 226 | content = list(filter(None, content)) 227 | content = '\n'.join(content) 228 | 229 | name_file = ''.join([str(choice(["i", "l"])) for _ in range(11)]) 230 | 231 | if status.cleaning_comments == True: 232 | content = cleaning_comments(content) 233 | 234 | if status.code_obfuscation == True: 235 | content = code_obfuscation(content, subsrtings) 236 | 237 | if status.random_if == True: 238 | content = random_if(content, name_file) 239 | if status.function_name_obfuscation == True: 240 | content = function_name_obfuscation(content) 241 | 242 | password = password_generate(lengt=5) 243 | defense = f'''(@{anti_detect('chcp.com')} {easy_anti_detect('437')})>nul&@{anti_detect('echo')} {anti_detect('off')}&{anti_detect('cls')}&&{anti_detect('set')} {anti_detect(name_file)}=%0&{anti_detect('set')} 𝧽= c''' 244 | # anti-logged system, it will not be possible to log the script. Logging example: script-obf.bat > 1.log 245 | #f'''@{anti_detect('echo')} {anti_detect('ABOBUS')} {anti_detect('OBFUSCATION')} {anti_detect('PROTECTION🛡')}&cls&if "%~1" EQU "{password}" (@{anti_detect('goto')} {anti_detect('ABOBUS')}-{anti_detect('OBFUSCATOR')}) else (@{anti_detect('start')} {easy_anti_detect('cmd')} /C "call %0 {password}")&{anti_detect('exit')}''' +\ 246 | 247 | defense += ''' 248 | :ABOBUS-OBFUSCATOR\n 249 | ;SE^T "__author__=EscaLag" 250 | ;SE^T "__github__=github.com/EscaLag/Abobus-obfuscator"\n\n''' 251 | 252 | protects = [ 253 | # echo trap, if you add "echo" at the beginning of this line, it spams and exits the script 254 | f'''@{anti_detect('find')} >nul 2>&1&&for /l %%c in (.)do (@{anti_detect('echo')} {anti_detect('ABOBUS')} {anti_detect('OBFUSCATION')})||@{anti_detect('exit')}''', 255 | f'''@{anti_detect('find')} >nul 2>&1&&for /l %%c in (.)do (@{anti_detect('echo')} {anti_detect('ABOBUS')} {anti_detect('OBFUSCATION')})||@{anti_detect('exit')}''', 256 | # checking for the existence of variables 257 | f'''@{anti_detect('set')} /a ‎+=1 >nul &for /l %%i in ({'1 1 1' if randint(1,2) == 1 else '1,1,1'}) do for %%a in ( {anti_detect(name_file)} {anti_detect('__author__')} {anti_detect('__github__')})do if {anti_detect('not')} {anti_detect('defined')} %%a {anti_detect('exit')}''', 258 | # checking the script for the existence of words from the black list 259 | f'''@{anti_detect('set')} /a ‎+=1 >nul &for %%a in ( {anti_detect('set')} {anti_detect('goto')} {anti_detect('echo')} {anti_detect('pause')} )do @{anti_detect('findstr')} /L /I %%a %{name_file}%&&{anti_detect('exit')}''', 260 | # one more echo trap 261 | f'''{anti_detect('set')} b=1 >nul 2>&1 & if {anti_detect('not')} {anti_detect('defined')} b (@{anti_detect('echo')} =D&@{anti_detect('pause')}&@{anti_detect("exit")})''', 262 | # check for echo status, if @echo on then exit the script 263 | f'''{anti_detect('echo')}>tmp&@for /f "tokens=3" %%i in ('{anti_detect("type")} tmp')do if "%%i" EQU "on." (@{anti_detect("exit")}) else (@{anti_detect("del")} /f/q tmp)''', 264 | ] 265 | shuffle(protects) 266 | protest = [] 267 | for i in range(len(protects) + len(obf_substrings)): 268 | try: 269 | protest.append(protects[i]) 270 | protest.append(obf_substrings[i]) 271 | except IndexError:pass 272 | # checking if all checks have been completed 273 | protest.append(f'if %‎% NEq 2 {anti_detect("exit")}') 274 | protest.append(f'''{anti_detect('echo')}>tmp&for /f "tokens=3" %%i in ('{anti_detect("type")} tmp')do if "%%i" EQU "on." ({anti_detect("exit")}) else ({anti_detect("del")} /f/q tmp)''') 275 | defense += '\n'.join(protest) + '\n' 276 | 277 | if status.china_symbol == True: 278 | # check for error level, utf-16 special bytes give an error to the console, if this error is not present, then the protection of china characters has been removed 279 | defense = f'{anti_detect("echo")} {anti_detect("off")}&for /l %%i in ({"1 1 1" if randint(1,2) == 1 else "1,1,1"})do (for /l %%i in ({"1 1 1" if randint(1,2) == 1 else "1,1,1"})do (if %errorlevel% EQU 0 {anti_detect("exit")}))\n' + defense 280 | content = '\n'.join(list(filter(None, content.split('\n')))) 281 | defense += content + '\n' 282 | result = defense 283 | 284 | if status.random_newline == True: 285 | result = random_newline(result) 286 | if status.lower_upper_character == True: 287 | temp = [] 288 | for line in result.split('\n'): 289 | line = line.replace('off', anti_detect(lower_upper_character('off', False))) 290 | line = line.replace('do ', lower_upper_character('do ', False)) 291 | line = line.replace('in', lower_upper_character('in', False)) 292 | line = line.replace('if', lower_upper_character('if', False if randint(0,1) == 1 else True)) 293 | line = line.replace('nul', lower_upper_character('nul', True)) 294 | line = line.replace('EQU', anti_detect(lower_upper_character('EQU', False))) 295 | line = line.replace('NEq', anti_detect(lower_upper_character('NEq', False))) 296 | line = line.replace('call', anti_detect(lower_upper_character('call ', True))) 297 | line = line.replace('echo', anti_detect(lower_upper_character('echo', True))) 298 | line = line.replace('public', lower_upper_character('public', False)) 299 | line = line.replace(name_file, lower_upper_character(name_file, False)) 300 | line = line.replace('errorlevel', lower_upper_character('errorlevel', False)) 301 | line = line.replace('for', anti_detect(lower_upper_character('for', False))) 302 | line = line.replace('set ', anti_detect(lower_upper_character('set ', False))) 303 | temp.append(line) 304 | result = '\n'.join(str(syn) for syn in temp) 305 | 306 | if status.random_at == True: 307 | result = random_at(result) 308 | if status.random_semicolon == True: 309 | result = random_semicolon(result) 310 | if status.random_space == True: 311 | result = random_space(result) 312 | 313 | 314 | name = file[:-4]+'-obf' 315 | with open(name+'.bat', 'w', encoding="utf-8", errors='ignore') as f: 316 | f.write(result) 317 | 318 | if status.china_symbol == True: 319 | utf16_bytes = ['FE', 'FE', 'FF'] 320 | shuffle(utf16_bytes) 321 | utf16_bytes.insert(0, 'FF') 322 | result = result.encode() 323 | with open(name+'.bat', 'wb') as f: 324 | f.write(bytes.fromhex("".join(utf16_bytes))+ b">nul 2>&1 &cls\n" + result) 325 | print('\nsuccessful!') 326 | try: 327 | system('pause >nul') 328 | except:pass 329 | 330 | if __name__ == '__main__': 331 | main() --------------------------------------------------------------------------------