使用批处理回显来编写vbe文件(字符不会被转义)

时间:2015-10-12 09:18:54

标签: batch-file vbscript escaping encode

所以我目前正在编写一本关于安全性的教程,因此我必须使用批处理文件编写一个vbe文件(用VBScript编写的编码脚本)。

所以,我只需将其写入文件:

#@~^mgAAAA==6   P3MDKDP"+k;:PH+XY~@#@&fks~D;EdO{6k^+SPhnk/Co8WX~~AMkYnm6ks+B~T+O|wmYtBPDn:a{2lDtS~6kxms{alY4~@#@&s+k/Con8K6~',h/T4GavJKndDJ~~8BPEwlDlV,2M.WMJbP@#@&2zEAAA==^#~@ 

(注意:上面有些字符无法打印)。

但问题是我从未设法成功写过,我尝试使用http://www.robvanderwoude.com/escapechars.php的说明来逃避所有角色并且它没有用。

我尝试使用DelayedExpansion这样:

SET "foo=#@~^mgAAAA==6  P3MDKDP"+k;:PH+XY~@#@^&fks~D;EdO{6k^+SPhnk/Co8WX~~AMkYnm6ks+B~T+O|wmYtBPDn:a{2lDtS~6kxms{alY4~@#@&s+k/Con8K6~',h/T4GavJKndDJ~~8BPEwlDlV,2M.WMJbP@#@^&2zEAAA==^#~@ "
setlocal EnableDelayedExpansion
(
 echo !foo!
) > test.vbe

它也没有用,我对没有转义的字符有问题。

任何想法?谢谢!

2 个答案:

答案 0 :(得分:3)

原因很明显,那是[ ... P3MDKDP ]之后的引号。因为你分配变量" foo"用一个开放和一个紧密的引号混淆字符,就像SET "foo=..."一样,批量认为你停止分配" foo"在[ ... P3MDKDP ]之后。这样就可以单独留下[ + k;:PH + XY~ ..... ],而无需分配变量或使用命令。批处理无法识别,因此命令提示符会自动退出。

你可以做的是,将引号后面的部分分配给另一个变量,我将它命名为" foo2"在以下示例中:

@echo off
setlocal enabledelayedexpansion

SET "foo=#@~^mgAAAA==6  P3MDKDP""
SET "foo2=+k;:PH+XY~@#@^&fks~D;EdO{6k^+SPhnk/Co8WX~~AMkYnm6ks+B~T+O|wmYtBPDn:a{2lDtS~6kxms{alY4~@#@&s+k/Con8K6~',h/T4GavJKndDJ~~8BPEwlDlV,2M.WMJbP@#@^&2zEAAA==^#~@ "

echo !foo!!foo2!>test.vbe

pause >nul

而且,如果你在引号之前/之后添加另一个引号,就像这样[ P3MDKDP "" ],即使你没有将第二部分分配给一个新变量,它仍然可以工作,但它在字符串中输出一个额外的引号。

答案 1 :(得分:1)

也许这个小技巧可以帮助你:

@echo off
for /f "delims=[]" %%n in ('find /n "REM DATA:" "%~dpnx0"') do set /a n=%%n
more +%n%  "%~dpnx0">test.vbe
REM rest or your batchfile
goto :eof
REM DATA:
#@~^mgAAAA==6  P3MDKDP"+k;:PH+XY~@#@^&fks~D;EdO{6k^+SPhnk/Co8WX~~AMkYnm6ks+B~T+O|wmYtBPDn:a{2lDtS~6kxms{alY4~@#@&s+k/Con8K6~',h/T4GavJKndDJ~~8BPEwlDlV,2M.WMJbP@#@^&2zEAAA==^#~@ 

(这个技巧可以避免任何字符转义或拆分字符串。也可以用来编写多行文字)