当前位置: 首页 > 图文教程 > 脚本技术 > DOS/BAT > BAT加密工具 EncryBat 非编译型bat批处理加密方案与代码

DOS/BAT
Bootcfg 配置、查询或更改 Boot.ini 文件设置
Assoc显示或修改文件名扩展关联
at计划在指定时间和日期在计算机上运行命令和程序
使用 atmadm 来显示 ATM 适配器上传入和传出呼叫的统计信息
Attrib 显示、设置或删除指派给文件或目录的只读、存档、系统以及隐藏属性
可以使用的批处理参数集合
批处理下使用筛选器的函数
Getmac返回计算机中所有网卡的媒体访问控制 (MAC) 地址以及每个地址的网络协议列表
Cacls 显示或修改任意访问控制列表 (DACL) 文件
Call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。
Chcp 显示活动控制台代码页数量,或更改该控制台的活动控制台代码页
Chdir (Cd) 显示当前目录的名称,或更改当前的文件夹
Chkntfs 显示或指定在启动计算机时计划的自动系统检查是否在 FAT、FAT32 或者 NTFS 卷上运行。
Cipher 在 NTFS 卷上显示或改变文件的加密
Cls 清除命令提示符窗口
Cmd 启动命令解释器 Cmd.exe 的新实例
Cmstp 安装或删除“连接管理器”服务配置文件
color 对于当前会话,更改命令提示窗口的前景和背景色
配置命令提示符的方法
Comp 逐字节地比较两个文件或几组文件的内容

DOS/BAT 中的 BAT加密工具 EncryBat 非编译型bat批处理加密方案与代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 63 ::
收藏到网摘: n/a

bat文件虽然好用,但安全性太脆弱
随便什么人都可以打开查看,甚至修改其中内容
有没有什么办法不把.bat转换成.exe或.com之类,仍是.bat文件
但别人无法查看并修改其中内容???
有没有什么自我加密之类的呢?
高手给个解决的思路吧
目前讨论的方案如下:
1、在批处理代码插入Unicode特征串的方案
  对记事本等使用IsTextUnicode函数识别编码类型的程序有效
  对type/edit/EditPlus/UltraEdit等不使用IsTextUnicode函数的程序无效
2、给批处理代码头部增加Unicode字节序标记(BOM)的方案
EncryBat.rar (zxcv)
  对记事本、Word、UltraEdit、type等支持Unicode编码的程序有效
  对edit/WinRAR内部查看器等不支持Unicode编码的程序无效
3、将批处理代码的回车换行符置换为回车符的方案
  对edit等分别识别回车换行符的编辑器有效
4、对批处理代码进行字典式转换的方案
  代码明文运行时动态生成,故此方案与编辑器无关;
BAT文件加密法 (比Bat2Com那个软件好使<因为那个软件不支持中文>)
方法是:
打开“记事本”将文件开头写入以下的语句
复制代码 代码如下:

for /l %%a in (1,1,10) do ren *.jpg %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a

记事本程序在保存一篇新建的文档时,如果没有指定编码类型,会使用缺省的ANSI类型(对于中文版来说,对应的就是GB码)。
而在打开一篇已创建的文档时,它会分析文档的编码类型,它首先判断文档头部有无BOM(Byte Order Mark,字节序标记,长度为2~3字节),如果有则根据其内容判断编码类型,FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)[1]。
因为事实上有很多非ANSI编码的文档是没有任何BOM的“纯文本”,所以对这些文档不能简单的判断为ANSI编码。而需要使用一系列的统计学算法根据文档内容来猜测文档编码。记事本使用了 IsTextUnicode 函数来判断是否为 Unicode/Unicode big endian 编码,使用 IsTextUTF8 判断是否为 UTF8 编码。
但既然是统计学算法,就难免存在误判,尤其在文档内容过短时,由于样本的容量太小,这种误判的概率会显著增大。比如那个有名的微软与联通有仇的笑话,就是记事本在打开只有"联通"二字的ANSI编码文档时,IsTextUTF8 函数将其误判为UTF8编码[2];同样的误判也发生在 IsTextUnicode 函数上,比如具有 “this app can break”这种具有4335结构的文档,会被误判为 Unicode 编码[3][4]。
需要说明的是,这种误判的可能性是建立在文本较短且其字节位特征不被干扰的前提上的。如果将上述的文本做稍许修改(即使只是增加一个回车),则误判很难再发生。
而 yuanyong630 兄方案的特殊性在于,它的字节串不但具有Unicode特征,而且很长达到了1288字节,也就是说它的Unicode特征性很强,所以可以抵抗一些较短的不具有Unicode特征串的干扰,这是由统计学的规律所决定的。但是在干扰串稍长时,Unicode的特征将会受到显著干扰,直至被 IsTextUnicode 函数认定为非 Unicode。所以,有些朋友总是无法测试成功,应该是与附加的批处理代码长度和内容相关。大家可以测试一下[5]中的代码。
因为其他的编辑器(比如 Word / Wordpad / EditPlus / UltraEdit)使用了更新的编码类型判断算法,所以在 Unicode 判断上改进了不少,而 UTF8 的判断仍然不尽如人意。但因为理论上来说完全准确地算法并不存在,所以我们只能依靠避免使用无BOM的非ANSI文档,或者打开文档时手动指定编码类型。
另外,如果使用记事本保存了这些误判了编码类型的文件,则将难以恢复。如果使用误判编码保存,则将给原文档加上BOM标记,则使用其他编辑器也再无法观察到原文档。如果使用 ANSI 编码保存,则原文档将会被当作 Unicode 文档而被转换,还原的可能性接近于零。
[1] Unicode简介
http://my.opera.com/neutronstar/blog/index.dml/tag/编码
[2] 微软为什么和联通有仇
http://blog.vckbase.com/localvar/archive/2005/07/12/9510.aspx
[3] Notepad bug? Encoding issue?
http://weblogs.asp.net/cumpsd/archive/2004/02/27/81098.aspx
[4] Bush Hid The Facts
http://www.shoutwire.com/comments/16341/Bush_Hid_The_Facts
[5] cry.cmd
对于将 0d 0a 改为 0a 的方法,不如将之改为 0d 。也即将回车换行改为只回车不换行,则当前行的文本会被没有换行的文本行所覆盖,如此反复覆盖叠加。如果在批处理的最后一行添加一句长度大于以上所有行的注释文本,则最终只会显示这样注释。
这样的方法,对EDIT和TYPE是有效的,所以在DOS时代曾一度流行。不过,这个方案与yuanyong630兄的方案类似,只是针对于特定文本处理器的特定文本处理机制,无法适用于所有平台环境。
至于其他的加密方法,也各有缺陷,想达到软件工程的要求是比较困难的。.
BAT加密工具.rar EncryBat.rar