Отображение символа пробела в файле

Я хочу сделать пакетный обфускатор без внешних инструментов, но у меня проблема с повторением пробелов в «запутанном» коде («запутанном», как при разделении кода буква за буквой между сотнями случайных символов). Я нашел пакетные обфускаторы, которые используются с CertUtil, но их можно деобфусцировать с помощью другого файла, поэтому я действительно хочу, чтобы это заработало, и я действительно не нашел каких-либо уникальных.

Когда я запускаю свой файл с входным файлом (содержит @echo off и echo test), я получаю запутанный код:

$zz$j?$z?$#z#?$z?$z###$j?j#zz?$?##j$?$?$#z$$#zjj#zzz?j#jzj#zjjzj?$#$jj?j##z##?#$$$#zjz?$zj#j$zz#jzj#@#$z#j#j#??##zj#z#j$?$jzjz?$j?$?##zzz#???z$$jzj#??###jz$?$j$z$?$?$?j$j?$jzzj#j#z$zz$jzz#z#$jz#?z?$$$?e$?$j?$##?#zjjjjz#j$$zjjz##$?jzjj?$##?##j$#z#zj?zzjzj$$j#$j$????$z#j#$?j?#j$$$$#jzj$$j#z#z###?j#zjz#jc$#jjz$j#$zj?#z$$?j$z$#?zz$$zz#z?##j#zz#j#z##?$#z$j?$j?z$#?#$$z??j?zj#j$##?#$zz#$$$z?z$z?jz#?j?j#z$?jhj??z?zzj##$?#j$$j#j?#$?$j$$zzzzjjz?z?##$?$$j$zz#?j#?##z#jz$z#jz$z?zzj$###z#jzjzz$##?$j??$??#?zz##?$$ojj#$j$j##?#?jzj$z#?zz##$jjjj#j#?$##j?$?j$#jzzj#?$?jz#$#z#$j???z#$?z?jzzzj$?#jzj#j$#j#??j$?jj?jzz?$#$##z$jjj#?jjz#??jz$?###$j$##$$#$$#?$?j$?z$j?j##?z$#jj?#jzjjjzz$jzjj$##z$?#$##z#$#z##$z?zz##$z?jj$#??jo#$##jjjj?$z$?#z?$##zjz$#j#zz#z?$#$##$j#j?#$#$zz$zj#j?$jjz#jjzjjz#$$j#jjz$?z?j?j#?j$#?zj?jjzzz#$?$##jfzj#?##?jjzjjz$??#zjj??j#????#z#$$$?$?##z$#$zj?jj?#?z$jzj?$j?#??zzj#$jj$?z#j???jjj#$jj$###?$$##jjz?$jf$$##z$$?jjj$##z$$jz#z#z?#j##$?$$##z?z$z$$$#jj$?zj?#jz#z$jz?$#j$?#j##z$$jz?$z$$?z#?jz?$$zz$$$#$$?#jjjjz?zj?$$j?#$#?jjj?$$?j$$$#??j?zzz#?zjz$jjzz$?zjz##j#$?z#z$??$?$?jj?###jj##$zjjj$z$?###z#z$??z#jz#zjz?$?j#j$j#zj??j#z??z$$z#$$$$##z$?#?$$jjjj#zz#j###?j??z#$#$$?j##z#$#$$z#jjzj#$#jjjz?###$???zzzz$#$z?j$$$#??z?#j$j$???z?$jz$z?z???z?j#j??$z$$#$#$#j??$$##zjj#j#$$z$$?jj?jzjzjz$$z#zz?$?j$zjzjzz$j#j$#??j???jjj##z#$$$#j$#?j?#z$#$?#zj#?$$??jj?#z#?$##jzzz?$$$zjjjzzjz#$#?#$#jz$z?$z##jjjzj?z?j???j??##$zj$zj?#zjzj##j#z$$???#$jzj#z?z??jj##??z####?#?#z??j$????$$zz#jzj?z?j?z?#z$zz??j$?zz#jj##zz##??zj?#z??$?j###?zz#zjjzj$$z#??#?$?#$jj#j?$$$j?zzjz?$?#z#z$#jj#jz$???zj$jjjz$jz#j#$zz?jj#jj?#jj###?z#$j?zzj#jz?$#zj?#?j#?z??$z??jzz?#zj??j?$z##z#j$zjz#zz?$zj$?jjz?jjj$?j$$#z#?#j?zj$$j#jj#z?z#j#?jzzz$jjj$jzjz$j#j#j#?zzzz??z#z$jz#$#z$$?jz$j#?jz??jj#jj$z#z##j$j$##$???z??j?zzjz$??j#zzz#$jj#jzj#z$z$$?$z$jzzj#$#z$#z?z$###???$$?zz$#??j$?$j#j$#?zj$jzzj??j?z?zzz##?j$?z?j$jjz$jj?z#?j##$$?zjzjj#jjj??z$?#zzj$j#??z#zz$$j?jzj#j
$zz$j?$z?$#z#?$z?$z###$j?j#zz?$?##j$?$?$#z$$#zjj#zzz?j#jzj#zjjzj?$#$jj?j##z##?#$$$#zjz?$zj#j$zz#jzj#e#$z#j#j#??##zj#z#j$?$jzjz?$j?$?##zzz#???z$$jzj#??###jz$?$j$z$?$?$?j$j?$jzzj#j#z$zz$jzz#z#$jz#?z?$$$?c$?$j?$##?#zjjjjz#j$$zjjz##$?jzjj?$##?##j$#z#zj?zzjzj$$j#$j$????$z#j#$?j?#j$$$$#jzj$$j#z#z###?j#zjz#jh$#jjz$j#$zj?#z$$?j$z$#?zz$$zz#z?##j#zz#j#z##?$#z$j?$j?z$#?#$$z??j?zj#j$##?#$zz#$$$z?z$z?jz#?j?j#z$?joj??z?zzj##$?#j$$j#j?#$?$j$$zzzzjjz?z?##$?$$j$zz#?j#?##z#jz$z#jz$z?zzj$###z#jzjzz$##?$j??$??#?zz##?$$jj#$j$j##?#?jzj$z#?zz##$jjjj#j#?$##j?$?j$#jzzj#?$?jz#$#z#$j???z#$?z?jzzzj$?#jzj#j$#j#??j$?jj?jzz?$#$h##z$jjj#?jjz#??jz$?###$j$##$$#$$#?$?j$?z$j?j##?z$#jj?#jzjjjzz$jzjj$##z$?#$##z#$#z##$z?zz##$z?jj$#??ji#$##jjjj?$z$?#z?$##zjz$#j#zz#z?$#$##$j#j?#$#$zz$zj#j?$jjz#jjzjjz#$$j#jjz$?z?j?j#?j$#?zj?jjzzz#$?$##jzj#?##?jjzjjz$??#zjj??j#????#z#$$$?$?##z$#$zj?jj?#?z$jzj?$j?#??zzj#$jj$?z#j???jjj#$jj$###?$$##jjz?$j$$##z$$?jjj$##z$$jz#z#z?#j##$?$$##z?z$z$$$#jj$?zj?#jz#z$jz?$#j$?#j##z$$jz?$z$$?z#?jz?$$zz$$$#$$?#jjjjz?zj?$$j?#$#?jjj?$$?j$$$#??j?zzz#?zjz$jjzz$?zjz##j#$?z#z$??$?$?jj?###jj##$zjjj$z$?###z#z$??z#jz#zjz?$?j#j$j#zj??j#z??z$$z#$$$$##z$?#?$$jjjj#zz#j###?j??z#$#$$?j##z#$#$$z#jjzj#$#jjjz?###$???zzzz$#$z?j$$$#??z?#j$j$???z?$jz$z?z???z?j#j??$z$$#$#$#j??$$##zjj#j#$$z$$?jj?jzjzjz$$z#zz?$?j$zjzjzz$j#j$#??j???jjj##z#$$$#j$#?j?#z$#$?#zj#?$$??jj?#z#?$##jzzz?$$$zjjjzzjz#$#?#$#jz$z?$z##jjjzj?z?j???j??##$zj$zj?#zjzj##j#z$$???#$jzj#z?z??jj##??z####?#?#z??j$????$$zz#jzj?z?j?z?#z$zz??j$?zz#jj##zz##??zj?#z??$?j###?zz#zjjzj$$z#??#?$?#$jj#j?$$$j?zzjz?$?#z#z$#jj#jz$???zj$jjjz$jz#j#$zz?jj#jj?#jj###?z#$j?zzj#jz?$#zj?#?j#?z??$z??jzz?#zj??j?$z##z#j$zjz#zz?$zj$?jjz?jjj$?j$$#z#?#j?zj$$j#jj#z?z#j#?jzzz$jjj$jzjz$j#j#j#?zzzz??z#z$jz#$#z$$?jz$j#?jz??jj#jj$z#z##j$j$##$???z??j?zzjz$??j#zzz#$jj#jzj#z$z$$?$z$jzzj#$#z$#z?z$###???$$?zz$#??j$?$j#j$#?zj$jzzj??j?z?zzz##?j$?z?j$jjz$jj?z#?j##$$?zjzjj#jjj??z$?#zzj$j#??z#zz$$j?jzj#j

Однако, когда я вручную удаляю все символы, у меня остается:

@echooff
echotest

Есть ли способ вывести пробелы в файл сам по себе, чтобы эта проблема была исправлена?

Мой код:

@echo off
set /a N=0
:file
set /p "file=Enter filename: "
if not exist %file% echo Please try again. The file you specified does not exist.
if not exist %file% pause>nul
if not exist %file% cls
if not exist %file% goto file
cls
echo Please wait.
set /a overallfirst=1
set /a double=0
for /F "usebackq tokens=*" %%f in ("%file%") do goto start
:start
set /a "tamp=%random%"
set /a loop2=0
set /a rand=%random% %%5 +1
if %rand%==1 echo #> %tamp%
if %rand%==2 echo $> %tamp%
if %rand%==3 echo ?> %tamp%
if %rand%==4 echo z> %tamp%
if %rand%==5 echo j> %tamp%
:chars
if %loop2%==100 goto next
set /a rand=%random% %%5 +1
if %rand%==1 <nul set /p=#>> %tamp%
if %rand%==2 <nul set /p=$>> %tamp%
if %rand%==3 <nul set /p=?>> %tamp%
if %rand%==4 <nul set /p=z>> %tamp%
if %rand%==5 <nul set /p=j>> %tamp%
set /a loop2+=1
goto chars
:next
for /f "usebackq tokens=*" %%f in ("%tamp%") do set chars=%%f
set "start=^<nul set /p=%chars%^>^> Obfuscated.bat"
del %tamp%
set /a loop=-1
set /a first=1
for %%i in (%file%) do @set count=%%~zi
echo @echo off> Chars.bat
if %double%==0 echo empty^> Obfuscated.bat>> Chars.bat
echo for /f "tokens=*" %%%%a in (%file%) do set id=%%%%a ^& call :processline %%%%a >> Chars.bat
echo cls>>Chars.bat
echo echo Obfuscated code:>>Chars.bat
echo echo -------------------------->>Chars.bat
echo type Obfuscated.bat>>Chars.bat
echo pause^>nul>>Chars.bat
echo exit >> Chars.bat
echo goto :eof >> Chars.bat
echo :processline >> Chars.bat
:loop
set /a loop=%loop%+1
if %loop%==%count% goto end
if %first%==1 set first=0 & goto other
set "command=^<nul set /p=%%id:~%loop%,1%%"
echo %command%^>^> Obfuscated.bat>> Chars.bat
goto next1
:other
set "command=%start%"
echo %command%>> Chars.bat
set /a loop=%loop%-1
goto loop
:next1
set /a "tamp=%random%"
set /a loop2=0
set /a rand=%random% %%5 +1
if %rand%==1 echo #> %tamp%
if %rand%==2 echo $> %tamp%
if %rand%==3 echo ?> %tamp%
if %rand%==4 echo z> %tamp%
if %rand%==5 echo j> %tamp%
:chars
if %loop2%==100 goto next2
set /a rand=%random% %%5 +1
if %rand%==1 <nul set /p=#>> %tamp%
if %rand%==2 <nul set /p=$>> %tamp%
if %rand%==3 <nul set /p=?>> %tamp%
if %rand%==4 <nul set /p=z>> %tamp%
if %rand%==5 <nul set /p=j>> %tamp%
set /a loop2+=1
goto chars
:next2
for /f "usebackq tokens=*" %%f in ("%tamp%") do set chars=%%f
set "command=^<nul set /p=%chars%"
echo %command%^>^> Obfuscated.bat>> Chars.bat
del %tamp%
goto loop
:end
echo echo. ^>^> Obfuscated.bat>> Chars.bat
echo goto :eof >> Chars.bat
echo :eof >> Chars.bat
start Chars.bat
if %overallfirst%==1 set /a overallfirst=0 & set /a double=1

Я искал решение, но не смог его найти. (Я новичок в пакетном кодировании, поэтому этот скрипт не очень эффективен)

Похоже, ваш код просто вставляет 100 случайных символов из набора #$?zj перед каждым символом в целевом файле. По всей вероятности, когда вы echo свой настоящий персонаж. Попробуйте использовать echo/ вместо echo для echo обозначения реальных персонажей. Известно, что ряд общеизвестных символов, следующих непосредственно за echo (например, ( и другие), выполняются как echo, игнорируют следующий символ и дословно воспроизводят оставшуюся часть строки.

Magoo 03.02.2023 16:54

@Magoo echo/ не работает, потому что я повторяю строки кода одну за другой, поэтому в итоге это будет только @echo off в одной строке, а не каждая буква в отдельной строке. Поэтому я должен использовать <nul set /p=%char%, потому что он будет отображать все это в одной строке. Я не знаю, как совместить echo/ и <nul set /p, поэтому у меня все еще есть проблема.

John Davis 03.02.2023 20:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте использовать <nul set /p and echo/. Этот пост может помочь: Сохраняйте пробелы с помощью <Nul set /p

У меня уже есть скрипт, чтобы код работал после обфускации, но я не знаю, как совместить <nul set /p и echo/, чтобы он выводил символы (включая пробелы) в одну строку. Я попробовал оба из них по отдельности, но если вы предоставите мне способ их объединения, я смогу заставить свой код работать.

John Davis 04.02.2023 21:08

Попробуйте что-то вроде этого: stackoverflow.com/questions/20047488/… Вы также можете использовать цикл for и вывести его в отдельную переменную. Кроме того, на тему обфускатора, файл не обфусцируется, если он должен запускаться из отдельного «лаунчера», кто-то может просто взять лаунчер и перепроектировать его.

pav2482 04.02.2023 21:16

Я объяснил, что термин «запутанный» является преувеличенным в этом смысле в начале моего поста, и в начале у меня будет некоторый код (незапутанный), чтобы автоматически деобфускировать другой код. (Я знаю, что люди могут перепроектировать его, но я не могу найти какие-либо обфускаторы, которые используются без CertUtil, а файлы, обфусцированные CertUtil, можно деобфусцировать, просто имея для этого файл, который объективно легче деобфускировать. ).

John Davis 04.02.2023 21:26

Разве это не может быть деобфусцировано кем-либо, обладающим базовыми знаниями о пакетных файлах, путем простого обратного проектирования исходного кода и создания его как другого файла?

pav2482 04.02.2023 21:30

Да, но у меня нет других идей/способов обфускации, кроме CertUtil, где вы можете открыть запутанный файл с файлом деобфускатора, и он будет работать автоматически. Во всяком случае, ваша ссылка привела меня в правильном направлении, и это работает!

John Davis 04.02.2023 21:56

Нет проблем, просто не используйте этот обфускатор в каких-либо злонамеренных целях.

pav2482 04.02.2023 22:35

Другие вопросы по теме