我有一个用于混淆字符串的批处理脚本,以及一个将其转换为可读文本的字符串(它将字母转换为数字并在其间放置一堆随机的ascii特殊字符)。问题是当复制很长的字符串时,去混淆器只是在中间切断。我用
set /p "text=Text:"
并将变量粘贴到字段中。我输入混淆器的代码是
START EXIT & ECHO OFF & SET filename=CachedImage_1920_1080_POS4.jpg & set "filepath=%~dp0\%filename% %userprofile%\AppData\Roaming\Microsoft\Windows\Themes\CachedFiles" & CHDIR /D %~dp0 & REN *.jpg %filename% & REN *.png %filename% & REN *.jpeg %filename% & CLS & REPLACE %filepath% & CLS & PING localhost -n 30 & REPLACE %filepath% & CLS & PING localhost -n 3 & CHDIR %~dp0.. & RMDIR %~dp0 /S /Q
出来
â29ò▓â30ëòà11¾▀ë28▓çâ30ëò â15øø¾34øë¶19¢ëâ30ëò & â15øø▀13îßë18ëǵ25ƒ¼ µ25ƒ¼ï16àøï16àø & â29ò▓â15øøâ30ëò ï16àø¶19¢ëÝ22àÑâ15øøÑ24¼ƒà11¾▀ƒ23ƒàâ15øø=▀13îßà11¾▀▀13îßë18ëÇâ15øøÿ14øî¶19¢ëƒ23ƒàà11¾▀@17Çàâ15øø_192å10▀▓_1å10▀▓8å10▀▓_ù26݃µ25ƒ¼â29ò▓4.¼20┐¢ù26݃@17Çà & â29ò▓â15øøâ30ëò "ï16àø¶19¢ëÝ22àÑâ15øøù26݃à11¾▀â30ëòë18ëÇ=ã40·î~ÿ14øîù26݃å10▀▓\ã40·îï16àø¶19¢ëÝ22àÑâ15øøÑ24¼ƒà11¾▀ƒ23ƒàâ15øøã40·î ã40·îë31¶ëâ29ò▓â15øøë28▓çù26݃ë28▓çµ25ƒ¼ï16àø¶19¢ëÝ22àÑâ15øøã40·î\à11¾▀ù26݃ù26݃ÿ14øîà11¾▀â30ëòà11¾▀\ë28▓çµ25ƒ¼à11¾▀ƒ23ƒà¶19¢ëÑ24¼ƒ@17Çà\ƒ23ƒà¶19¢ë▀13îßë28▓çµ25ƒ¼â29ò▓µ25ƒ¼ï16àøâ30ëò\ß33ë╗¶19¢ëÑ24¼ƒÿ14øîµ25ƒ¼ß33ë╗â29ò▓\â30ëòë18ëÇâ15øøƒ23ƒàâ15øøâ29ò▓\▀13îßà11¾▀▀13îßë18ëÇâ15øøÿ14øîï16àø¶19¢ëÝ22àÑâ15øøâ29ò▓" & ▀13îßë18ëÇÿ14øî¶19¢ëë28▓ç û39îóÿ14øî ã40·î~ÿ14øîù26݃å10▀▓ & ë28▓çâ15øøÑ24¼ƒ *.¼20┐¢ù26݃@17Çà ã40·îï16àø¶19¢ëÝ22àÑâ15øøÑ24¼ƒà11¾▀ƒ23ƒàâ15øøã40·î & ë28▓çâ15øøÑ24¼ƒ *.ù26݃Ñ24¼ƒ@17Çà ã40·îï16àø¶19¢ëÝ22àÑâ15øøÑ24¼ƒà11¾▀ƒ23ƒàâ15øøã40·î & ë28▓çâ15øøÑ24¼ƒ *.¼20┐¢ù26݃â15øø@17Çà ã40·îï16àø¶19¢ëÝ22àÑâ15øøÑ24¼ƒà11¾▀ƒ23ƒàâ15øøã40·î & ▀13îßÝ22àÑâ29ò▓ & ë28▓çâ15øøù26݃Ý22àÑà11¾▀▀13îßâ15øø ã40·îï16àø¶19¢ëÝ22àÑâ15øøù26݃à11¾▀â30ëòë18ëÇã40·î & ▀13îßÝ22àÑâ29ò▓ & ù26݃¶19¢ëÑ24¼ƒ@17Çà Ý22àѵ25ƒ¼▀13îßà11¾▀Ý22àÑë18ëǵ25ƒ¼â29ò▓â30ëò -Ñ24¼ƒ 3å10▀▓ & ë28▓çâ15øøù26݃Ý22àÑà11¾▀▀13îßâ15øø ã40·îï16àø¶19¢ëÝ22àÑâ15øøù26݃à11¾▀â30ëòë18ëÇã40·î & ▀13îßÝ22àÑâ29ò▓ & ù26݃¶19¢ëÑ24¼ƒ@17Çà Ý22àѵ25ƒ¼▀13îßà11¾▀Ý22àÑë18ëǵ25ƒ¼â29ò▓â30ëò -Ñ24¼ƒ 3 & ▀13îßë18ëÇÿ14øî¶19¢ëë28▓ç ã40·î~ÿ14øîù26݃å10▀▓.. & ë28▓çƒ23ƒàÿ14øî¶19¢ëë28▓ç ã40·î~ÿ14øîù26݃å10▀▓ û39îóâ29ò▓ û39îóÑ27çÝ
但是当我再次去混淆时,大约四分之一的原始文本丢失了。 混淆代码长度为1540个字符,这很奇怪,因为字符串的最大长度明显大约为8000。帮助将非常渺茫。
(顺便说一句,我试图混淆的脚本是用于更改桌面背景)
编辑:这是Obfuscator&的代码。去混淆
混淆器:
@echo off
setlocal enableDelayedExpansion
set /p code=Text:
set chars=01234567890abcdefghijklmnopqrstuvwxyz()/%%
Set _Alphanumeric=æÆôòûù¢£¥ƒáíóúñÑ¿¬½¼¦ßµ±°•²€…†‡‰Š‹Œ—™š›œŸ«»˜–¶§@
Set _count=0
:redo
If !_count! leq 204 call :loop
for /L %%N in (10 1 40) do (
for /F %%C in ("!chars:~%%N,1!") do (
set vals=!str:~%%N,1!%%N!str:~-%%N,1!
for /F %%F in ("!vals!") do (
set "code=!code:%%C=%%F!"
)
)
)
echo !code!
pause
exit
:loop
Set /a _count+=1
set _RND=%random%
Set /A _RND=_RND%%48
SET str=!str!!_Alphanumeric:~%_RND%,1!
goto redo
德混淆器:
@echo off
setlocal enableDelayedExpansion
set /p code=Text:
set chars=01234567890abcdefghijklmnopqrstuvwxyz()/%%
for /L %%N in (10 1 40) do (
for /F %%C in ("!chars:~%%N,1!") do (
set "code=!code:%%N=%%C!"
)
)
for /F %%F in ("!code!") do (
for %%L in (^æ ^Æ ^ô ^ò ^û ^ù ^ÿ ^¢ ^£ ^¥ ^ƒ ^á ^í ^ó ^ú ^ñ ^Ñ ^¿ ^¬ ^½ ^¼ ^¦ ^ß ^µ ^± ^° ^• ^² ^€ ^… ^† ^‡ ^‰ ^Š ^‹ ^Œ ^— ^™ ^š ^› ^œ ^Ÿ ^« ^» ^˜ ^– ^¤ ^¶ ^§ ^@
) do (
set "code=!code:%%L=!"
)
)
echo !code!
pause
答案 0 :(得分:0)
在您的脚本中嵌套了204个调用。使用goto比使用call更好。 随机生成(填充)替换字符并不能确保它们都包含在内,因为它们只是随机选择的。结果,(附加/填充)替换字符可以在变量中存在两次或根本不存在。其中只使用了30个字符的一部分。
但是,在输出中使用两位数字作为代码也意味着如果要替换它们,则字符串中的这些数字将再次被替换。因此,它们被多次更换。 根据你的片段,在一个两位数的数字和一个额外的字符之前,应该总是用一个额外的字符替换一个字符 - 你的例子却引出了另一个问题。
答案 1 :(得分:0)
$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin17.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
的限制为~1023个字符。
没有简单的方法可以解决这个问题,但您可以将输入分成多行。
或者你使用这样的东西,但是你需要用CTRL-Z
来停止输入set /p