如何在Windows命令提示符下从十六进制字符串写入二进制文件

如何在Windows命令提示符下从十六进制字符串写入二进制文件,windows,cmd,binary,writefile,Windows,Cmd,Binary,Writefile,我想从windows cmd中的十六进制字符串生成二进制可执行文件。我使用了“echo”cmd命令,但它是用 普通字符串,不是二进制格式。因此无法执行输出exe文件 input: "\x4d\x5a\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xff\xff\..." (this is first part of PE) output: binary executable file 在windows cmd中是否可能?如果可能的话,请帮助我。提前感谢。已经有

我想从windows cmd中的十六进制字符串生成二进制可执行文件。我使用了“echo”cmd命令,但它是用 普通字符串,不是二进制格式。因此无法执行输出exe文件

input: "\x4d\x5a\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xff\xff\..." (this is first part of PE)
output: binary executable file

在windows cmd中是否可能?如果可能的话,请帮助我。提前感谢。

已经有一段时间了,但我认为在旧的DOS调试中这是可能的。看看这里:

已经有一段时间了,但我认为在旧的DOS调试中这是可能的。查看此处:

是的,有一种方法:有一个名为的工具(从Windows XP开始提供,尽管有些动词可能已被更改),它的一个动词名为
-decodehx
(对于可选参数
类型
,请查看函数的参数
dwFlags
):

用法:
CertUtil[Options]-解码十六进制加密输出文件[type]
解码十六进制编码文件
类型--数字密码\字符串\编码类型
[...]
但是,这不理解输入数据的十六进制代码,需要删除
\x


以下脚本从文件中读取输入的十六进制字符串,用临时文件中的空格替换每个
\x
,并使用
certutil-decodehex
将其转换为二进制文件:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u INPF=%~1”&rem//(输入文件,`%~1`是第一个命令行参数)
设置“_outp=%~2”&rem//(输出文件,`%~2`是第二个命令行参数)
设置“\u TMPF=%TEMP%\%~n0\u%RANDOM%.tmp”&rem/(临时文件)
rem//准备输入文件,将“\x”替换为“`”,并将结果写入temp。文件:
“%\u TMPF%”呼叫:准备
回音完毕。
rem//将带有十六进制代码的临时文件转换为二进制输出文件:
certutil-f-v-decodeChex“%\u TMPF%”“%\u outp%”4
rem//清理临时文件:
删除“%\u TMPF%”
端部
退出/B
:准备
setlocal EnableDelayedExpansion
rem//初始化辅助变量:
设置“REST=”
rem/*使用“set/P”以1kbytes为单位读取输入文件`for/F`是避免的
rem用于读取文件,因为它会将行长度限制为8 KB:*/
:准备循环
rem//读取一块或一行十六进制代码:
设置“行=“&set/P行=“”
rem//Read chunk为空,因此到达数据末尾,所以终止循环:
如果未定义行转到:准备下一步
rem//从上一个块中预先插入潜在片段:
设置“LINE=!REST!!LINE!”&设置“REST=”
rem//现在将每个“\x”替换为“`”:
设置“行=!行:\x=!”
rem//存储搜索字符串的剩余片段,以便与下一个块一起处理:
如果“!LINE:~-1!”==”\“(设置“LINE=!LINE:~,-1!”&设置“REST=\”)
rem/*返回转换后的块,不带尾随换行符,以避免十六进制
rem代码将被撕开:*/

请注意,
certutil
将文件大小限制在几十兆字节(如前所述)。

是的,有一种方法:有一个名为的工具(从Windows XP开始提供,尽管有些动词可能已被更改),它的特点是一个动词名为
-decodehex
(对于可选参数
type
请查看函数的参数
dwFlags
):

用法:
CertUtil[Options]-解码十六进制加密输出文件[type]
解码十六进制编码文件
类型--数字密码\字符串\编码类型
[...]
但是,这不理解输入数据的十六进制代码,需要删除
\x


以下脚本从文件中读取输入的十六进制字符串,用临时文件中的空格替换每个
\x
,并使用
certutil-decodehex
将其转换为二进制文件:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u INPF=%~1”&rem//(输入文件,`%~1`是第一个命令行参数)
设置“_outp=%~2”&rem//(输出文件,`%~2`是第二个命令行参数)
设置“\u TMPF=%TEMP%\%~n0\u%RANDOM%.tmp”&rem/(临时文件)
rem//将“\x”替换为“`”,并将结果写入临时文件,以准备输入文件:
“%\u TMPF%”呼叫:准备
回音完毕。
rem//将带有十六进制代码的临时文件转换为二进制输出文件:
certutil-f-v-decodeChex“%\u TMPF%”“%\u outp%”4
rem//清理临时文件:
删除“%\u TMPF%”
端部
退出/B
:准备
setlocal EnableDelayedExpansion
rem//初始化辅助变量:
设置“REST=”
rem/*使用“set/P”以1kbytes为单位读取输入文件;避免使用“for/F”
rem用于读取文件,因为它会将行长度限制为8 KB:*/
:准备循环
rem//读取一块或一行十六进制代码:
设置“行=“&set/P行=“”
rem//Read chunk为空,因此到达数据末尾,所以终止循环:
如果未定义行转到:准备下一步
rem//从上一个块中预先插入潜在片段:
设置“LINE=!REST!!LINE!”&设置“REST=”
rem//现在将每个“\x”替换为“`”:
设置“行=!行:\x=!”
rem//存储搜索字符串的剩余片段,以便与下一个块一起处理:
如果“!LINE:~-1!”==”\“(设置“LINE=!LINE:~,-1!”&设置“REST=\”)
rem/*返回转换后的块,不带尾随换行符,以避免十六进制
rem代码将被撕开:*/

请注意,
certutil
将文件大小限制为几十MB(如前所述)。

不,不是。CMD中没有将十六进制转换为病毒的功能。不,不是。CMD中没有将十六进制转换为病毒的功能。谢谢,但我不想使用任何其他工具,只使用windows CMD。谢谢,但我