中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]文本加解密程序(bat+debug)
« [1] [2] »
作者:
标题: [原创]文本加解密程序(bat+debug) 上一主题 | 下一主题
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『楼 主』:  [原创]文本加解密程序(bat+debug)

昨晚有人发了个VB的文本加密程序
使用了逐字节加1的恺撒密码
很快我们的版主老兄就出了VBS版
想起这种简单的文本处理还是汇编更轻巧些
只是昨天又热又困编代码还是算了

今天一场中雨凉快了许多
虽然紧张忙碌
但还是抽空写了一下
省得过了明天天一热又忘在脑后
-------------------------------------------------------

起初打算完全实现+1/-1的密码
后来考虑到为我等懒人谋福
觉得还是异或更简单实用些
+1实在太好猜了,我当初就破过某个bat2exe程序+1后的加密代码
异或算法相对比较难猜一些
而且加密/解密可以重用一个模块

本来想支持多位密码的
这样才具有实用性
可惜无论+1或者+X还是异或X都可能会得到FF
而FF无法输出到标准输出的
为了代码简单起见
还是使用了与 E0~EF 异或的方案
这样只有10~1F 的字节才可能得到FF
而这区都是控制字符
文本文件中绝难用到

------------------------------------------------------

时间原因
没有特殊情况
不准备更新它了
有兴趣的可以自己研究研究
@echo off & setlocal & chcp 437>nul & graftabl 936>nul

if "%~1"=="" (
    echo.
    echo.=文本文件加解密程序 :: qzwqzw :: 2007-06-05 :: Release 7
    echo.
    echo.=原理:使用DEBUG 脚本动态生成可执行程序对输入文件逐字节异或编码
    echo.
    echo.=特性:加解密互逆,多文件操作,单数字密钥
    echo.
    set /p file=-请输入文件名(支持通配符,默认为 .\*.txt):
    set /p pass=-请输入密钥(一位0~F的十六进制数,默认为0):
    echo.
) else (
    set "file=%~1"
    set "pass=%~2"
)

if "%file%"=="" set file=*.txt
if "%pass%"=="" set pass=0
if not exist "%file%" echo !找不到文件: "%file%" && goto end

:: 生成并执行 DEBUG 脚本,生成转换程序
echo e 100 B4 06 B2 FF CD 21 74 08 34 E%pass% 88 C2 CD 21 EB F0 C3>_codec.scr
for %%s in (rcx 11 n_codec.com w q) do echo %%s>>_codec.scr
debug <_codec.scr | find "Error">nul && echo !密钥错误: "%pass%" && goto :end

:: 搜索指定路径所有匹配文件进行转换
for %%f in ("%file%") do set "fPath=%%~dpf"
for /f "delims=" %%f in ('dir /a/b/od "%file%" 2^>nul') do (
    (set "fIn=%fPath%%%f") && (set "fOut=%fPath%#%%f")
    call :Codec
)
echo.
if exist _codec.* del _codec.*
if "%~0"=="%~f0" pause
goto :eof

:Codec
if exist "%fOut%" echo !已存在文件: "%fOut%" && pause && goto :eof
echo +正在转换 "%fIn%" ...
if exist _codec.com _codec.com < "%fIn%" > "%fOut%"
if not exist "%fOut%" echo !转换失败,未生成 "%fOut%" && pause
[ Last edited by qzwqzw on 2007-6-5 at 12:09 PM ]

   此帖被 +40 点积分        点击查看详情   
评分人:【 youxi01 分数: +8  时间:2007-5-30 15:58
评分人:【 namejm 分数: +10  时间:2007-5-30 21:35
评分人:【 electronixtar 分数: +22  时间:2007-12-6 14:44


2007-5-30 15:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
starrysky
新手上路





积分 10
发帖 5
注册 2007-5-28
状态 离线
『第 2 楼』:  

这种程序有用吗

   此帖被 +1 点积分    点击查看详情   
评分人:【 slndx 分数: +1  时间:2008-3-23 17:30


2007-5-30 16:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 3 楼』:  

  初步测试了一下,发现如下两个问题:

  当路径含有空格的时候不会有结果,问题出在 if exist _codec.com %comspec% /c_codec < %file% > %file%.txt 这一句,相关的 %file% 语句应该用引号括起来才对;

  另外,最开始的两对 if 语句逻辑上存在问题:当 file 或 pass 没有被定义的时候,强行给它们赋予了默认值,导致后两个 set /p 语句根本没机会执行。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-5-30 16:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 4 楼』:  

嗨,说好不更新的
可惜问题真是太多了
只好又出新版本
免得误人子弟

另外修改增加了一些细节
比如操作文件的默认值
再比如操作提示和代码注释

2007-5-30 18:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  呵呵,看来 qzwqzw 兄想偷懒,不打算再更新了?那我就再来挑点骨头:

  1、dir 加上了 /s 参数,势必要在所有子目录中查找,若在当前目录及某几个子目录中存在指定的同名文件,那么,指定文件的操作将变得难以控制,建议查找文件的时候,不搜索子目录;

  2、对文件路径加引号的操作不彻底,仍有漏网之鱼,比如 set file=%~dp0\*.txt,如果该路径中存在 & 的话,还是会出错呢。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-5-30 21:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 6 楼』:  

/s这个参数起初是不加的
后来发现直接拖动测试文件到程序时
当前目录竟然是%userprofile%
然后再用~ff就会出现问题
所以才加上/s以得到全路径
现在看来加上很有问题

set file=的问题
倒是你考虑得细致
不过这样的问题太多了
我已经对它感到厌烦了

2007-5-30 22:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 7 楼』:  

看在加分人的份上还是忍着吧

/s去掉了,改为先获取数据文件目录再拼凑路径的办法

set file已经尽可能的改了

谁有闲可以测试一下

拖放数据文件到程序
拖放数据文件到命令行窗口
输入文件路径到命令行窗口

文件路径含空格
文件路径含转义字符
文件路径无效

2007-5-30 23:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

  哈哈,还真被我试出毛病来了,不过还是老问题:没有对所有的路径用引号括起来——虽然老兄对这个问题有点厌烦了,但是我还得提提^_^

  问题在这一句:set file=%1。当我在CMD窗口中以形如 "*test.cmd" "te st.txt" 的格式处理 te st.txt 这个文件的时候……嘿嘿,不说你也明白了。建议改成 set “file=%~1”。

  其他的暂时还没来得及测试。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-5-31 00:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 9 楼』:  

这个问题已经改了

顺便改了程序LOGO的出现条件

再就是提示语的简单修饰
-------------------------------------------------------------------

我现在正式将此代码授权给中国DOS联盟

所有联盟的成员都可以对它进行复制、修改和再发布

也可以将它全部或部分代码当作自己代码或者项目的一部分

凡是使用此代码的项目、代码均不能违反代码自由开放的原则

也不能用于任何商业和盈利用途

简而言之,就是以精简的的GPL协议发布

也就是说,再有问题都需要你们自己来改了

绝对的懒人协议

2007-5-31 00:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
whswbiori
新手上路





积分 10
发帖 5
注册 2007-8-1
状态 离线
『第 10 楼』:  

谢谢你们的分享和测试 我是一个新人 觉得这样的气氛很好

2007-8-1 04:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
b102588
初级用户




积分 83
发帖 34
注册 2007-4-22
状态 离线
『第 11 楼』:  

恩 我也决的这里不错



快乐崇拜
2007-8-1 12:21
查看资料  发送邮件  发短消息 网志  OICQ (499083435)  编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 12 楼』:  

初试了一下,效果不错,还可以多次重复加密.但对文本程序(bat com)不可用.

2007-8-3 07:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 13 楼』:  

看不懂debug,ai

2007-8-5 16:31
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 14 楼』:  

以前写过用%XXXX:~X,X%的方式加密的东西。。。
不过。。。。加密后要比原文件大5~10倍。。。

2007-8-6 10:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xun0813
初级用户





积分 20
发帖 8
注册 2007-8-5
状态 离线
『第 15 楼』:  

几乎都看不懂诶,谁能说说原理么~

2007-8-19 09:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: