中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-09 02:24
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个加壳的批处理竟无法破解(已结) 查看 3,449 回复 31
31 发表于 2008-07-07 15:41 ·  中国 安徽 合肥 联通
初级用户
★★
积分 175
发帖 55
注册 2007-04-30 07:15
19年会员
UID 87008
性别 男
状态 离线
从这个贴子学到不少东西啊
32 发表于 2008-07-08 12:41 ·  中国 山西 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
根据我的分析
那句@shift是没用且有害的蛇足之笔

因为程序在释放出批处理源码后
是使用以下方式来调用批处理的
cmd /c "批处理名 批处理所需命令行参数"

如果以 setup.exe 1 2 3 4 5 6 7 8 9 的方式执行加密程序
执行至批处理内部后

环境变量 cmdcmdline 为 cmd /c "" CMD5254.CMD" 1 2 3 4 5 6 7 8 9"
命令行参数矩阵 %* 为 1 2 3 4 5 6 7 8 9
命令名 %0 为 " CMD5254.CMD"
命令行参数1 %1 为 1
其余参数依次排列

其中的批处理文件名是以 (0xA0)CMD 起始
再加随机的四位十六进制数组成

而在 @shift 之后
cmdcmdline、%*均不变
唯一变化的是 %0 ~ %9
也就是 %0 变为 1
%1 变为 2
其余依次排列

可见在@shift之后
本来是命令名的%0变为了命令行参数1
而当在程序中使用 %0 引用批处理自身时
就是出错!
论坛跳转: