中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创小工具]AnyFiletoVBS,将任意文件转换为.VBS脚本
« [1] [2] »
作者:
标题: [原创小工具]AnyFiletoVBS,将任意文件转换为.VBS脚本 上一主题 | 下一主题
wjjchrdw
初级用户




积分 26
发帖 12
注册 2005-10-1
状态 离线
『楼 主』:  [原创小工具]AnyFiletoVBS,将任意文件转换为.VBS脚本

近来用exe2vbs感觉不够快,想自己搞一个快点的,花了几天时间整出来了,用vbs写的,参考了网上的代码,核心就是一个流文件对象(adodb.stream)和XML数据对象(Microsoft.XMLDOM),将二进制文件转换为十六进制代码(hex.bin),然后将十六进制代码还原为原始二进制文件。
  其实用XML数据对象(Microsoft.XMLDOM)还可以将二进制文件转换为Base64编码,那样会更省空间,因为Hex.bin编码出来是原始文件体积的2倍,而Base64编码是原始文件的1.5倍,程序写到大半才发现这个,所以就没改进了。兄弟们可以试着改改看。
  代码写的不够精简,兄弟们见笑了。

  由于计算MD5代码是调用外部程序md5.exe,所以运行时当前目录下必须有md5.exe,不大方便。可以将md5.exe放在VBS脚本里,运行时释放出来调用,这样的话就只有一个AnyFiletoVBS.vbs就够了,等着高手改进了。。。


小工具AnyFiletoVBS下载地址
http://webdisk.cech.com.cn/download/file_share_7782231.html
是网盘的地址

2007-11-29 12:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

支持一下

不过用16进制转换的文件比较大,用zzzEVAzzz的any2bat转换则比较小
稍稍可惜的是any2bat转换为批处理,不过改动批处理后就能得出VBS的

用附带的md5.exe,AnyFiletoVBS是 97.4k,any2bat的批处理是 72.6k,修改得出的VBS是 67.1k

any2bat
http://www.cn-dos.net/forum/viewthread.php?tid=28634
可惜加密了



2007-11-29 16:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
baomaboy
银牌会员





积分 1513
发帖 554
注册 2005-12-30
状态 离线
『第 3 楼』:  

其实叫any2vbs更准确,因为经这段代码转换后的文件本就是vbs,只不过出于某种需要(应用环境 渗透/入侵)才又将vbs转为bat。

'Any2Bat.vbs by zzzEVAzzz
Dim WshSHell,FSO
On Error Resume Next
Set WshSHell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WinVer = WshSHell.Environment("Process")
Set Args = WScript.Arguments
CloseTime = 5
FileName = WScript.ScriptName
FileFullName = WScript.ScriptFullName
FilePath = FSO.GetParentFolderName(FileFullName)
InsPath = FSO.GetSpecialFolder(1)
InsFullName = FSO.BuildPath(InsPath ,FileName)
LnkPathNT = WshSHell.SpecialFolders(2)
LnkPath9X = WshSHell.SpecialFolders(14)
LnkPathAll = WshSHell.SpecialFolders("SendTo")
OtherFileName="Manage_New.txt"
OtherFilePath=FSO.GetSpecialFolder(2)
TemFileName="无标题"
TemFilePath=FSO.GetSpecialFolder(2)
Copyright="玲珑科技"
QQ="QQ:25926183"
Email="Email:fty1995@163.com"
InsTitle="Any2Bat by zzzEVAzzz"
InsAnswer="Any2Bat by zzzEVAzzz"
RegPath1="HKEY_CLASSES_ROOT\*\shell\AnyToBat\"
RegValue1="转换为批处理文件"
RegForm1="REG_SZ"
RegPath2="HKEY_CLASSES_ROOT\*\shell\AnyToBat\command\"
RegValue2="wscript.exe " & chr(34) & InsFullName & chr(34) & " " & chr(34) & "%L" & chr(34)
RegForm2="REG_SZ"
IF FileFullName <> InsFullName then
intAnswer = MsgBox("【是】将“"+ InsAnswer +"”加入到右键菜单,"&Chr(10)&Chr(10)&"【否】将“"+ InsAnswer +"”从右键菜单删除。 ", vbQuestion + vbYesNoCancel, "安装 - "+ InsTitle +" - "+ Copyright)
    If intAnswer = vbYes Then
WshSHell.RegWrite RegPath1,RegValue1,RegForm1
WshSHell.RegWrite RegPath2,RegValue2,RegForm2
FSO.GetFile(FileFullName).Copy(InsFullName)
WshSHell.popup _
"添加脚本文件:"+chr(10)+InsFullName+chr(10)+chr(10)+ _
"添加注册表项:"+chr(10)+chr(34)+ RegPath1 +chr(34)+chr(10)+ _
chr(10) & CloseTime & " 秒钟后本窗口将自动关闭!" +chr(10)+chr(10)+ _
chr(10) & "Copyright(C)  " + Copyright +"   " & QQ &"   " + Email _
, CloseTime, "安装成功 - "+ InsTitle +" - "+ Copyright, 0 + 64
end if
        If intAnswer = vbNo Then
WshSHell.RegDelete RegPath2
WshSHell.RegDelete RegPath1
FSO.DeleteFile InsFullName
WshSHell.popup _
"删除脚本文件:"+chr(10)+InsFullName+chr(10)+chr(10)+ _
"删除注册表项:"+chr(10)+chr(34)+ RegPath1 +chr(34)+chr(10)+ _
chr(10) & CloseTime & " 秒钟后本窗口将自动关闭!" +chr(10)+chr(10)+ _
chr(10) & "Copyright(C)  " + Copyright +"   " & QQ &"   " + Email _
, CloseTime, "卸载成功 - "+ InsTitle +" - "+ Copyright, 0 + 64
end if
        If intAnswer = vbCancel Then
end if
ELSE
if Args.count=0 then wscript.quit
with CreateObject("ADODB.Stream")
.type=1:.open:.loadfromfile Args(0):bs=.read:l=.size:.close
end with
if err.number<>0 then wscript.quit
with fso.opentextfile(Args(0)&".bat",2,true)
if err.number<>0 then wscript.quit
.writeline "@echo bs=_>xx.vbs"
for k=1 to l step 129
.write "@echo """
.write b64b(midb(bs,k,129))
.writeline """+_>>xx.vbs"
next
.writeline "@echo """":set rs=CreateObject(""ADODB.Recordset"")>>xx.vbs"
.writeline "@echo set ado=CreateObject(""ADODB.Stream"")>>xx.vbs"
.writeline "@echo l=len(bs):ss="""":for k=1 to l step 4096:ss=ss+ub64(mid(bs,k,4096)):next:l=len(ss)>>xx.vbs"
.writeline "@echo rs.fields.append ""b"",205,l/2:rs.open:rs.addnew:rs(""b"")=ss+chrb(0):rs.update>>xx.vbs"
.writeline "@echo ado.mode=3:ado.type=1:ado.open:ado.write rs(""b"").getchunk(l/2)>>xx.vbs"
.writeline "@echo ado.savetofile """+fso.getfilename(Args(0))+""",2:ado.close>>xx.vbs"
.writeline "@echo function ub64(s):dim t(4),b(3):ub64="""":n=len(s):r=2 >>xx.vbs"
.writeline "@echo if n mod 4^<^>0 then exit function:end if:for i=1 to n step 4:for j=0 to 3 >>xx.vbs"
.writeline "@echo a=asc(mid(s,i+j,1)):if a=43 then:a=62:else if a=47 then:a=63:else if a^>47 and a^<58 then:_>>xx.vbs"
.writeline "@echo a=a+4:else if a=61 then:a=0:if r=2 then r=j-2:end if:else if a^>64 and a^<91 then:_>>xx.vbs"
.writeline "@echo a=a-65:else if a^>96 and a^<123 then:a=a-71:else:exit function:_>>xx.vbs"
.writeline "@echo end if:end if:end if:end if:end if:end if:t(j)=a:next>>xx.vbs"
.writeline "@echo b(0)=t(0)+t(1)*64 mod 256:b(1)=t(1)\4+t(2)*16 mod 256:b(2)=t(2)\16+t(3)*4 >>xx.vbs"
.writeline "@echo for j=0 to r:if b(j)^<16 then ub64=ub64+""0"":end if:ub64=ub64+hex(b(j))>>xx.vbs"
.writeline "@echo next:next:end function>>xx.vbs&&cscript.exe //nologo xx.vbs&del xx.vbs"
end with
const b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
function b64b(bin)
b64b=""
n=lenb(bin)
for i=1 to n step 3
a=ascb(midb(bin,i,1))
b64b=b64b+mid(b64,a mod 64+1,1)
if i<n then
b=ascb(midb(bin,i+1,1))
b64b=b64b+mid(b64,(a\64+b*4)mod 64+1,1)
if i+1<n then
c=ascb(midb(bin,i+2,1))
b64b=b64b+mid(b64,(b\16+c*16)mod 64+1,1)
b64b=b64b+mid(b64,c\4+1,1)
else
b64b=b64b+mid(b64,b\16+1,1)
b64b=b64b+"="
end if
else
b64b=b64b+mid(b64,a\64+1,1)
b64b=b64b+"=="
end if
next
end function
end if
Set WshSHell = Nothing
Set FSO = Nothing
Set Args = Nothing
WScript.Quit(0)

[ Last edited by baomaboy on 2007-12-15 at 07:33 PM ]



好多菩提树,好多明镜台。本来好多物,好多的尘埃。
2007-11-29 19:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

看过一下,只是没找到怎样解密-_-|||



2007-11-29 19:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





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

把 zzzevazzz 的那个改改就是一个 只转为vbs的

zzzevazzz 写的原文是http://hi.baidu.com/zzzevazzz/bl ... 8b6c1e94ca6b36.html

[ Last edited by vkill on 2007-11-29 at 07:50 PM ]

2007-11-29 19:49
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 6 楼』:  

修改好了
因为有些简单背景图片想集成到HTA里面,所以直接转为VBS方便些



2007-11-29 20:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
baomaboy
银牌会员





积分 1513
发帖 554
注册 2005-12-30
状态 离线
『第 7 楼』:  

其实any2vbs这段代码只不过是个系统功能,就如N年前同样是微软自产的screnc.exe加密脚本类文件如出一辙,当年国外已经有相应的解密网页只不过公开源码,曾经花了几夜时间捉到了那个被隐藏很深的用于解密的.js文件。后来逐渐有了高手做出了ScriptDecode.exe但源码出于某种原因还是不被公开,曾经和那写程序的高手Q过,只得到一句“公开了也许对决大部分人来讲并没有好处” 。所以作为前辈zzzevazzz不公开也许也有一定的理由。

[ Last edited by baomaboy on 2007-12-15 at 07:26 PM ]



好多菩提树,好多明镜台。本来好多物,好多的尘埃。
2007-11-29 20:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjjchrdw
初级用户




积分 26
发帖 12
注册 2005-10-1
状态 离线
『第 8 楼』:  

谢谢支持!
     any2bat用的是Base64编码,体积是原文件的1.5倍,而AnyFiletoVBS用的是Hex编码,体积是原文件的2倍.
     因此从理论上讲,AnyFiletoVBS转出来的VBS应改是any2bat的2/1.5=1.333倍,不过由于我写的代码比较多,实际的体积是any2bat的97.4/67.1=1.45倍.

     顺便提一句:zzzEVAzzz的换二进制转Base64编码的算法是自己写的,我很佩服.

[ Last edited by wjjchrdw on 2007-11-30 at 02:53 PM ]

2007-11-30 14:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjjchrdw
初级用户




积分 26
发帖 12
注册 2005-10-1
状态 离线
『第 9 楼』:  



[ Last edited by wjjchrdw on 2007-11-30 at 04:24 PM ]

2007-11-30 16:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjjchrdw
初级用户




积分 26
发帖 12
注册 2005-10-1
状态 离线
『第 10 楼』:  



[ Last edited by wjjchrdw on 2007-11-30 at 04:24 PM ]

2007-11-30 16:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjjchrdw
初级用户




积分 26
发帖 12
注册 2005-10-1
状态 离线
『第 11 楼』:  

我测了速度:
机器配置: CPU:P4 2.9G    内存:512MB     

原文件体积     AnyFiletoVBS       any2bat
300KB            少于2秒              3秒
400KB            少于2秒              4秒
500KB            少于2秒              6秒
600KB            少于2秒              10秒
800KB            少于3秒              16秒
1MB               少于3秒              25秒
1.5MB            少于3秒              55秒
2MB               少于4秒              1分30秒
5MB               少于6秒              9分11秒

     
    可以看出,AnyFiletoVBS的转换速度比any2bat总体上要快,尤其在文件较大时(1MB以上)这种优势体现得更明显,不过zh159兄提到文件体积的问题.
   
    AnyFiletoVBS用系统内置的XML数据对象(Microsoft.XMLDOM),而any2bat用自己写的算法,在生成VBS的体积上any2bat有绝对优势,这得益于他使用了Base64编码,在转换速度上AnyFiletoVBS更胜一筹,这归功于他用了系统内置的XML数据对象。

    幸运的是,系统的XML数据对象(Microsoft.XMLDOM)也支持Base64编码,用它将二进制文件转换为Base64编码,体积就会跟any2bat转换的一样小,而且速度也很快,岂不是两全其美!
   
    总结:用系统的XML数据对象(Microsoft.XMLDOM)进行Base64编码,将会使文件体积小而且转换速度快。

2007-11-30 16:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 12 楼』:  

AnyFiletoVBS的转换速度快在于直接将BIN文件16进制数据转换即可,any2bat则需要算法编码,所以any2bat慢了

只是不会使用XML数据对象(Microsoft.XMLDOM)的Base64编码



2007-11-30 18:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
baomaboy
银牌会员





积分 1513
发帖 554
注册 2005-12-30
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by wjjchrdw at 2007-11-30 14:49:
顺便提一句:zzzEVAzzz的换二进制转Base64编码的算法是自己写的,我很佩服

我上面说过了windows系统本身已集成了这一转换代码,只不过很少有人发现而已,如果说这段代码是个人写的,那就是说微软抄袭了个人的代码,不过想想这又不太可能。

[ Last edited by baomaboy on 2007-12-15 at 07:27 PM ]



好多菩提树,好多明镜台。本来好多物,好多的尘埃。
2007-11-30 19:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjjchrdw
初级用户




积分 26
发帖 12
注册 2005-10-1
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by baomaboy at 2007-11-30 19:42:


我上面说过了windows系统本身已集成了这一转换代码,只不过很少有人发现而已,如果说这段代码是个人写的,那就是说微软抄袭了个人的代码,不 ...

baomaboy说得没错,AnyFiletoVbs确实用的是windows系统本身已集成的XML数据对象(Microsoft.XMLDOM)来完成转换的。
   不过按说微软也不用抄袭,因为这样的转换很容易。并不像多媒体解码那么复杂的算法。

2007-12-1 15:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjjchrdw
初级用户




积分 26
发帖 12
注册 2005-10-1
状态 离线
『第 15 楼』:  

  昨天将AnyFiletoVBS改进了一把,用了XML数据对象(Microsoft.XMLDOM)的Base64编码,这回转换出的VBS体积就跟zzzEVAzzz的any2bat差不多了,而且速度上也很快,这下就两全其美了。
  为了是大家运行时少敲些字母,也为了使AnyFiletoVBS加入xxx2xxx大家族,将AnyFiletoVBS的改进版称为any2vbs。

  any2vbs(AnyFiletoVBS_Base64版下载地址)
  http://pickup.mofile.com/0959414513858118
  上次用的网盘传不上去了,只好用Mofile共享了。

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


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



论坛跳转: