标题: [原创vbs]异或加密
[打印本页]
作者: s11ss
时间: 2008-2-22 19:20
标题: [原创vbs]异或加密
原理是没错的,不过发现好多vbs都不能转换,这跟WriteLine有关系吧?
高手请赐教!!!!!!!!!!!!!!
'XorEncode {s11ss@www.cn-dos.net 2008-2-22}
If Not WScript.Arguments.Count=1 Then WScript.Echo "请将要转换的vbs文件托拽到我身上!":WScript.Quit
Set fso=CreateObject("Scripting.FileSystemObject")
Set self=fso.OpenTextFile(WScript.ScriptFullName)
Set vbs=fso.CreateTextFile(Left(WScript.Arguments(0),Len(WScript.Arguments(0))-4)+"_XorEncode.vbs")
Do Until self.AtEndOfStream
aline=self.ReadLine
If aline="Function XorEncode(s,n)" Then w=true
If w Then vbs.WriteLine aline
Loop
Set src=fso.OpenTextFile(WScript.Arguments(0))
Randomize:n=Int(255*Rnd+1)
vbs.WriteLine "Execute("&"XorEncode("""&XorEncode(src.Read(fso.GetFile(WScript.Arguments(0)).Size),n)&""","&CStr(n)&"))"
src.Close:vbs.Close:self.Close
Set src=Nothing:Set vbs=Nothing:Set self=Nothing:Set fso=Nothing
WScript.Echo "Successful!"
'如果转换失败就请再多试几次
Function XorEncode(s,n)
For i=1 To LenB(s)
XorEncode=XorEncode&ChrB(AscB(MidB(s,i,1)) Xor n)
Next
End Function
代码修改了下,这下甭管啥vbs都能转换了,但是转换后的文件体积更大了。
'XorEncode {s11ss@www.cn-dos.net 2008-2-22}
If Not WScript.Arguments.Count=1 Then WScript.Echo "请将要转换的vbs文件托拽到我身上!":WScript.Quit
Set fso=CreateObject("Scripting.FileSystemObject")
Set self=fso.OpenTextFile(WScript.ScriptFullName)
Set vbs=fso.CreateTextFile(Left(WScript.Arguments(0),Len(WScript.Arguments(0))-4)+"_XorEncode.vbs")
Do Until self.AtEndOfStream
aline=self.ReadLine
If aline="Function Decode(s,n)" Then w=true
If w Then vbs.WriteLine aline
Loop
Set src=fso.OpenTextFile(WScript.Arguments(0))
Randomize:n=Int(255*Rnd+1)
vbs.WriteLine "Execute("&"Decode("""&Encode(src.Read(fso.GetFile(WScript.Arguments(0)).Size),n)&""","&n&"))"
src.Close:vbs.Close:self.Close
Set src=Nothing:Set vbs=Nothing:Set self=Nothing:Set fso=Nothing
WScript.Echo "Successful!"
Function Encode(s,n)
For i=1 To Len(s)
Encode=Encode&" "&(Asc(Mid(s,i,1)) Xor n)
Next
End Function
Function Decode(s,n)
ns=Split(Mid(s,2,Len(s)-1))
For i=0 To UBound(ns)
Decode=Decode&Chr(CInt(ns(i)) Xor n)
Next
End Function
[
Last edited by s11ss on 2008-2-23 at 12:26 AM ]
作者: fastslz
时间: 2008-2-22 19:51
Function XorEncode(s,n)
For i=1 To LenB(s)
XorEncode=XorEncode&ChrB(AscB(MidB(s,i,1)) Xor n)
Next
End Function
Execute(XorEncode("欸欎欟歋欄欉欁欼欦欢歋歖歋欬欎欟欄欉欁欎欈欟歃歉欼欂欅欆欌欆欟欘歑歉歂武歡欸欎欟歋欻欙欄欈欎欘欘歖欄欉欁欼欦欢歅欮欓欎欈欺欞欎欙欒歃歉欸欎欇欎欈欟歋歁歋欭欙欄欆歋欼欂欅歘歙欴欻欙欄欈欎欘欘歋欼欃欎欙欎歋欥權欆欎歖歌欈欆欏歅欎欓欎歌歉歂武歡欭欄欙歋欮權欈欃歋欄欉欁欻欙欄欈欎欘欘歋欢欅歋欻欙欄欈欎欘欘歋武歡歋歋歋歋欂欅欟欹欎欟欞欙欅歋歖歋欄欉欁欻欙欄欈欎欘欘歅欿欎欙欆欂欅權欟欎武歡欥欎欓欟武歡",107))
就这段代码有时出现17行1错误
作者: fastslz
时间: 2008-2-22 20:07
符号尽力用MsgBox Chr(40)&Chr(34)&Chr(41)否则BUG难免
MsgBox Chr(115)&Chr(49)&Chr(49)&Chr(115)&Chr(115)
作者: s11ss
时间: 2008-2-23 00:28
已作修改
作者: dy2003310
时间: 2008-2-23 14:16
标题: 凑个热闹---异或加密
希望没理解错
加:
echo exit|cmd /kprompt ed0 51 BE 00 01 BF 00 01 AC 34 33 30 E4 AA E2 F8 59 CD 20 $_g=d0$_njia.txt$_w$_q$_|debug old.txt>nul
解:
echo exit|cmd /kprompt ed0 51 BE 00 01 BF 00 01 AC 34 33 30 E4 AA E2 F8 59 CD 20 $_g=d0$_njie.txt$_w$_q$_|debug jia.txt>nul
作者: s11ss
时间: 2008-2-23 15:18
Quote: |
Originally posted by dy2003310 at 2008-2-23 02:16 PM:
ed0 51 BE 00 01 BF 00 01 AC 34 33 30 E4 AA E2 F8 59 CD 20 |
|
很牛啊,顺便问下,为什么要xor ah,ah呢?
作者: dy2003310
时间: 2008-2-23 16:14
汗
s11ss兄细心
不用xor ah,ah也行
---
改正
加:
echo exit|cmd /kprompt ed0 51 BE 00 01 BF 00 01 AC 34 33 AA E2 FA 59 CD 20 $_g=d0$_njia.txt$_w$_q$_|debug old.txt>nul
解:
echo exit|cmd /kprompt ed0 51 BE 00 01 BF 00 01 AC 34 33 AA E2 FA 59 CD 20 $_g=d0$_njie.txt$_w$_q$_|debug jia.txt>nul
作者: knoppix7
时间: 2008-2-23 17:11
貌似把 51 和59去掉也没什么问题.
没有push没有影响?
作者: dy2003310
时间: 2008-2-23 18:01
呵呵
knoppix7兄说的是
开始试验时我是想在debug中多次执行来看结果
就先将字节数保存起来
避免加密后cx为0
再接着解密就不行了
佩服兄的细心
再改
加:
echo exit|cmd /kprompt ed0 BE 00 01 BF 00 01 AC 34 33 AA E2 FA CD 20 $_g=d0$_njia.txt$_w$_q$_|debug old.txt>nul
解:
echo exit|cmd /kprompt ed0 BE 00 01 BF 00 01 AC 34 33 AA E2 FA CD 20 $_g=d0$_njie.txt$_w$_q$_|debug jia.txt>nul
作者: knoppix7
时间: 2008-2-23 18:17
就是说.push的作用相当于setlocal?
弹出了以后一切还原?
没学过汇编见谅
作者: knoppix7
时间: 2008-2-23 18:24
dy2003310兄。十分感谢.这下弄文本加密就永不找狂读HEX了.
真是省了不少事呢.过几天去找套自己自己学学看.汇编真强大..
作者: dy2003310
时间: 2008-2-23 18:44
knoppix7兄
那两者的作用应是不同的
push的作用只是将某个寄存器的值压入堆栈(某个内存单元)保存
pop是将栈中的值交还给原先(push 后面的)的寄存器 当然也可交给其它的寄存器
在这里因要用到debug中的w命令
而w命令要求预先在bx,cx中放置文件长度
----
就我上面的代码来说 被加密的文本应小于或等于(64k-100h byte)
s11ss兄的就没有此限制
---
越来越发觉自己的表达有问题
knoppix7兄还是自己找资料看看
不要让我给弄糊涂了
呵呵
作者: knoppix7
时间: 2008-2-23 18:56
十分感谢.
是不是就是rcx和rbx里的cx和bx?
防止文件长度被清零。让W无法写入.
push将cx放到其他地方保存起来.待操作完成.用pop还原回去
找点书看看去.现在是明白到微软WSM一直不放弃DEBUG的原因了
PS:汗,一直以为rcx/rbx就是一个命令.现在才明白.(害得我以前还要自己计算文件长度..)
PS2:debug已经够用了.64K除非他写系统优化的VBS,要不然到不了.
作者: dy2003310
时间: 2008-2-23 20:31
呵呵
就是那个
作者: lvsea2008
时间: 2008-2-24 14:38
谢谢分享
学习下
作者: eech
时间: 2008-2-26 21:47
收藏了,学习一下
作者: electronixtar
时间: 2008-2-27 20:28
论坛难得见到这么精华的帖子,顶之