Board logo

标题: [加密解密] 批处理解密破解已经加密的VBS(2009-04-25更新) [打印本页]

作者: Batcher    时间: 2009-3-8 00:38     标题: 批处理解密破解已经加密的VBS(2009-04-25更新)

所谓知己知彼方可百战不殆,要想知道如何解密,就得知道如何加密。我们将通过下面的几个例子来共同学习一些入门知识。 【方案一】ASCII <<=>> VBS [attach]1200[/attach] 此类加密工具通常是把VBS明文代码转换成ASCII码(十进制或十六进制),加密以后的代码如下EncodeTest.vbs:
  1. HqwStr = Array(97,61,109,115,103,98,111,120,40,34,67,114,97,99,107,32,109,101,33,34,41,13,10,98,61,109,115,103,98,111,120,40,34,67,111,110,103,114,97,116,117,108,97,116,101,115,33,34,41,13,10)
  2. Execute Num2Str(HqwStr)
  3. Function Num2Str(HqwStr)
  4. For I=0 To UBound(HqwStr)
  5. Num2Str = Num2Str & Chr(HqwStr(I))
  6. Next
  7. End Function
复制代码
我们把其中的ASCII码复制出来,保存到一个文本文件中a.txt:
  1. 97,61,109,115,103,98,111,120,40,34,67,114,97,99,107,32,109,101,33,34,41,13,10,98,61,109,115,103,98,111,120,40,34,67,111,110,103,114,97,116,117,108,97,116,101,115,33,34,41,13,10
复制代码
用下面的批处理来解密即可DecodeTest.bat:
  1. @echo off
  2. ::Batcher@bbs.bathome.net
  3. ::2009-03-08
  4. ::批处理解密破解已经加密的VBS(ASCII2VBS)@CMD@XP
  5. ::http://bbs.bathome.net/thread-3637-1-1.html
  6. rem 待解密的以逗号分隔的ASCII码(十进制或十六进制)文件
  7. set "FileASCII=C:\test\a.txt"
  8. set "FileResult=%temp%\DecResult.txt"
  9. set ChrNum=
  10. set /p DecCode=<"%FileASCII%"
  11. set DecCode=head,%DecCode%,tail
  12. :Num2Chr
  13. set DecCode=%DecCode:*,=%
  14. if "%DecCode%" neq "tail" (
  15. if "%DecCode%" neq "" (
  16. call :SplitDec %DecCode%
  17. goto :Num2Chr
  18. )
  19. )
  20. echo OutPutFile="%FileResult%">"%temp%\Decode.vbs"
  21. echo Set objFSO=CreateObject("Scripting.FileSystemObject")>>"%temp%\Decode.vbs"
  22. echo Set objTXT=objFSO.CreateTextFile(OutPutFile,True,False)>>"%temp%\Decode.vbs"
  23. echo ChrVBS=""%ChrNum%>>"%temp%\Decode.vbs"
  24. echo objTXT.Write ChrVBS>>"%temp%\Decode.vbs"
  25. cscript //nologo "%temp%\Decode.vbs"
  26. start "" "%FileResult%"
  27. goto:eof
  28. :SplitDec
  29. set ChrNum=%ChrNum%+Chr(%1)
复制代码
那么,请问解密以后的内容究竟是啥模样呢?啊,这位朋友问的好!当~当~当~当~,各位观众(请自行模仿周星驰的配音):
  1. a=msgbox("Crack me!")
  2. b=msgbox("Congratulates!")
复制代码

作者: Batcher    时间: 2009-3-8 00:39     标题: 【方案二】拦截VBS密文中的Execute函数

我们仍然用顶楼的密文代码作为例子EncodeTest.vbs:
  1. HqwStr = Array(97,61,109,115,103,98,111,120,40,34,67,114,97,99,107,32,109,101,33,34,41,13,10,98,61,109,115,103,98,111,120,40,34,67,111,110,103,114,97,116,117,108,97,116,101,115,33,34,41,13,10)
  2. Execute Num2Str(HqwStr)
  3. Function Num2Str(HqwStr)
  4. For I=0 To UBound(HqwStr)
  5. Num2Str = Num2Str & Chr(HqwStr(I))
  6. Next
  7. End Function
复制代码
已经具备VBS入门知识的朋友,应该可以看出密文中的自解密函数中没有什么猫腻,纯粹是一个自解密函数而已。所以我们可以直接派拦截函数上阵杀敌。
  1. HqwStr = Array(97,61,109,115,103,98,111,120,40,34,67,114,97,99,107,32,109,101,33,34,41,13,10,98,61,109,115,103,98,111,120,40,34,67,111,110,103,114,97,116,117,108,97,116,101,115,33,34,41,13,10)
  2. '注释掉原来的Execute函数以防止可能存在的恶意代码对系统造成损害
  3. 'Execute Num2Str(HqwStr)
  4. '用我们自己的拦截函数去执行
  5. Intercept Num2Str(HqwStr)
  6. Function Num2Str(HqwStr)
  7. For I=0 To UBound(HqwStr)
  8. Num2Str = Num2Str & Chr(HqwStr(I))
  9. Next
  10. End Function
  11. '拦截函数
  12. Sub Intercept (code)
  13. OutPutFile="DecodeVBS.txt"
  14. Set objFSO=CreateObject("Scripting.FileSystemObject")
  15. Set objTXT=objFSO.CreateTextFile(OutPutFile,True,False)
  16. objTXT.Write code
  17. objTXT.Close
  18. Set objWSH=CreateObject("WScript.Shell")
  19. objWSH.Run OutPutFile
  20. WScript.Quit
  21. End Sub
复制代码
熟悉而亲切的明文再次出现,哈哈,拦截函数小胜一阵。今日不可贸然追击,前方恐有伏军。鸣金收兵,易日再战可也。
  1. a=msgbox("Crack me!")
  2. b=msgbox("Congratulates!")
复制代码
[2009-04-25]下面是一个挺有意思的密文(如果看不懂,请不要执行,否则可能损害您的电脑),大家练练手吧 ^_^
链接: https://pan.baidu.com/s/158x37C9UyoseeAo01k06Zw?pwd=a3np
作者: Batcher    时间: 2009-3-8 00:39     标题: 【方案三】注入VBS密文中的Execute函数

这次我们使用的加密工具是VBS随机加密器.vbs:
  1. '''''''''''''''''''''''''''''''''''''''''''
  2. '''      (P)&(C)2009  VBS随机加密器     '''
  3. '''                                     '''
  4. '''      qinchun36   www.cn-dos.net     '''
  5. '''''''''''''''''''''''''''''''''''''''''''
  6. if wscript.arguments.count=0 then
  7. msgbox "1.   用鼠标把目标文件拖到我上面来..."&vbcrlf&vbcrlf&"2.   命令行    wscript rndEncode.vbs %1",16,"使用方法"
  8. else
  9. origfile=wscript.arguments(0)
  10. set fso=createobject("scripting.filesystemobject")
  11. set ching=wscript.createobject("wscript.shell")
  12. with fso.getfile(origfile):fpath=.parentfolder&"\":fname="new_"&.name:end with
  13. n=chr(58)
  14. m=chr(34)
  15. with fso.opentextfile(origfile)
  16. do
  17. tmpstr=.read(1)
  18. encoded=encoded&asc(tmpstr)
  19. if (.atendofstream=true) then exit do
  20. Randomize
  21. fenge=chr(Int(6*Rnd+65))
  22. encoded=encoded&fenge
  23. loop
  24. .close
  25. end with
  26. headstr="REM - 版权所有 - 翻版不究 - 据说是李先生 - qinchun36@tom.com"&vbcrlf&vbcrlf
  27. He="He="&m&left(encoded,int(len(encoded)/2))&m&n
  28. Fucking="FUNCTION Fuck(lO):O="&m&"6C3D434852283739293A464F52204A3D363520544F2037303A6C6C3D434852284A293A4F3D53504C4954286C4F2C6C6C2C2D312C31293A6C4F3D4E554C4C3A464F5220493D3020544F202855424F554E44284F292D31293A6C4F3D6C4F264F284929266C3A4E4558543A6C4F3D6C4F264F2855424F554E44284F29293A4E4558543A4F3D53504C4954286C4F2C6C2C2D312C31293A6C4F3D4E554C4C3A464F5220493D3020544F202855424F554E44284F29293A6C4F3D6C4F26434852284F284929293A4E4558543A45584543555445206C4F3A6C4F3D22272020434F4E54414354203A2071696E6368756E33362066726F6D205757572E434E2D444F532E4E45542020202722"&m&":OO="&m&"EXECUTE "&m&m&m&m&m&":l="&m&"&CHR(&H"&m&":ll="&m&")"&m&":EXECUTE("&m&"DO WHILE LEN(O)>1:OO=OO&l&LEFT(O,2)&ll:O=MID(O,3)"&m&"&VBCRLF&"&m&"LOOP"&m&"):EXECUTE(OO):Fuck=lO:END FUNCTION"&n
  29. Her="Her="&m&right(encoded,len(encoded)-int(len(encoded)/2))&m
  30. tailstr=vbcrlf&vbcrlf&"You = He + Her"&vbcrlf&vbcrlf&"EXECUTE Fuck(You)"&vbcrlf&vbcrlf&"REM - (P)&(C)"&YEAR(NOW)&"  ALL RIGHTS RESERVED"
  31. fso.createtextfile(fpath&fname,true).write(headstr+He+Fucking+Her+tailstr)
  32. msgbox "转换后的文件是"&chr(13)&chr(13)&fpath&fname,48,"Mr Ching 提示你"
  33. end if
复制代码
加密之后的代码EncodeTest.vbs:
  1. REM - 版权所有 - 翻版不究 - 据说是李先生 - qinchun36@tom.com
  2. He="97E61D109C115F103D98C111E120F40D34D67C114A97D99A107B32D109B101D33B34C41F13D10D98C61E109E":FUNCTION Fuck(lO):O="6C3D434852283739293A464F52204A3D363520544F2037303A6C6C3D434852284A293A4F3D53504C4954286C4F2C6C6C2C2D312C31293A6C4F3D4E554C4C3A464F5220493D3020544F202855424F554E44284F292D31293A6C4F3D6C4F264F284929266C3A4E4558543A6C4F3D6C4F264F2855424F554E44284F29293A4E4558543A4F3D53504C4954286C4F2C6C2C2D312C31293A6C4F3D4E554C4C3A464F5220493D3020544F202855424F554E44284F29293A6C4F3D6C4F26434852284F284929293A4E4558543A45584543555445206C4F3A6C4F3D22272020434F4E54414354203A2071696E6368756E33362066726F6D205757572E434E2D444F532E4E45542020202722":OO="EXECUTE """"":l="&CHR(&H":ll=")":EXECUTE("DO WHILE LEN(O)>1:OO=OO&l&LEFT(O,2)&ll:O=MID(O,3)"&VBCRLF&"LOOP"):EXECUTE(OO):Fuck=lO:END FUNCTION:Her="115B103D98A111B120A40C34C67E111A110A103B114D97C116F117B108D97A116C101B115A33E34F41F13F10"
  3. You = He + Her
  4. EXECUTE Fuck(You)
  5. REM - (P)&(C)2009  ALL RIGHTS RESERVED
复制代码
直接用方案二是不行的,因为密文自带的解密函数本身也被加密了,而且耍了一些小手腕。不是我们的拦截函数太笨,而是加密函数太狡猾了,它居然穿上了马甲。

我们先把EXECUTE(OO)替换成WScript.Echo(OO),然后执行命令:
  1. cscript /nologo EncodeTest.vbs>DecodeTmp.vbs
复制代码
得到新的VBS文件DecodeTmp.vbs:
  1. EXECUTE ""&CHR(&H6C)&CHR(&H3D)&CHR(&H43)&CHR(&H48)&CHR(&H52)&CHR(&H28)&CHR(&H37)&CHR(&H39)&CHR(&H29)&CHR(&H3A)&CHR(&H46)&CHR(&H4F)&CHR(&H52)&CHR(&H20)&CHR(&H4A)&CHR(&H3D)&CHR(&H36)&CHR(&H35)&CHR(&H20)&CHR(&H54)&CHR(&H4F)&CHR(&H20)&CHR(&H37)&CHR(&H30)&CHR(&H3A)&CHR(&H6C)&CHR(&H6C)&CHR(&H3D)&CHR(&H43)&CHR(&H48)&CHR(&H52)&CHR(&H28)&CHR(&H4A)&CHR(&H29)&CHR(&H3A)&CHR(&H4F)&CHR(&H3D)&CHR(&H53)&CHR(&H50)&CHR(&H4C)&CHR(&H49)&CHR(&H54)&CHR(&H28)&CHR(&H6C)&CHR(&H4F)&CHR(&H2C)&CHR(&H6C)&CHR(&H6C)&CHR(&H2C)&CHR(&H2D)&CHR(&H31)&CHR(&H2C)&CHR(&H31)&CHR(&H29)&CHR(&H3A)&CHR(&H6C)&CHR(&H4F)&CHR(&H3D)&CHR(&H4E)&CHR(&H55)&CHR(&H4C)&CHR(&H4C)&CHR(&H3A)&CHR(&H46)&CHR(&H4F)&CHR(&H52)&CHR(&H20)&CHR(&H49)&CHR(&H3D)&CHR(&H30)&CHR(&H20)&CHR(&H54)&CHR(&H4F)&CHR(&H20)&CHR(&H28)&CHR(&H55)&CHR(&H42)&CHR(&H4F)&CHR(&H55)&CHR(&H4E)&CHR(&H44)&CHR(&H28)&CHR(&H4F)&CHR(&H29)&CHR(&H2D)&CHR(&H31)&CHR(&H29)&CHR(&H3A)&CHR(&H6C)&CHR(&H4F)&CHR(&H3D)&CHR(&H6C)&CHR(&H4F)&CHR(&H26)&CHR(&H4F)&CHR(&H28)&CHR(&H49)&CHR(&H29)&CHR(&H26)&CHR(&H6C)&CHR(&H3A)&CHR(&H4E)&CHR(&H45)&CHR(&H58)&CHR(&H54)&CHR(&H3A)&CHR(&H6C)&CHR(&H4F)&CHR(&H3D)&CHR(&H6C)&CHR(&H4F)&CHR(&H26)&CHR(&H4F)&CHR(&H28)&CHR(&H55)&CHR(&H42)&CHR(&H4F)&CHR(&H55)&CHR(&H4E)&CHR(&H44)&CHR(&H28)&CHR(&H4F)&CHR(&H29)&CHR(&H29)&CHR(&H3A)&CHR(&H4E)&CHR(&H45)&CHR(&H58)&CHR(&H54)&CHR(&H3A)&CHR(&H4F)&CHR(&H3D)&CHR(&H53)&CHR(&H50)&CHR(&H4C)&CHR(&H49)&CHR(&H54)&CHR(&H28)&CHR(&H6C)&CHR(&H4F)&CHR(&H2C)&CHR(&H6C)&CHR(&H2C)&CHR(&H2D)&CHR(&H31)&CHR(&H2C)&CHR(&H31)&CHR(&H29)&CHR(&H3A)&CHR(&H6C)&CHR(&H4F)&CHR(&H3D)&CHR(&H4E)&CHR(&H55)&CHR(&H4C)&CHR(&H4C)&CHR(&H3A)&CHR(&H46)&CHR(&H4F)&CHR(&H52)&CHR(&H20)&CHR(&H49)&CHR(&H3D)&CHR(&H30)&CHR(&H20)&CHR(&H54)&CHR(&H4F)&CHR(&H20)&CHR(&H28)&CHR(&H55)&CHR(&H42)&CHR(&H4F)&CHR(&H55)&CHR(&H4E)&CHR(&H44)&CHR(&H28)&CHR(&H4F)&CHR(&H29)&CHR(&H29)&CHR(&H3A)&CHR(&H6C)&CHR(&H4F)&CHR(&H3D)&CHR(&H6C)&CHR(&H4F)&CHR(&H26)&CHR(&H43)&CHR(&H48)&CHR(&H52)&CHR(&H28)&CHR(&H4F)&CHR(&H28)&CHR(&H49)&CHR(&H29)&CHR(&H29)&CHR(&H3A)&CHR(&H4E)&CHR(&H45)&CHR(&H58)&CHR(&H54)&CHR(&H3A)&CHR(&H45)&CHR(&H58)&CHR(&H45)&CHR(&H43)&CHR(&H55)&CHR(&H54)&CHR(&H45)&CHR(&H20)&CHR(&H6C)&CHR(&H4F)&CHR(&H3A)&CHR(&H6C)&CHR(&H4F)&CHR(&H3D)&CHR(&H22)&CHR(&H27)&CHR(&H20)&CHR(&H20)&CHR(&H43)&CHR(&H4F)&CHR(&H4E)&CHR(&H54)&CHR(&H41)&CHR(&H43)&CHR(&H54)&CHR(&H20)&CHR(&H3A)&CHR(&H20)&CHR(&H71)&CHR(&H69)&CHR(&H6E)&CHR(&H63)&CHR(&H68)&CHR(&H75)&CHR(&H6E)&CHR(&H33)&CHR(&H36)&CHR(&H20)&CHR(&H66)&CHR(&H72)&CHR(&H6F)&CHR(&H6D)&CHR(&H20)&CHR(&H57)&CHR(&H57)&CHR(&H57)&CHR(&H2E)&CHR(&H43)&CHR(&H4E)&CHR(&H2D)&CHR(&H44)&CHR(&H4F)&CHR(&H53)&CHR(&H2E)&CHR(&H4E)&CHR(&H45)&CHR(&H54)&CHR(&H20)&CHR(&H20)&CHR(&H20)&CHR(&H27)&CHR(&H22)
复制代码
把其中的EXECUTE替换成WScript.Echo,然后运行命令:
  1. cscript /nologo DecodeTmp.vbs>a.txt
复制代码
得到明文解密函数a.txt:
  1. l=CHR(79):FOR J=65 TO 70:ll=CHR(J):O=SPLIT(lO,ll,-1,1):lO=NULL:FOR I=0 TO (UBOUND(O)-1):lO=lO&O(I)&l:NEXT:lO=lO&O(UBOUND(O)):NEXT:O=SPLIT(lO,l,-1,1):lO=NULL:FOR I=0 TO (UBOUND(O)):lO=lO&CHR(O(I)):NEXT:EXECUTE lO:lO="'  CONTACT : qinchun36 from WWW.CN-DOS.NET   '"
复制代码
用明文解密函数去替代密文解密函数:
  1. REM - 版权所有 - 翻版不究 - 据说是李先生 - qinchun36@tom.com
  2. He="97E61E109C115F103E98D111E120F40D34D67C114A97D99A107C32D109B101D33B34C41F13D10D98C61F109E":FUNCTION Fuck(lO):l=CHR(79):FOR J=65 TO 70:ll=CHR(J):O=SPLIT(lO,ll,-1,1):lO=NULL:FOR I=0 TO (UBOUND(O)-1):lO=lO&O(I)&l:NEXT:lO=lO&O(UBOUND(O)):NEXT:O=SPLIT(lO,l,-1,1):lO=NULL:FOR I=0 TO (UBOUND(O)):lO=lO&CHR(O(I)):NEXT:EXECUTE lO:lO="'  CONTACT : qinchun36 from WWW.CN-DOS.NET   '":Fuck=lO:END FUNCTION:Her="115B103D98A111B120A40C34C67E111A110B103C114D97C116A117B108E97A116C101B115A33E34F41F13F10"
  3. You = He + Her
  4. EXECUTE Fuck(You)
  5. REM - (P)&(C)2009  ALL RIGHTS RESERVED
复制代码
现在可以派我们的拦截函数出场了:
  1. REM - 版权所有 - 翻版不究 - 据说是李先生 - qinchun36@tom.com
  2. He="97E61E109C115F103E98D111E120F40D34D67C114A97D99A107C32D109B101D33B34C41F13D10D98C61F109E":FUNCTION Fuck(lO):l=CHR(79):FOR J=65 TO 70:ll=CHR(J):O=SPLIT(lO,ll,-1,1):lO=NULL:FOR I=0 TO (UBOUND(O)-1):lO=lO&O(I)&l:NEXT:lO=lO&O(UBOUND(O)):NEXT:O=SPLIT(lO,l,-1,1):lO=NULL:FOR I=0 TO (UBOUND(O)):lO=lO&CHR(O(I)):NEXT:Intercept lO:lO="'  CONTACT : qinchun36 from WWW.CN-DOS.NET   '":Fuck=lO:END FUNCTION:Her="115B103D98A111B120A40C34C67E111A110B103C114D97C116A117B108E97A116C101B115A33E34F41F13F10"
  3. You = He + Her
  4. EXECUTE Fuck(You)
  5. REM - (P)&(C)2009  ALL RIGHTS RESERVED
  6. '拦截函数
  7. Sub Intercept (code)
  8. OutPutFile="DecodeVBS.txt"
  9. Set objFSO=CreateObject("Scripting.FileSystemObject")
  10. Set objTXT=objFSO.CreateTextFile(OutPutFile,True,False)
  11. objTXT.Write code
  12. objTXT.Close
  13. Set objWSH=CreateObject("WScript.Shell")
  14. objWSH.Run OutPutFile
  15. WScript.Quit
  16. End Sub
复制代码
运行上面的VBS代码,就能得到明文啦:
  1. a=msgbox("Crack me!")
  2. b=msgbox("Congratulates!")
复制代码
拦截函数立功啦!拦截函数立功啦!不要给加密函数任何的机会!”

“伟大的批处理之家的拦截函数,他继承了批处理之家的光荣的传统,批处理之家这一刻灵魂附体!拦截函数一个人,他代表了批处理之家悠久的历史和传统!在这一刻!他不是一个人在战斗!他不是一个人!!”

“拦截函数!拦截函数面对着密文……他面对着全世界脚本爱好者的目光,和期待。批处理在世界杯的破解赛当中战胜过很多个密文,拦截函数肯定深知这一点,他还能够微笑着面对他面前的这个密文吗吗……十秒钟以后,他会是怎样的表情?”

“密文被破解啦!!!比赛结束啦!!!拦截函数获得了胜利!淘汰了加密工具!”

“他们没有再一次倒在狡猾的加密函数面前!伟大的拦截函数!伟大的批处理之家!!拦截函数今天生日快乐——!!批处理之家万岁!!!”

“伟大的拦截函数,脚本爱好者的期望,这个破解是一个绝对理论上的决杀。绝对的死角,拦截函数进入了八强!”

“这个胜利属于拦截函数,属于VBS,属于批处理之家,属于Batcher,属于所有热爱开源脚本的人!”

“加密工具也许会后悔的,加密函数在下半时他们多一人的情况下打得太保守、太沉稳了,他失去了自己在小组赛的那种勇气,面对拦截函数悠久的历史,他失去了他在小组赛中那种猛扑猛打的作风,他终于自食其果。加密工具该回家了,也许他们不用回遥远的加密世界,他们不用回家,因为他们大多数人都在不愿意分享代码、固步自封、敝帚自珍的人的心中,再见!”
作者: Batcher    时间: 2009-3-8 00:39     标题: 【方案四】替换VBS密文中的Execute函数

待续...
作者: 小勇12    时间: 2009-3-8 12:49

学习收下了,顶起!!!
作者: 小勇12    时间: 2009-3-15 14:14

方案三和四呢?
快点出来哟
好期待哟
作者: defanive    时间: 2009-3-15 14:36

VBS、BAT的安全性实在低,若知其解密方法,得到明文简直易如反掌。。。
作者: Batcher    时间: 2009-3-18 14:12     标题: 回复 6楼 的帖子

方案三来了,呵呵。
方案四还得等等,最近公司比较忙。
作者: tbx    时间: 2009-4-26 13:04

那里跟新了?
我怎么没看到》
作者: Batcher    时间: 2009-4-26 13:14     标题: 回复 9楼 的帖子

为了能够让更新的内容比较容易被发现,我当时特意使用了蓝色字体,要不你再仔细看看?
作者: hjh700913    时间: 2009-5-8 13:52

小心地问一下,任何VBS的密码都可以破解吗?
作者: pengtmy    时间: 2010-10-19 14:48     标题: 谢谢

好强大··我就是要学加密vbs




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2