中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: [原创vbs]异或加密 上一主题 | 下一主题
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『楼 主』:  [原创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 ]

   此帖被 +18 点积分         点击查看详情   
评分人:【 fastslz 分数: +18  时间:2008-2-22 19:42


2008-2-22 19:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 2 楼』:  


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错误



第一高手    第二高手

2008-2-22 19:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 3 楼』:  

符号尽力用MsgBox Chr(40)&Chr(34)&Chr(41)否则BUG难免

MsgBox Chr(115)&Chr(49)&Chr(49)&Chr(115)&Chr(115)



第一高手    第二高手

2008-2-22 20:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 4 楼』:  

已作修改

2008-2-23 00:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dy2003310
初级用户





积分 180
发帖 68
注册 2006-12-21
来自 China
状态 离线
『第 5 楼』:  凑个热闹---异或加密

希望没理解错

加:
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

   此帖被 +30 点积分         点击查看详情   
评分人:【 electronixtar 分数: +30  时间:2008-2-27 20:26


2008-2-23 14:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 6 楼』:  



  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呢?

2008-2-23 15:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dy2003310
初级用户





积分 180
发帖 68
注册 2006-12-21
来自 China
状态 离线
『第 7 楼』:  


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

   此帖被 +13 点积分       点击查看详情   
评分人:【 s11ss 分数: +5  时间:2008-2-23 16:26
评分人:【 knoppix7 分数: +8  时间:2008-2-23 16:54


2008-2-23 16:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 8 楼』:  

貌似把 51 和59去掉也没什么问题.
没有push没有影响?

2008-2-23 17:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dy2003310
初级用户





积分 180
发帖 68
注册 2006-12-21
来自 China
状态 离线
『第 9 楼』:  

呵呵
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

2008-2-23 18:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 10 楼』:  

就是说.push的作用相当于setlocal?
弹出了以后一切还原?
没学过汇编见谅

2008-2-23 18:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 11 楼』:  

dy2003310兄。十分感谢.这下弄文本加密就永不找狂读HEX了.
真是省了不少事呢.过几天去找套自己自己学学看.汇编真强大..

2008-2-23 18:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dy2003310
初级用户





积分 180
发帖 68
注册 2006-12-21
来自 China
状态 离线
『第 12 楼』:  

knoppix7兄
那两者的作用应是不同的
push的作用只是将某个寄存器的值压入堆栈(某个内存单元)保存
pop是将栈中的值交还给原先(push 后面的)的寄存器  当然也可交给其它的寄存器
在这里因要用到debug中的w命令
而w命令要求预先在bx,cx中放置文件长度
----
就我上面的代码来说  被加密的文本应小于或等于(64k-100h byte)
s11ss兄的就没有此限制
---
越来越发觉自己的表达有问题
knoppix7兄还是自己找资料看看
不要让我给弄糊涂了
呵呵

2008-2-23 18:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 13 楼』:  

十分感谢.
是不是就是rcx和rbx里的cx和bx?
防止文件长度被清零。让W无法写入.
push将cx放到其他地方保存起来.待操作完成.用pop还原回去

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

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

PS2:debug已经够用了.64K除非他写系统优化的VBS,要不然到不了.

2008-2-23 18:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dy2003310
初级用户





积分 180
发帖 68
注册 2006-12-21
来自 China
状态 离线
『第 14 楼』:  

呵呵
就是那个

2008-2-23 20:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lvsea2008
新手上路





积分 2
发帖 1
注册 2006-10-24
状态 离线
『第 15 楼』:  

谢谢分享
学习下

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


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



论坛跳转: