Board logo

标题: [原创] 批处理批处理“加密”器 [打印本页]

作者: Spring    时间: 2010-2-22 14:32     标题: 批处理批处理“加密”器

刚刚看到有个说批处理加密的工具(http://www.bathome.net/thread-7194-1-1.html),实际上是变乱码
于是想起很久以前看过的一个帖子,写了一个批处理版本的,可以自定义开始的能看出来的文字哦~~
这也是一个文件操作的好的案例

  1. ::用法:将要变乱码的文件拖到我的图标上。
  2. @echo off
  3. ::获取原文件的完整路径
  4. set "origFile=%~f1"
  5. ::生成的新文件的完整路径,我是用的“原文件名_new原扩展名”
  6. set "newFile=%~dpn1_new%~x1"
  7. ::下面两行生成一个VBS,它将用于生成一个Unicode编码的文件,内容是 ::(P)&(C)2010 Spring
  8. > "%newFile%" echo CreateObject^("Scripting.FileSystemObject"^). _
  9. >>"%newFile%" echo CreateTextFile^("%newFile%", True, vbTrue^).Write "::(P)&(C)2010 Spring"
  10. ::执行此VBS脚本,你可以在这句之前加一个 pause,去看看那个VBS的内容
  11. cscript -nologo -e:vbs "%newFile%"
  12. ::加上两个空行以及一个 cls,见解说 3
  13. >>"%newFile%" (echo.&echo.&echo,cls)
  14. ::将生成的文件与原文件合并成最终的乱码文件
  15. >>"%newFile%" type "%origFile%"
  16. ::上面这一行也可以用下面的语句替代:
  17. ::copy /b /y "%newFile%" + "%origFile%" "%newFile%"
  18. ::cls
  19. echo  %origFile%
  20. echo  变成乱码后的文件是
  21. echo  %newFile%
  22. pause>nul
复制代码


解说:
1. %~*i 之类的是什么意思请用 for /? 查看命令行帮助的最后一部分内容,这些是很有用的东西,
   但是请注意系统对d、p、n等字母的处理方式,经过试验知道,如果不存在此字母,则在相应的位置去掉此字母代表的内容;
   也就是说 %~dpnxi、%~ndxpi、%~dpddnnxi 都是一样的效果,和 %~fi 一样。
2. 乱码的原理,详细见此贴 http://cn-dos.net/forum/viewthread.php?tid=22254 ,这里主要参考了其中40、43、95的说法,最终是,
   先制造一个头部具有Unicode编码特征的文件(我真的制造了一个Unicode编码的文本,够特征了吧),
   然后将原来是ANSI编码的批处理文件与它合并,那么如果用记事本打开,这些内容也会被误以为是Unicode编码的,于是显示就出问题了。
3. 在合并他们之前在批处理文件前面加上两个空行是为了保护代码不被破坏,加 cls 语句是为了屏蔽之前的错误输出。
4. 没有临时文件产生!嘿嘿,本来VBS是一个临时文件,创建的Unicode编码文件是一个临时文件,
   但是利用 cscript -e:vbs 参数,以及VBS运行时能改写或者删除自身的特性(我认为原因是VBS文件是全部读入内存之后再解释执行的),这两条很有用,
   直接就一步到位。
5. 至于为什么又要用BAT+VBS的做法,
   一是为了避免代码中本身有特殊字符不便编写与记忆,
   二是我尝试过用BAT生成Unicode编码的文件,但是不管用,于是改用VBS生成,
   三是再让大家了解一点VBS的基础知识:
       a. VBS中一行代码如果太长,为了美观或者便于阅读,可以拆成几行,
          在最末一行之前的每行末尾都要加上一个下划线 “_” 表示换行;
       b. CreateTextFile 这个方法有三个参数,第一个都知道是文件名,
          第二个是True则表示如果文件已存在就改写;第三个是vbTrue(值为 -1)则表示创建Unicode编码的文件。
我用的是 type 把原文件追加上去,也可以改成 copy /y + 来合并。
这个我也不是一下就写出来的,改了好多次,当你已经注意代码精简和美观的时候,就说明对某一方面已经很熟悉了。
作者: Batcher    时间: 2010-2-22 17:01

  1. cmd /u /c echo unicode>a.txt
复制代码

作者: Spring    时间: 2010-2-22 18:04

原帖由 Batcher 于 2010-2-22 17:01 发表
cmd /u /c echo unicode>a.txt


我开始就是用的这个方法,但是合并文件后并不会出现乱码,不信你试试。
作者: qzwqzw    时间: 2010-2-23 22:19

cmd /u 不会生成Unicode编码的BOM头——FF FE
而只是单纯的Unicode文本编码

vbs的creatfile显然是可以生成的

也可以制作和应用批处理自身的BOM头
作者: hklcf    时间: 2010-6-21 02:46

關注一下, 十分有用...
作者: bluewing009    时间: 2010-6-21 10:11

但是这种加密只适用于记事本,用word打开就露馅了~
作者: jackmux    时间: 2012-6-4 09:34

怎么解锁啊




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2