使用批处理文件生成可执行文件...等什么?
Generating an executable using batch file... WAIT WHAT?
所以大约一年前我在做一个小项目,我正在寻找可以批量拥有动态颜色的东西(例如只改变几个单词的颜色)。我发现了这个:
[CODE INTRO]
call :TXTCOLOR
set COLOR=TXTCOLOR.exe
[CODE]
:TXTCOLOR
Echo.Const W=^2>t.vbs&Echo.Set o=WScript.StdOut>>t.vbs
For %%b In (
"4D53434600000000BA030000000000002C000000000000000301010001000000000000"
"004900000001000100D20700000000000000009E3B8A662000747874636F6C6F722E65"
"78650063EB078D6903D207434BDD544B681341189E6D538D35352AE2030F4EC44A458D"
"55113C88D4C75A85AA5B5A2F8AD66D324997A6BB7177A2297868498B9450ECA182871E"
"7AF0E0C183878AA98844DA83828288074FE24549B1A00785452AEB3F8F3C5A7C54BD39"
"F0E77F7FF3CD9FD9397976045523847C209E87500E89D5847EBFFA40566C7AB0024D2C"
"7B1ECA292DCF43ED5D868393B615B7F51E1CD14DD3A2B893603B6562C3C4474FB7E11E"
"2B4AC27575B55B2486A622D4A254CDC37D8B82D5CB9525F3624DABE167250896EC985D"
"25782354D6A851C4A70F237E2E5EB8B25297145F1701EFC022CEFAA76B0C70F7FF221F"
"A6244D8B644036540BDE950B202E86A33AD5C17EA188C04BA6E78F864D23FFB73CCF0C"
"BDEB9F6D006324ABFA33AE2F38180016593590C9FBB2FED6C228789969DF903AC7637E"
"16EB2BC6DCAC3A9771157E6782A3F9C17C7060032A77071F295AE19C289EB9C413505E"
"5559DEB4B07C872867B97D15B9CC6385A7EBCAE9B5909EA945F2CACE0498C586F3A146"
"04D80FA7EDFE8CA25FEE995704C53298E865C7630D5F7983CBCC8F254E93EC8F6B9D64"
"95AD6C28190E12280D6AB2767E3E52CC33D47ED7637CAE8D0BE48C8B8203AB8AB6121C"
"A86124328CCE17CFF3B44258617C3E0FAB6FB4ACFA592B6C55F830FBDFB24F5684362A"
"9259207BD21D525F0F3E9530FC544B71139A616EAE062CE8789D455A0E31BBC04E0BCC"
"82F7D5F702EA45690EEB99E5E75553BCCAC747CCE7F374AA747FD6B0FB9313439BCDB1"
"0F0FB091025D3778979F776985EB0263589DD578B5360CDB0DAB2EC89C56E8E5D9358C"
"02CC010462E7BF791E9FDAA7ACFA492B5C1000B0B5573F86D9E5F1EAC7A5BE25F56DA9"
"A7A57E22F533A9EF487D57EA09A973523FC48B79FBFE9755EFD43B08AE084DD38895B0"
"EC304913DCA947BAE3B69532A30D8D3B8F6D8B5936A970E181374C7A8A5C69314CD2D0"
"B86BF736BC997611CC5EB4CDB50BF05FE1B21D08897771AE22761562D3F8C7DCD6410E"
"836C07D9077210A419A41D8480A442A26E08F44D907BA17FEBEB712E476C1A8E2612E0"
"38D44E10130CC349478DB841B959B4204B2D56C6671103A3236299D4B612B124733A1C"
"423BF464B283F626090FC409EDD10D53B7E30EF8240D30DDC4364962EF1EB96333A16D"
"347A5C37A30922DC2396E95809D216B109310FA76231629F30631624DB4AC97698FA21"
) Do >>t.vbs (
Echo.For b=1To 69Step 2:o.Write Chr(Clng("&H"^&Mid(%%b,b,W^)^)^):Next)
For %%b In ("4A6DA33345591BFA0E"
) Do >>t.vbs (
Echo.For b=1To 17Step 2:o.Write Chr(Clng("&H"^&Mid(%%b,b,W^)^)^):Next)
Cscript /Nologo t.vbs > TXTCOLOR.ex_
Del /f /q /a t.vbs >nul 2>&1
Expand -r TXTCOLOR.ex_ >nul 2>&1
Del /f /q /a TXTCOLOR.ex_ >nul 2>&1
Goto :Eof
:----------------------------------------------
[END]
这会生成一个 .exe,允许我们使用以下语法在批处理文件中更改颜色:
%COLOR% [COLOR CODE] [LINE PARAMETER] "[TEXT]"
[COLOR CODE]是经典的cmd颜色系统,第一个字符是背景id,第二个字符是文本颜色id。 [LINE PARAMETER] 如果不是行的最后一部分则为 0,否则为 1。当然,[TEXT] 是正文。
例如,如果我想用白色的“hello”和“test”写“Hello world test”,用浅绿色写“world”(所有东西都有背景),它应该是这样的:
%COLOR% 0F 0 "Hello "
%COLOR% 0A 0 "world "
%COLOR% 0F 1 "test"
我把 1 放在最后一个,因为它是行尾。
最后,我们来谈谈我的问题:它是如何工作的?我的意思是,使用一个批处理,我们生成一个 .exe 能够用作 CMD 中的命令。但是如何生成一个有效的?
谢谢你至少读到这里,即使你没有任何答案。
祝你有美好的一天 ;)
代码 echo
将大量内容写入 (>>
) 文件 t.vbs
,即它正在创建一个 VBScript 文件。
然后执行 VBScript 文件 (Cscript /Nologo t.vbs
),并将 VBScript 的输出写入 TXTCOLOR.ex_
。
由于TXTCOLOR.ex_
是一个压缩文件,所以Expand
ed,会给你TXTCOLOR.exe
可以执行。
But how to generate one that is working?
如果您想对不同的可执行文件执行相同的操作,只需颠倒步骤顺序即可:
- 创建可执行文件
- 压缩它以减少字节数
- 获取它的十六进制转储
- 编写一个可以将十六进制转储转换为二进制文件的 VBScript 文件
- 写一个写VBScript文件的批处理文件
但是:如果您只想执行一些代码,您可以立即在可执行文件中实现它。它更不容易出错,也更省力。混淆这样的东西让人怀疑。
所以大约一年前我在做一个小项目,我正在寻找可以批量拥有动态颜色的东西(例如只改变几个单词的颜色)。我发现了这个:
[CODE INTRO]
call :TXTCOLOR
set COLOR=TXTCOLOR.exe
[CODE]
:TXTCOLOR
Echo.Const W=^2>t.vbs&Echo.Set o=WScript.StdOut>>t.vbs
For %%b In (
"4D53434600000000BA030000000000002C000000000000000301010001000000000000"
"004900000001000100D20700000000000000009E3B8A662000747874636F6C6F722E65"
"78650063EB078D6903D207434BDD544B681341189E6D538D35352AE2030F4EC44A458D"
"55113C88D4C75A85AA5B5A2F8AD66D324997A6BB7177A2297868498B9450ECA182871E"
"7AF0E0C183878AA98844DA83828288074FE24549B1A00785452AEB3F8F3C5A7C54BD39"
"F0E77F7FF3CD9FD9397976045523847C209E87500E89D5847EBFFA40566C7AB0024D2C"
"7B1ECA292DCF43ED5D868393B615B7F51E1CD14DD3A2B893603B6562C3C4474FB7E11E"
"2B4AC27575B55B2486A622D4A254CDC37D8B82D5CB9525F3624DABE167250896EC985D"
"25782354D6A851C4A70F237E2E5EB8B25297145F1701EFC022CEFAA76B0C70F7FF221F"
"A6244D8B644036540BDE950B202E86A33AD5C17EA188C04BA6E78F864D23FFB73CCF0C"
"BDEB9F6D006324ABFA33AE2F38180016593590C9FBB2FED6C228789969DF903AC7637E"
"16EB2BC6DCAC3A9771157E6782A3F9C17C7060032A77071F295AE19C289EB9C413505E"
"5559DEB4B07C872867B97D15B9CC6385A7EBCAE9B5909EA945F2CACE0498C586F3A146"
"04D80FA7EDFE8CA25FEE995704C53298E865C7630D5F7983CBCC8F254E93EC8F6B9D64"
"95AD6C28190E12280D6AB2767E3E52CC33D47ED7637CAE8D0BE48C8B8203AB8AB6121C"
"A86124328CCE17CFF3B44258617C3E0FAB6FB4ACFA592B6C55F830FBDFB24F5684362A"
"9259207BD21D525F0F3E9530FC544B71139A616EAE062CE8789D455A0E31BBC04E0BCC"
"82F7D5F702EA45690EEB99E5E75553BCCAC747CCE7F374AA747FD6B0FB9313439BCDB1"
"0F0FB091025D3778979F776985EB0263589DD578B5360CDB0DAB2EC89C56E8E5D9358C"
"02CC010462E7BF791E9FDAA7ACFA492B5C1000B0B5573F86D9E5F1EAC7A5BE25F56DA9"
"A7A57E22F533A9EF487D57EA09A973523FC48B79FBFE9755EFD43B08AE084DD38895B0"
"EC304913DCA947BAE3B69532A30D8D3B8F6D8B5936A970E181374C7A8A5C69314CD2D0"
"B86BF736BC997611CC5EB4CDB50BF05FE1B21D08897771AE22761562D3F8C7DCD6410E"
"836C07D9077210A419A41D8480A442A26E08F44D907BA17FEBEB712E476C1A8E2612E0"
"38D44E10130CC349478DB841B959B4204B2D56C6671103A3236299D4B612B124733A1C"
"423BF464B283F626090FC409EDD10D53B7E30EF8240D30DDC4364962EF1EB96333A16D"
"347A5C37A30922DC2396E95809D216B109310FA76231629F30631624DB4AC97698FA21"
) Do >>t.vbs (
Echo.For b=1To 69Step 2:o.Write Chr(Clng("&H"^&Mid(%%b,b,W^)^)^):Next)
For %%b In ("4A6DA33345591BFA0E"
) Do >>t.vbs (
Echo.For b=1To 17Step 2:o.Write Chr(Clng("&H"^&Mid(%%b,b,W^)^)^):Next)
Cscript /Nologo t.vbs > TXTCOLOR.ex_
Del /f /q /a t.vbs >nul 2>&1
Expand -r TXTCOLOR.ex_ >nul 2>&1
Del /f /q /a TXTCOLOR.ex_ >nul 2>&1
Goto :Eof
:----------------------------------------------
[END]
这会生成一个 .exe,允许我们使用以下语法在批处理文件中更改颜色:
%COLOR% [COLOR CODE] [LINE PARAMETER] "[TEXT]"
[COLOR CODE]是经典的cmd颜色系统,第一个字符是背景id,第二个字符是文本颜色id。 [LINE PARAMETER] 如果不是行的最后一部分则为 0,否则为 1。当然,[TEXT] 是正文。
例如,如果我想用白色的“hello”和“test”写“Hello world test”,用浅绿色写“world”(所有东西都有背景),它应该是这样的:
%COLOR% 0F 0 "Hello "
%COLOR% 0A 0 "world "
%COLOR% 0F 1 "test"
我把 1 放在最后一个,因为它是行尾。
最后,我们来谈谈我的问题:它是如何工作的?我的意思是,使用一个批处理,我们生成一个 .exe 能够用作 CMD 中的命令。但是如何生成一个有效的?
谢谢你至少读到这里,即使你没有任何答案。 祝你有美好的一天 ;)
代码 echo
将大量内容写入 (>>
) 文件 t.vbs
,即它正在创建一个 VBScript 文件。
然后执行 VBScript 文件 (Cscript /Nologo t.vbs
),并将 VBScript 的输出写入 TXTCOLOR.ex_
。
由于TXTCOLOR.ex_
是一个压缩文件,所以Expand
ed,会给你TXTCOLOR.exe
可以执行。
But how to generate one that is working?
如果您想对不同的可执行文件执行相同的操作,只需颠倒步骤顺序即可:
- 创建可执行文件
- 压缩它以减少字节数
- 获取它的十六进制转储
- 编写一个可以将十六进制转储转换为二进制文件的 VBScript 文件
- 写一个写VBScript文件的批处理文件
但是:如果您只想执行一些代码,您可以立即在可执行文件中实现它。它更不容易出错,也更省力。混淆这样的东西让人怀疑。