[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
题外话,我发这个帖子是因为对于ascii码0-255,除了0x00外,我都找到了可以在bat中用变量存放他们并加以利用的方法,可就这个0x00我没办法,

若能0x00可以被利用了,我惊讶的发现,bat 不靠任何外部命令,仅内部命令,便可以生产任何我想要的三方!
这就是我发现的秘密。
只是看来要用到ascode技术,那么人家的方案比我的简洁很多多多。。。
1

评分人数

TOP

本帖最后由 plp626 于 2011-5-14 13:46 编辑

re: qzwqzw

有个疑问,你14楼的代码为什么要多一行 echoo >nul?
  1. @echo off
  2. (echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=
  3. echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6
  4. echo ?@xAyJHmH@=a?}VjuN?_LEkS?`w`s_{OCIvJDGEHtc{OCIKGMgELCI?GGg
  5. echo EL?s?WL`LRBcx=k_K?AxVD?fCo?Cd?BLDs0)>echoo.com
  6. echoo.com $00>null.txt
复制代码
如此也可方便生产0x00字符;

刚才看到15楼的询问,我还以为这个echoo.com 不方便生产0x1a,试了试也可以,不但可以,还可以生产任意"字符流",以至于可以生成我们想要的任何三方工具,非常惊喜!(未考虑速度)
  1. @echo off
  2. (echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=
  3. echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6
  4. echo ?@xAyJHmH@=a?}VjuN?_LEkS?`w`s_{OCIvJDGEHtc{OCIKGMgELCI?GGg
  5. echo EL?s?WL`LRBcx=k_K?AxVD?fCo?Cd?BLDs0)>echoo.com
  6. echoo.com $00$1a$0d$0dplp626>test.txt
复制代码
这段神奇的代码让我产生了很大的兴趣,试了试,参数$不紧跟16进制的数据,比如
echoo.com $# 创建的是"-"
echoo.com $$创建 但是"="
而echoo.com $#$$ 又创建的不是"=-" 而是"4#"
这里是怎么对应的?
======================
qzw兄可否把这段代码给大伙讲解下。。。

TOP

本帖最后由 plp626 于 2011-5-14 13:40 编辑

15# qzwqzw

这个直接签到bat源代码中,不过要在注释行加转义字符^
  1. ::{^}
  2. @echo off
  3. set/p sub=<%~s0
  4. setlocal EnableDelayedExpansion
  5. set sub=!sub:~4,1!
  6. set/p=!sub!<nul>sub.txt
复制代码
还可借助copy nul的特性,但要生产临时文件,不过很简洁
  1. @copy nul+nul sub.txt
复制代码
1

评分人数

    • zm900612: 哈哈,忘了有这个技术 + 1

TOP

倒是想起另外一个类似的问题
如何生成一个仅含1个eof字符的文件
eof即文件结束符
ASCII码十六进制形式为0x1A
天的白色影子

TOP

本帖最后由 qzwqzw 于 2011-5-14 10:59 编辑

11楼的代码也犯了本末倒置的错误了
生成0字节是为了避免使用外部命令
结果你却使用外部命令debug生成了0字节

如果允许用debug
那么直接用e命令就可以直接写任何字节了
何必还要用a命令汇编dos中断呢?
  1. @echo off
  2. for %%f in (e100 00 rcx 1 nnull.txt w q) do echo %%f>>debug.scr
  3. debug < debug.scr >nul
复制代码
对于这个问题
我能想到的仍然是ASCODE方案
因为它本身就是为了解决第三方工具依赖而出现的
生成0字节只是一个小小的副产物而已
  1. @echo off
  2. echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>echoo.com
  3. echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>>echoo.com
  4. echo ?@xAyJHmH@=a?}VjuN?_LEkS?`w`s_{OCIvJDGEHtc{OCIKGMgELCI?GGg>>echoo.com
  5. echo EL?s?WL`LRBcx=k_K?AxVD?fCo?Cd?BLDs0>>echoo.com
  6. echoo >nul
  7. echoo.com $00>null.txt
  8. del echoo.com
复制代码
3

评分人数

    • zm900612: 技术技术 + 1
    • plp626: 我也想到这个,就是不懂;惊喜~技术 + 1
    • batman: 牛人!技术 + 1
天的白色影子

TOP

12# hanyeguxing
我上面的代码就是用的set /p输出,生成的就是1字节的空文本啊。。。
***共同提高***

TOP

本帖最后由 hanyeguxing 于 2011-5-14 03:31 编辑
  1. fsutil file createnew 125.txt 1
复制代码
批处理中cmd用 iswspace () 直接检查变量、参数、文件名等字符串中的空字符并进行处理,所以set/p和for/f以及echo等都不能用,只能考虑那些直接操作文件的命令。more把空字符当换行处理;就剩下type、copy等这些了;可只用他们怎么把包含空字符的文件拆开呢?
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

抛砖了:
  1. @echo off
  2. (echo A100&echo MOV DL,00&echo MOV AH,02&echo INT 21&echo INT 20&echo,&echo G&echo q)>db
  3. for /f "skip=8 delims=Progamteindly" %%a in ('debug^<db') do set/p=%%a<nul>a.txt&goto next
  4. :next
  5. del /q db
复制代码
***共同提高***

TOP

本帖最后由 Bearxy 于 2011-5-13 23:41 编辑

9# plp626
呵呵,我看过上次你和别人论证的那个帖.
所以猜到你出的题可能不会是那么简单……但没办法呀,batman不是一直说重在参与么

TOP

8# Bearxy


我也是从初学者过来,呵呵,慢慢来,看你的回复很可爱。

NUL 是asiic码值为0的那个控制字符,你搜索 下载 hedit (很小的体积)可以查看任意文件的 asiic码 信息。

TOP

囧啊,初学者看不懂.难道是ECHO.NUL>TEST.TXT

TOP

可执行文件的头部就是固定的格式,包含了NUL字符,用 type %windir%\system32\cmd.exe 或者 findstr MZ %windir%\system32\cmd.exe 就能得到包含 NUL 的字符串了,试了一下无法提取,CMD存变量的时候好像自动给搞掉了。

TOP

有难度,先占楼思考。。。
***共同提高***

TOP

cmd /u /c echo asdfasdfasdf之类的可以生成带nul的输出,但是没想到如何提取,用delims试过似乎也不行

TOP

3# zm900612

那个制表符的获取用了变量

nul 不同于tab 是最特殊的字符

变量的值不可能含有 nul 字符, 除非你能找到cmd变量存储的bug加以利用

但这种技巧可遇不可求,或者你已经发现。

TOP

返回列表