中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 04:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (原创)批处理加密+解密(感谢namejm和bjsh版主!) 查看 2,240 回复 22
楼 主 (原创)批处理加密+解密(感谢namejm和bjsh版主!) 发表于 2008-03-29 18:12 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
  经本处理后处理后的批处理要经过加密和解密两个过程才能运行,同时经过加解密过程后使每行后增加了18位空字符,现已解决。
  相信经过本批处理加密的文件很难被破解,可以便于大家将不经常使用的批处理都转换成文本文件收藏起来,要用的时候再解密出来就可以了,这也是本人花这么大心思的初衷。
为了便于分类保管,特别加入人工选择输出文件名功能。
友情提示:请大家小心使用变量延迟,在本P中就遇到了处理特殊字符"!"的问题,真的不瞒大家,我为这个是费尽了心力(出现的问题本人在9楼做了详细说明)。
  感谢namejm的共享资料解决了关键问题,脱去因解决特殊字符"!"替换时生成的前后双引号(本人在16楼贴出了其原文,大家可以去学习学习以少走弯路),本批处理已修改如下:
@echo off&color 9f&mode con lines=10
title 批处理加密解密工具
echo.&echo.&echo.&echo.
echo made by zw19750516
ping /n 3 127.1 >nul
cls
echo.&echo.&echo.&echo.
set /p a=  请将要处理的批处理或文本文件拖放到这里:
:select
cls
echo.&echo.&echo.&echo.
set /p b= 请选择要做何处理1.加密 2.解密)
if "%b%"=="1" goto change
if "%b%"=="2" goto back
cls
echo.&echo.&echo.&echo.
echo 输入无效,请返回正确输入!
ping /n 3 127.1 >nul&goto select
:change
cls
echo.&echo.&echo.&echo.
set c=change
set /p c= 请输入要生成的txt文件名(默认为change):
for /f "tokens=*" %%i in ('findstr ".*" %a%' do (
set str=%%i
setlocal enabledelayedexpansion
set str=!str:a=犇!
set str=!str:b=猋!
set str=!str:c=骉!
set str=!str:d=蟲!
set str=!str:e=麤!
set str=!str:f=毳!
set str=!str:g=淼!
set str=!str:h=掱!
set str=!str:i=焱!
set str=!str:j=垚!
set str=!str:k=煊!
set str=!str:l=烜!
set str=!str:m=煐!
set str=!str:n=焓!
set str=!str=烓!
set str=!str:p=焺!
set str=!str:q=瓛!
set str=!str:r=炜!
set str=!str:s=翙!
set str=!str:t=燚!
set str=!str:u=焜!
set str=!str:v=琰!
set str=!str:w=燊!
set str=!str:x=眚!
set str=!str:y=奡!
set str=!str:z=慤!
echo "!str!" >>%c%.txt rem 为了处理特殊字符"!"无耐给字符加上了双引号
endlocal
)
cls
echo.&echo.&echo.&echo.
echo 正在转换中请稳候...
ping /n 3 127.1 >nul
cls
echo.&echo.&echo.&echo.
echo 已转换加密完毕,转换后的文件为%c%.txt,
echo 请妥协保管好加密后的文件,按任意键退出。
pause >nul&goto :eof
:back
cls
echo.&echo.&echo.&echo.
set c=back
set /p c= 请输入要生成的bat文件名(默认为back):
for /f "tokens=*" %%i in ('findstr ".*" %a%' do (
set str=%%~i rem 这里可有大学问(脱去字符双引号)
setlocal enabledelayedexpansion
set str=!str:犇=a!
set str=!str:猋=b!
set str=!str:骉=c!
set str=!str:蟲=d!
set str=!str:麤=e!
set str=!str:毳=f!
set str=!str:淼=g!
set str=!str:掱=h!
set str=!str:焱=i!
set str=!str:垚=j!
set str=!str:煊=k!
set str=!str:烜=l!
set str=!str:煐=m!
set str=!str:焓=n!
set str=!str:烓=o!
set str=!str:焺=p!
set str=!str:瓛=q!
set str=!str:炜=r!
set str=!str:翙=s!
set str=!str:燚=t!
set str=!str:焜=u!
set str=!str:琰=v!
set str=!str:燊=w!
set str=!str:眚=x!
set str=!str:奡=y!
set str=!str:慤=z!
echo !str:~,-18! >>%c%.bat rem 脱掉两次替换时每行后生成的17位空格
endlocal
)
cls
echo.&echo.&echo.&echo.
echo 正在转换中请稳候...
ping /n 3 127.1 >nul
cls
echo.&echo.&echo.&echo.
echo 已解密完毕,解密后的文件为%c%.bat,按任意键退出。
pause >nul&goto :eof


[ Last edited by zw19750516 on 2008-3-31 at 01:14 PM ]
批处理之家新域名:www.bathome.net
2 发表于 2008-03-29 19:19 ·  中国 江苏 无锡 宜兴市 电信
中级用户
★★
积分 487
发帖 212
注册 2007-04-01 08:22
19年会员
UID 83597
性别 男
状态 离线
呵呵,想法不错,支持楼主,顺便学习下!~
3 发表于 2008-03-29 20:45 ·  中国 陕西 汉中 电信
初级用户
积分 136
发帖 49
注册 2007-01-04 08:28
19年会员
UID 75413
性别 男
状态 离线
呵呵不错!就是好像不能再执行吧!
4 我测试了可以的: 发表于 2008-03-29 20:50 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
但对于"!"有点感冒!!!
批处理之家新域名:www.bathome.net
5 发表于 2008-03-30 00:24 ·  中国 四川 泸州 联通
高级用户
★★★
积分 609
发帖 374
注册 2006-08-02 22:38
20年会员
UID 59720
状态 离线
我测试了
这种替换后不能运行了,也不支持中文.必须解密后才能运行的
6 发表于 2008-03-30 01:45 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
继续加油
7 发表于 2008-03-30 01:55 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
有个问题:
for 可以精简重复的任务,但就是不能精简多次set赋值这样的操作,
就像:
set str=!str:a=犇!
set str=!str:b=猋!
set str=!str:c=骉!
set str=!str:d=蟲!
set str=!str:e=麤!
set str=!str:f=毳!
set str=!str:g=淼!
set str=!str:h=掱!
set str=!str:i=焱!
set str=!str:j=垚!
set str=!str:k=煊!
set str=!str:l=烜!
set str=!str:m=煐!
set str=!str:n=焓!
set str=!str:o=烓!
set str=!str:p=焺!
set str=!str:q=瓛!
set str=!str:r=炜!
set str=!str:s=翙!
set str=!str:t=燚!
set str=!str:u=焜!
set str=!str:v=琰!
set str=!str:w=燊!
set str=!str:x=眚!
set str=!str:y=奡!
set str=!str:z=慤!

这样的代码,总是不能精简,这和指针有关吗?
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
8 友情提示: 发表于 2008-03-30 11:44 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
  批处理加密后是不能运行的,想恢复只要把原来加密时生成的chang.txt放进去解密还原成back.bat就可以运行了。同时,不好意思,发贴时没有写好说明,在这里补上了。
批处理之家新域名:www.bathome.net
9 关于处理特殊字符"和! !的疑惑: 发表于 2008-03-30 12:05 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
  本加解密工具现在有个最大的问题没有得到解决,如果被处理的批处理中含有"! !"的话,所有的"! !"将不被处理。
  我做了大量的处理和测试,只要加入set str="!str:^!=^!!"(也试着加入call,set str=!str:^!=^!!不起作用)进for循环中进可以解决"! !"不被处理的问题。rem实际上只要加入双引号就可以了,根本不要对!进行替换处理,以前我是没搞清楚,导致写入无效命令。
  但随之出现的新的问题更叫人头痛,大家注意到在for循环中加入str="!str:^!=^!!"实际同时给每个%str%前后都加上了字符",原本简单的以为把echo !str:~,-18! >>%c%.bat修改下就可以解决了。但当我修改成echo !str:~2,--20! >>%c%.bat
后却发现解密出来的文件各行中有的""被处理掉了,有的前面的"还在,肯定会导致 不能运行,这就表明在每行前后增加的"字符导致增加的字符数并不一样
  真的是叫人头痛啊,同样是前后增加的字符"但为什么会出现各行前后增加的字符数不一样的情况啊,望高人指点啊。
  对了,问题比较复杂,不知道我说清楚了没有,版主可不要扣我分啊。
===============================================
本问题已在16楼得到解决,在此再次感谢namejm和bjsh版主。

[ Last edited by zw19750516 on 2008-3-31 at 01:16 PM ]
批处理之家新域名:www.bathome.net
10 为了解决问题得到提高: 发表于 2008-03-30 13:28 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
为了解决问题得到提高,自己顶一下了。
批处理之家新域名:www.bathome.net
11 发表于 2008-03-30 13:38 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
你所加密后文件并不能运行
搜索一下s11ss的发贴 应该有收获的
用变量替换就可以
简单!简单!再简单!
12 再顶: 发表于 2008-03-30 15:30 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
问题没解决啊,高手们给点建议啊,急啊!!!!!!!!!!!!!!!!!
批处理之家新域名:www.bathome.net
13 发表于 2008-03-30 16:13 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
含有特殊字符的处理建议还是使用VBS的好
14 发表于 2008-03-30 21:09 ·  中国 北京 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
.这样的解/加密太容易露馅了.论坛上还有其他的方法。自己看看把.
15 继续顶: 发表于 2008-03-30 22:58 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
  怎么没人来帮我解决我在9楼提出的问题啊,我都搜遍了论坛了,还是不知所以然!急啊!
批处理之家新域名:www.bathome.net
论坛跳转: