中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-07 16:14
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创vbs]异或加密 查看 2,722 回复 16
楼 主 [原创vbs]异或加密 发表于 2008-02-22 19:20 ·  中国 北京 鹏博士BGP
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
原理是没错的,不过发现好多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 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
fastslz +18 2008-02-22 19:42
2 发表于 2008-02-22 19:51 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
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错误
第一高手 第二高手

3 发表于 2008-02-22 20:07 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
符号尽力用MsgBox Chr(40)&Chr(34)&Chr(41)否则BUG难免

MsgBox Chr(115)&Chr(49)&Chr(49)&Chr(115)&Chr(115)
第一高手 第二高手

4 发表于 2008-02-23 00:28 ·  中国 北京 电信
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
已作修改
5 凑个热闹---异或加密 发表于 2008-02-23 14:16 ·  中国 广东 茂名 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
希望没理解错

加:
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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
electronixtar +30 2008-02-27 20:26
6 发表于 2008-02-23 15:18 ·  中国 北京 鹏博士BGP
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
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呢?
7 发表于 2008-02-23 16:14 ·  中国 广东 茂名 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线

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
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
s11ss +5 2008-02-23 16:26
knoppix7 +8 2008-02-23 16:54
8 发表于 2008-02-23 17:11 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
貌似把 51 和59去掉也没什么问题.
没有push没有影响?
9 发表于 2008-02-23 18:01 ·  中国 广东 茂名 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
呵呵
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
10 发表于 2008-02-23 18:17 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
就是说.push的作用相当于setlocal?
弹出了以后一切还原?
没学过汇编见谅
11 发表于 2008-02-23 18:24 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
dy2003310兄。十分感谢.这下弄文本加密就永不找狂读HEX了.
真是省了不少事呢.过几天去找套自己自己学学看.汇编真强大..
12 发表于 2008-02-23 18:44 ·  中国 广东 茂名 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
knoppix7兄
那两者的作用应是不同的
push的作用只是将某个寄存器的值压入堆栈(某个内存单元)保存
pop是将栈中的值交还给原先(push 后面的)的寄存器 当然也可交给其它的寄存器
在这里因要用到debug中的w命令
而w命令要求预先在bx,cx中放置文件长度
----
就我上面的代码来说 被加密的文本应小于或等于(64k-100h byte)
s11ss兄的就没有此限制
---
越来越发觉自己的表达有问题
knoppix7兄还是自己找资料看看
不要让我给弄糊涂了
呵呵
13 发表于 2008-02-23 18:56 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
十分感谢.
是不是就是rcx和rbx里的cx和bx?
防止文件长度被清零。让W无法写入.
push将cx放到其他地方保存起来.待操作完成.用pop还原回去

找点书看看去.现在是明白到微软WSM一直不放弃DEBUG的原因了

PS:汗,一直以为rcx/rbx就是一个命令.现在才明白.(害得我以前还要自己计算文件长度..)

PS2:debug已经够用了.64K除非他写系统优化的VBS,要不然到不了.
14 发表于 2008-02-23 20:31 ·  中国 广东 茂名 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
呵呵
就是那个
15 发表于 2008-02-24 14:38 ·  中国 江苏 苏州 电信
新手上路
积分 2
发帖 1
注册 2006-10-24 02:07
19年会员
UID 67945
性别 男
状态 离线
谢谢分享
学习下
论坛跳转: