加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

批处理文件的编写8-BAT文件的加密与解密

(2008-09-04 08:32:27)
标签:

批处理

cmd

for

分类: 命令行和批处理

  记事本程序在保存一篇新建的文档时,如果没有指定编码类型,会使用缺省的ANSI类型(对于中文版来说,对应的就是GB码)。


  而在打开一篇已创建的文档时,它会分析文档的编码类型,它首先判断文档头部有无BOM(Byte order Mark,字节序标记,长度为(2-3字节),如有则根据其内容判断编码类型,FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。

 

  因为事实上有很多非ANSI编码的文档是没有任何BOM的“纯文本”,所以对这些文档不能简单的判断为ANSI编码。而需要使用一系列的统计学算法根据文档内容来猜测文档编码。记事本使用了 IsTextUnicode 函数来判断是否为Unicode/Unicode big endian 编码,使用 IsTextUTF8 判断是否为 UTF8 编码。但既然是统计学算法,就难免存在误判,尤其在文档内容过短时,由于样本的容量太小,这种误判的概率会显著增大。

 

  比如那个有名的微软与联通有仇的笑话,就是记事本在打开只有“联通”二字的ANSI编码文档时,IsTextUTF8 函数将其误判为UTF8编码。

 

示例1:

  新建一个记事本文本文档,然后顶头输入“联通”两个字,保存以后再打开,看看是不是变成“■”了。然后点另存为,注意看“编码”里是不是由“ANSI”变成“UTF8”了。

 

  同样的误判也发生在IsTextUnicode 函数上,比如“this app can break”这种具有4335结构的文档,会被误判为 Unicode 编码。

 

示例2:

  新建一个记事本文本文档,然后顶头输入“this app can break”,保存以后再打开,看看是不是变成“桴獩愠灰挠湡戠敲歡”了。然后点另存为,注意看“编码”里是不是由“ANSI”变成“Unicode”了。那么,什么是4335结果文档呢?就是所有形式是“AAAA AAA AAA AAAAA”的。这里的A可以是任意数字或字母等。这样的文档,都会引起IsTextUnicode 函数的误判。


  需要说明的是,这种误判的可能性是建立在文本较短且其字节位特征不被干扰的前提上的。如果将上述的示例1示例2中的文本做稍许修改(即使只是增加一个回车),则误判很难再发生。而这种方法的特殊性在于,它的字节串不但具有Unicode特征,而且很长达到了1288字节,也就是说它的Unicode特征性很强,所以可以抵抗一些较短的不具有Unicode特征串的干扰,这是由统计学的规律所决定的。但是在干扰串稍长时,Unicode的特征将会受到显著干扰,直至被 IsTextUnicode 函数认定为非 Unicode。所以,有些朋友总是无法测试成功,应该是与附加的批处理代码长度和内容相关。因为其他的编辑器(比如 Word / Wordpad / EditPlus / UltraEdit)使用了更新的编码类型判断算法,所以在 Unicode 判断上改进了不少,而 UTF8 的判断仍然不尽如人意。但因为理论上来说完全准确地算法并不存在,所以我们只能依靠避免使用无BOM的非ANSI文档,或者打开文档时手动指定编码类型。


  另外,如果使用记事本保存了这些误判了编码类型的文件,则将难以恢复。如果使用误判编码保存,则将给原文档加上BOM标记,则使用其他编辑器也再无法观察到原文档。如果使用 ANSI 编码保存,则原文档将会被当作 Unicode 文档而被转换,还原的可能性接近于零。例如,将示例1和示例2中的内容清空,不做其他改动,会发现其编码类型依然没有变化,即没有回到正常的ANSI编码。

 

  那么,编码的类型与今天我们要讲的BAT批处理文件加密有什么关系吗?当然!我们知道,查看BAT批处理文件是一般使用记事本。而默认的输入和查看的编码类型就是ANSI编码。所以,简单的加密方法就是混淆他的编码类型。那么,怎么做呢?难道在开头输入“联通”吗?当然不是!其实方法很简单,就是在开头大量加入“%%a”。

 

  我们先看一个示例:

 

示例3:

@echo off
title 本程序仅用于 Windows XP Pro SP2 输入法的修复寒夜孤星【初学者】
color 2f
echo.
echo.
date /t
echo.
echo.
echo *************************************************************
echo *       本程序仅用于 Windows XP Pro SP2 输入法的修复        *
echo *                    寒夜孤星【初学者】                     *
echo *************************************************************
echo.
echo.
pause

 

  这是一个很简单的批处理示例,我们要做的,就是在其前面加上大量的“%%a”。如下示例:

 

示例4:
%%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a
cls
@echo off
title 本程序仅用于 Windows XP Pro SP2 输入法的修复寒夜孤星【初学者】
color 2f
echo.
echo.
date /t
echo.
echo.
echo *************************************************************
echo *       本程序仅用于 Windows XP Pro SP2 输入法的修复        *
echo *                    寒夜孤星【初学者】                     *
echo *************************************************************
echo.
echo.
pause

 

  按照正常的方式保存为BAT批处理文件,看看是什么效果?是不是运行正常啊。那么用记事本再编辑打开他呢?如下示例:

 

示例5:

┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥⁡┥ൡ䀊捥潨漠晦਍楴汴⁥뺱첳쏓�圠湩潤獷堠⁐牐偓′ꢷ쒵�뒸꺺맒승쟐뺡ꟑ�뾡਍潣潬⁲昲਍捥潨മ攊档⹯਍慤整⼠൴攊档⹯਍捥潨മ攊档⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪പ攊档‪†††뺱첳쏓�圠湩潤獷堠⁐牐偓′ꢷ쒵�뒸††††പ攊档‪†††††††††먠튮릹탂ꇇ뎾퇵햧ꇟ₿††††††††††പ攊档⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪⨪പ攊档⹯਍捥潨മ瀊畡敳਍

 

  这个,这个,这个,汗一个先。谁能看懂?反正我是晕了,那你呢?没晕?在想什么?难道想另存为ANSI编码看看?好啊,来吧,什么结果?当然变成如下示例了:

 

示例6:

┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥?┥??捥潨漠晦?楴汴???????圠湩潤獷堠?牐?偓′???????????????潣潬?昲?捥潨?攊档??慤整??攊档??捥潨?攊档????????????????????????????????攊档???????????圠湩潤獷堠?牐?偓′??????????攊档????????????????????????????????攊档????????????????????????????????攊档??捥潨?瀊畡敳?

 

  有两点需要注意:1,注意:命令部分随便输入,但是命令后面不要有空格;2,“%%a”的后面要加cls清屏命令。不然运行的时候会有如下图示例的现象出现:

批处理文件的编写8-BAT文件的加密与解密

 

   那么,如何解密呢?最简单的方法就是用比如 Word / Wordpad / EditPlus / UltraEdit 等文本编辑软件打开他们,或者直接在cmd下用edit打开。

 

  这样手工加密、解密,可能有人觉得麻烦,那么怎么办,下面提供了专门用于这个的加密、解密的批处理哦。

 

:示例7-BAT混淆编码类型加密:

author:http://blog.sina.com.cn/hygxchxz
%%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a
cls
@echo off
color 2f
title 本程序仅用于对BAT批处理文件进行混淆编码类型加密-寒夜孤星【初学者】
:start
cls
echo.
echo.
date /t
echo.
echo.
echo *************************************************************
echo *      本程序仅用于对BAT批处理文件进行混淆编码类型加密      *
echo *                    寒夜孤星【初学者】                     *
echo *************************************************************
echo.
echo.
echo 说明: 在下面输入需要加密的批处理文件, 直接输入批处理文件名为加密当前目录下的BAT
echo    也可以带路径指定任意BAT. 当前目录下生成的hanye.bat文件即为加密的批处理。
echo.
echo.
echo.
echo.
set /p file=请输入需要加密的批处理后按回车键(q=退出):
if "%file%"=="q" goto quit
echo %file%|findstr /i "\.bat$">nul && goto go
echo %file%|findstr /i "\.cmd$">nul && goto go
cls
echo.
echo.
echo *************************************************************
echo *          您的键入有错误,请按任意键以重新输入。           *
echo *                    寒夜孤星【初学者】                     *
echo *************************************************************
echo.
echo.
pause>nul
goto start
:go
if not exist "%file%" goto newly
if exist hanye.bat copy hanye.bat hanyebak.bat
echo %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a >"%tmp%\hanye.tmp"
echo cls>>"%tmp%\hanye.tmp"
type "%file%">>"%tmp%\hanye.tmp"
setlocal enabledelayedexpansion
for %%i in ("%tmp%\hanye.tmp") do (
echo %%~zi >nul 2>nul
set size=%%~zi
set num=!size:~-1!
set /a mod=!num!%%2
if !mod! equ 0 (goto even) else (goto odd)
)
:even
copy "%tmp%\hanye.tmp" hanye.bat
del "%tmp%\hanye.tmp"
cls
echo.
echo.
echo *************************************************************
echo *        加密已完成,请到当前目录下查看hanye.bat文件。      *
echo *  或按任意键退出。。。。。。           寒夜孤星【初学者】  *
echo *************************************************************
echo.
echo.
pause>nul
goto quit
:odd
echo. >>"%tmp%\hanye.tmp"
copy "%tmp%\hanye.tmp" hanye.bat
del "%tmp%\hanye.tmp"
cls
echo.
echo.
echo *************************************************************
echo *        加密已完成,请到当前目录下查看hanye.bat文件。      *
echo *  或按任意键退出。。。。。。           寒夜孤星【初学者】  *
echo *************************************************************
echo.
echo.
pause>nul
goto quit
:newly
cls
echo.
echo.
echo *************************************************************
echo *  路径键入有错误,实际上,您可以直接拖曳待加密文件到本窗口 *
echo *  或按任意键重新开始。。。。。。       寒夜孤星【初学者】  *
echo *************************************************************
echo.
echo.
pause>nul
goto start
:quit
exit

 

:示例8-BAT混淆编码类型解密:

@echo off
title 本程序仅用于对BAT批处理文件进行混淆编码类型解密-寒夜孤星【初学者】
:start
color 2f
cls
echo.
echo.
date /t
echo.
echo.
echo *************************************************************
echo *      本程序仅用于对BAT批处理文件进行混淆编码类型解密      *
echo *                    寒夜孤星【初学者】                     *
echo *************************************************************
echo.
echo.
set route=%cd%
set ravel=
set /p ravel=    请输入要解密的批处理:
set "ravel=%ravel:"=%"
echo     或者直接拖曳文件到本窗口即可。
if /i "%ravel:~-4%"==".bat" if exist "%ravel%" goto go
if /i "%ravel:~-4%"==".cmd" if exist "%ravel%" goto go
cls
echo.
echo.
echo *************************************************************
echo *   指定文件不存在或文件不是批处理类型,按任意键重新输入。  *
echo *                    寒夜孤星【初学者】                     *
echo *************************************************************
echo.
echo.
pause >nul
goto start

:go
for /f "tokens=*" %%c in ("%ravel%") do (
  cd /d "%%~dpc"
  if exist "%route%\guxing_%%~nxc" attrib -s -h -r -a "%route%\guxing_%%~nxc"
  echo author:http://blog.sina.com.cn/s/blog_51a4af870100avu2.html>"%route%\guxing_%%~nxc"
  for /f "tokens=*" %%i in (%%~nxc) do (
    echo %%i>>"%route%\guxing_%%~nxc"
  )
)
cls
echo.
echo.
echo *************************************************************
echo * 解密已完成,请到当前目录下查看guxing_待解密文件名.bat文件.*
echo *        或按任意键退出。。。。。。寒夜孤星【初学者】       *
echo *************************************************************
echo.
echo.
pause >nul
exit

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有