中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-30 07:00
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创][讨论]非编译型批处理加密方案与代码 精华I 查看 110,911 回复 364
91 发表于 2006-10-20 20:03 ·  中国 湖北 武汉 洪山区 电信
初级用户
积分 48
发帖 23
注册 2006-02-23 22:11
20年会员
UID 50842
状态 离线
才发现原来可以这样,学习中。。。。。。。
92 发表于 2006-10-21 04:37 ·  中国 黑龙江 哈尔滨 联通
新手上路
积分 8
发帖 4
注册 2006-10-19 02:50
19年会员
UID 66667
状态 离线
有效……支持……感谢 ……! 绝对的智慧和技术的结晶!
那请问楼上的,怎么重新显示内容呢?有盾必有矛吧?
93 发表于 2006-10-21 11:31 ·  中国 江苏 宿迁 电信
新手上路
积分 3
发帖 2
注册 2006-10-19 00:17
19年会员
UID 66588
状态 离线
好复杂啊~我看不懂~
94 发表于 2006-10-21 14:37 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
  对这加密与解密的原理还是不太清楚,请哪位高手口述一下。谢了。

  另外,对于F82中pengfei兄关于加密与加密的代码,自己测试了一下,发现只是在批处理的首行加上了“author:pengfei@www.cn-dos.net”这一句,貌似没起到什么加密与解密的效果。不知其因,望高手们不吝施教。
95 发表于 2006-10-31 13:07 ·  中国 山东 济南 联通
新手上路
积分 1
发帖 4
注册 2006-10-12 01:49
19年会员
UID 65389
状态 离线
我很菜,老鸟别笑话我 呵呵~~ 
我以前见到过一个方法 很简单
就是用十六位编辑器给BAT加上FFEF文件头,让记事本一类的文本编辑器以UNICODE方式打开批处理文件
不过加上后会导致被加密批处理文件的第一条命令执行错误,
我们可以在FFFE后面加了一个0D0A,就是回车换行,
虽然不影响第一条命令执行,但是会在屏幕上出现 “不是内部或外部命令,也不是可运行的程序或批处理文件” 的错误信息,
这里可以加个 63 6C 73 0D 0A  既 cls(回车)
96 发表于 2006-10-31 22:33 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
20年会员
UID 42173
性别 男
状态 离线
楼上好方法!

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
97 发表于 2006-11-01 22:22 ·  中国 广东 深圳 龙岗区 电信
新手上路
积分 12
发帖 6
注册 2006-03-29 16:03
20年会员
UID 52996
状态 离线
看这一个帖子,明白了好一些东西,谢谢分享。
98 发表于 2006-11-03 01:23 ·  中国 山东 烟台 莱阳市 联通
初级用户
积分 31
发帖 15
注册 2006-11-02 04:46
19年会员
UID 69254
性别 男
状态 离线
长知识!
99 发表于 2006-11-19 09:43 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
19年会员
UID 58987
来自 湖南.娄底
状态 离线
汗... 刚才论坛不能上, 一提交居然发了两贴.

[ Last edited by pengfei on 2006-11-19 at 09:50 AM ]
100 变量加密程序! 发表于 2006-11-19 09:49 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
19年会员
UID 58987
来自 湖南.娄底
状态 离线
在DOS联盟这几个月来让我学到了不少东西, 看到这里的人都这么热心, 很受感动. 在Windows普及的今天, 还有这么多人执著地爱着DOS.

通过这么久的讨论, 大家对混淆文本编码的加密方案有了一定的了解, 也学到了不少知识. 这种加密方案制作的加密程序比较成熟, 使用方便. "bat加密最终版.bat"和"bat强制加密程序.exe"

同时, 也写了针对这两种加密方法的解密程序. "bat解密程序.bat"

前阵忽然想到了用变量加密的方法, 理论上觉得可行, 于是开始编写"bat变量加密程序.bat"一写才觉得不是那么好玩的. 首先是对密码转换统一代码, 接下来遇到很多问题.

这种算法还不是很成熟, 虽然经过测试, 替时没有发现错误. 但如果控制字符, 运算符, 转义符等特殊字符; 还有引号配对, 括号配对, 环境变量, 替换变量, 参数等符号在同一行以不同顺序出现就有可能加密失败.

这只是我胡乱写的测试代码, 真正大家加密的批处理要是出现这些字符的集合, 我想批处理加密后的可靠性就不得而知了. 呵呵~ 说到这里大家不要不敢用哦...

测试过几十个批处理, 其中有多达千余行的脚本, 有的批处理中还有大量的特殊字符, 加密后没有发现错误. 只是某些字符互相影响有可能出现未知错误. 需要大家更普遍的测试才知道.

突然发现讨论这么久, 原来11楼3742668版主对这种加密方法已经有所研究了. 呵呵~

建议大家先使用变量加密方法加密后, 再用"批处理加密解密工具集.rar"的"BAT加密最终版"或"BAT强制加密程序"再次进行加密. 这样能起到比较好的加密效果. 如果要看源码, 对方需要解密两次才可以.

修正了加密后大写变小写的缺陷, 欢迎大家测试~


@echo off
title bat变量加密程序
mode con: cols=80 lines=25
color 27
set route=%cd%
if not %1*==* set ravel=%1&goto jmp
:index
cls
echo ╭───────────────╮
echo │ │
echo ╭─────────┤ BAT 变 量 加 密 程 序 ├─────────╮
echo │ │ │ │
echo │ 测试版: ╰───────────────╯ │
echo │ │
echo │ 本工具采用变量截取加密算法, 加密后文件大小会增加5-10倍, 批处理 │
echo │ 的运行效率不会有任何影响. │
echo │ │
echo │ 在下面输入需要加密的批处理按回车键即可, 建议直接把待加密的 │
echo │ 批处理文件拖曳至本窗口释放. │
echo │ │
echo │ 加密成功后会在本程序目录下生成"new_待加密文件名.bat"格式的文件. │
echo │ │
echo │ 注意: 1. 屏幕如无"加密成功"的提示或中间退出, 说明加密失败. │
echo │ 2. 此加密算法要处理的数据量很大, 速度比较慢, 请耐心等待. │
echo │ 3. 可能还存在其他未知缺陷, 加密后请自行检测错误. │
echo │ 4. 修正了加密后大写字母变小写的缺陷. │
echo │ │
echo │ pengfei@www.cn-dos.net │
echo ╰───────────────────────────────────╯
echo.
set ravel=
set /p ravel= 请输入要加密的批处理(q=exit):
:jmp
set "ravel=%ravel:"=%"
if /i "%ravel%"=="q" exit
echo %ravel% | findstr /c:( /c:) >nul 2>nul && goto :nay
if /i "%ravel:~-4%"==".bat" if exist "%ravel%" goto go
if /i "%ravel:~-4%"==".cmd" if exist "%ravel%" goto go
:nay
cls
echo ╭──────────╮
echo ╭─────────┤ 文 件 错 误 ├────────╮
echo │ ╰──────────╯ │
echo │ │
echo │ 1. 指定文件不存在或文件不是批处理类型. │
echo │ │
echo │ 2. 文件路径中含有括号. │
echo │ │
echo │ 3. 文件名中存在空格. │
echo │ │
echo │ │
echo ╰─────────────────────────────╯
echo.
echo.
echo 按任意键重新输入...
pause >nul
goto index
:go
for /f "tokens=*" %%c in ("%ravel%") do (
cd /d "%%~dpc"
set root="%route%\new_%%~nxc"
set file=%%~nxc
)
for %%i in (%file%) do if not "%%i"=="%file%" goto nay
if exist %root% call :exist
if exist %root% attrib -s -h -r -a %root%
call :caput
cls
echo.
echo         \\\^|///
echo         \\ .-.- //
echo         ( .@.@ )
echo +-------oOOo-----(_)-----oOOo---------+
echo ^|                   ^|
echo ^|  正在加密中, 请稍等......    ^|
echo ^|                   ^|
echo +----------oooO-------Oooo------------+
echo.
echo.
for /f "delims=" %%i in (%file%) do (
set x=%%i■
call :start
)
cls
echo.
echo         \\\^|///
echo         \\ .-.- //
echo         ( .@.@ )
echo +-------oOOo-----(_)-----oOOo---------+
echo ^|                   ^|
echo ^|  恭喜, 加密成功!    ^|
echo ^|                   ^|
echo +----------oooO-------Oooo------------+
echo.
echo.
echo 按任意键退出...
pause >nul
goto :eof
:start
set term=0
set vcd=0
set "x=%x:"=◎%"
set "y=%x%"
set num=0
:follow
if not "%y%"=="" (
set "y=%y:~1%"
if "%y:~0,1%"=="◎" set /a num+=1
goto :follow
)
set /a z=%num%%%2
if "%x:~0,1%"==":" if not "%x:~0,2%"==":" set term=1
set result=
:next
if not "%x:~0,1%"=="■" (
if "%term%"=="1" (
if "%x:~0,1%"=="%%" set "result=%result%%x:~0,1%"&set "x=%x:~1%"&set term=0&goto next
if "%x:~0,1%"==" " set "result=%result%%x:~0,1%"&set "x=%x:~1%"&set term=0&goto next
if "%x:~0,1%"=="=" set "result=%result%%x:~0,1%"&set "x=%x:~1%"&set term=0&goto next
if "%x:~0,1%"==")" set "result=%result%%x:~0,1%"&set "x=%x:~1%"&set term=0&goto next
set "result=%result%%x:~0,1%"&set "x=%x:~1%"&goto next
)
if "%x:~0,1%"=="%%" set "result=%result%%x:~0,1%"&set "x=%x:~1%"&set term=1&goto next
if "%x:~0,1%"==" " set "result=%result% "&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="a" set "result=%result%%%appdata:~-1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="b" set "result=%result%%%tcopu:~1,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="c" set "result=%result%%%userprofile:~5,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="d" set "result=%result%%%appdata:~15,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="e" set "result=%result%%%comspec:~-1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="f" set "result=%result%%%tcopu:~11,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="g" set "result=%result%%%programfiles:~6,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="h" set "result=%result%%%tcopu:~2,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="i" set "result=%result%%%programfiles:~-4,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="j" set "result=%result%%%tcopu:~4,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="k" set "result=%result%%%tcopu:~5,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="l" set "result=%result%%%appdata:~-13,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="m" set "result=%result%%%appdata:~7,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="n" set "result=%result%%%userprofile:~14,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="o" set "result=%result%%%appdata:~-7,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="p" set "result=%result%%%appdata:~-15,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="q" set "result=%result%%%tcopu:~6,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="r" set "result=%result%%%programfiles:~4,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="s" set "result=%result%%%comspec:~-16,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="t" set "result=%result%%%comspec:~-13,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="u" set "result=%result%%%userprofile:~6,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="v" set "result=%result%%%tcopu:~8,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="w" set "result=%result%%%os:~5,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="x" set "result=%result%%%comspec:~-2,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="y" set "result=%result%%%comspec:~12,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="z" set "result=%result%%%tcopu:~9,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="0" set "result=%result%%%tcopu:~17,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="1" set "result=%result%%%tcopu:~21,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="2" set "result=%result%%%comspec:~-9,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="3" set "result=%result%%%comspec:~-10,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="4" set "result=%result%%%tcopu:~14,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="5" set "result=%result%%%tcopu:~16,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="6" set "result=%result%%%tcopu:~33,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="7" set "result=%result%%%tcopu:~12,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="8" set "result=%result%%%tcopu:~23,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="9" set "result=%result%%%tcopu:~29,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="(" set "result=%result%%%tcopu:~25,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"==")" set "result=%result%%%tcopu:~30,1%%"&set "x=%x:~1%"&goto next
if "%x:~0,1%"=="@" set "result=%result%%%tcopu:~32,1%%"&set "x=%x:~1%"&goto next
if "%vcd%"=="1" (
if "%x:~0,1%"=="◎" set vcd=0
if "%x:~0,1%"=="^" (
set "result=%result%^^^^^"&set "x=%x:~1%"&goto next
) else (
set "result=%result%%x:~0,1%"&set "x=%x:~1%"&goto next
)
)
if "%x:~0,1%"=="◎" set "result=%result%%x:~0,1%"&set "x=%x:~1%"&set vcd=1&goto next
set "result=%result%%x:~0,1%"&set "x=%x:~1%"&goto next
)
set "result=%result:◎="%"
if "%z%"=="0" (
set /p "auot=%result%"<nul>>%root%
echo.>>%root%
goto :eof
)
>>%root% echo %result%
goto :eof
:caput
(echo @%%comspec:~-1%%%%userprofile:~5,1%%h%%appdata:~-7,1%% %%appdata:~-7,1%%%%programfiles:~-5,1%%%%programfiles:~-5,1%%
echo %%comspec:~-16,1%%%%comspec:~-1%%%%comspec:~-13,1%% %%comspec:~-13,1%%%%userprofile:~5,1%%%%appdata:~-7,1%%%%appdata:~-15,1%%%%userprofile:~6,1%%=%%%%bh%%%%jkq%%%%vz%%%%f7%%%%4c50t%%%%u1w8%%%%^(cdf9^)%%%%@6tc%%%%)>%root%
goto :eof
:exist
cls
echo ╭──────────╮
echo ╭─────────┤ 替 换 文 件 ├────────╮
echo │ ╰──────────╯ │
echo │ │
echo │ 注意: 当前目录存在待加密批处理的同一更名文件. │
echo │ │
echo │ 1: 替换 2: 重新输入 │
echo │ │
echo │ │
echo ╰─────────────────────────────╯
echo.
echo.
set choice=
set /p choice= 请选择(1 2)回车:
if "%choice%"=="1" goto :eof
if "%choice%"=="2" goto index
goto exist


我将这几个加密方案和解密重新写了一下, 统一了界面等, 功能也更完善. 测试环境Windows XP sp2

[ Last edited by pengfei on 2007-3-6 at 04:16 AM ]
本帖最近评分记录 (共 3 条) 点击查看详情
评分人分数时间
lxmxn +7 2006-11-19 10:48
hxuan999 +1 2006-11-23 04:46
axi +2 2007-03-23 10:45
附件
批处理加密解密工具集.rar (64.09 KiB, 下载附件所需积分 1 点, 下载次数: 328)
业精于勤而荒于嬉,形成于思而毁于随。
101 发表于 2006-11-20 04:06 ·  中国 上海 浦东新区 电信
初级用户
★★
积分 153
发帖 68
注册 2006-10-12 22:25
19年会员
UID 65507
来自 上海
状态 离线
Originally posted by willsort at 2006-7-23 14:36:
Re pengfei:

这种加密机制通用性较低,适用平台也过于狭窄,而且存在副作用(会将jpg文件改名)。因此建议各位不要在这个方案上多下功夫了。


经测试,没有将JPG文件改名!
个人主页-找餐厅:http://www.canting.cc
102 发表于 2006-11-20 04:39 ·  中国 上海 浦东新区 电信
初级用户
★★
积分 153
发帖 68
注册 2006-10-12 22:25
19年会员
UID 65507
来自 上海
状态 离线
Originally posted by zxcv at 2006-7-23 16:10:
更简单的:
新建一个“a.txt”文本打开,复制【ൡ挊獬਍】(不含【】),粘贴到“a.txt”文本中保存时提示“含有Unicode字符....”,选“取消”,编砮..


这招绝,不过有错误提示!


补充一下,将需加密的BAT首行空出来,就不会报错了!!!
:lol:
个人主页-找餐厅:http://www.canting.cc
103 发表于 2006-11-21 03:10 ·  中国 浙江 金华 电信
新手上路
积分 9
发帖 6
注册 2005-07-15 13:51
20年会员
UID 40737
性别 男
状态 离线
如果是高手的话可能不难呀...
只是对小菜可以...
104 发表于 2006-11-21 03:14 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
版主,此帖水分太大,能否删除部分灌水帖子,包括我的这个帖子,以利于查看、学习?
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
105 发表于 2006-11-21 15:29 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
在 74 楼基础上将首加密行用“2>nul”屏蔽首加密行的错误输出
附件
EncryBat.rar (427 bytes, 下载附件所需积分 1 点, 下载次数: 201)
论坛跳转: