『第
100 楼』:
变量加密程序!
在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 ]
此帖被 +10 点积分 点击查看详情 评分人:【 lxmxn 】 | 分数: +7 | 时间:2006-11-19 10:48 | 评分人:【 hxuan999 】 | 分数: +1 | 时间:2006-11-23 04:46 | 评分人:【 axi 】 | 分数: +2 | 时间:2007-3-23 10:45 |
|
附件
1: 批处理加密解密工具集.rar (2007-3-6 04:30, 64.09 K, 下载附件所需积分 1 点
,下载次数: 328)
|