第 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 引用批处理自身时
就是出错!
论坛跳转: