中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]VBS调用IE进UTF8论坛,中文编码无法登陆
作者:
标题: [已解决]VBS调用IE进UTF8论坛,中文编码无法登陆 上一主题 | 下一主题
9zhmke
中级用户




积分 355
发帖 99
注册 2003-1-6
状态 离线
『楼 主』:  [已解决]VBS调用IE进UTF8论坛,中文编码无法登陆

自己做了个登论坛小号的程序如下(用户和密码正确):
Set regwsh=createobject("wscript.shell")  
Dim Wsh,cookies  
Set Wsh = WScript.CreateObject("WScript.Shell")
cookies=regwsh.regread ("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies")
regwsh.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies","C:\\Documents and Settings\\All Users\\Cookies\\我是马甲"
Wsh.Run "IEXPLORE.EXE http://bbs.dp168.com/logging.php ... ime=0&username=鎴戞槸椹敳&password=15239776",,False
wscript.sleep 3000
regwsh.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies",cookies
Set Wsh=NoThing
WScript.quit


    本程序利用IE或其它浏览器启动时只检查一次cookies的原理来实现多个IE窗口同时登录多个用户功能。其中下面这句的乱码是被转换过后的用户名“我是马甲”:
Wsh.Run "IEXPLORE.EXE http://bbs.dp168.com/logging.php ... ime=0&username=鎴戞槸椹敳&password=15239776",,False

    使用了批处理生成vbs只能生成ansi编码。而这次的论坛要求使用utf8编码(一些论坛是),所以当户名是中文时老是出错,英文用户名时不会出错。怎样能把ANSI编码的转成utf8呢?vbs只能使用ANSI代码,一用UTF8就出错,临时解决方案是用一个ANSI文本、一个UTF8文本,在调用IE的字符串里使用转换过后的UTF8的字符串,但这样做任然有很多中文出现问号,使过程无法完成,比如用户名为“一个会员”时,转成UTF8是“涓€涓細鍛?”,这个问号的出现使用户无法登陆,有没有好办法呢?

[ Last edited by 9zhmke on 2009-7-8 at 15:16 ]

2009-7-8 12:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  UTF就直接用UTF编码传就行了

cookie完全不用改。。。就一句就可以了啊

直接:
点击链接:
http://bbs.dp168.com/logging.php ... =%E7%99%BB%E5%BD%95



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-7-8 13:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
9zhmke
中级用户




积分 355
发帖 99
注册 2003-1-6
状态 离线
『第 3 楼』:  

这是两个不相干的问题,如果不改注册表里的cookies,是不可以同时登两个以上的号的,不信你在本论坛试就知道了。

...你句子里这个后面的%??是怎么来的呢?

[ Last edited by 9zhmke on 2009-7-8 at 13:21 ]

2009-7-8 13:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

你没有看我的标题么?



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-7-8 13:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
9zhmke
中级用户




积分 355
发帖 99
注册 2003-1-6
状态 离线
『第 5 楼』:  

看了,vbs的文件如果用utf文件根本就不能执行。不知道怎么才能在里面弄成utf8。如果可以转换成三字节格式的%数据就好了。

[ Last edited by 9zhmke on 2009-7-8 at 14:10 ]

2009-7-8 13:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 6 楼』:  

记事本用过没?

简单方法用专用播放器。。。

要用系统的方法就新建记事本,写 我是马甲

然后另存为 utf8编码名字叫1.txt

没用16进制查看器怎么看呢?
新建一个文本文档写000000000000000
UTF8编码1个汉字转3个字节,你打3(记事本UTF编码头)+12个0

然后保存为2.txt

然后打开CMD

运行:
fc /b 1.txt 2.txt
会得到2列信息,一列是1的编码,一列30(0的编码)


所以。。。。

还是推荐找个专门工具转吧。。。

其实貌似。。。
很多网页你提交都可以看到。。。比如吧,类似google
你查找下"我是马甲"看下IE的URL就知道了



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-7-8 14:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 7 楼』:  专用播放器。。。

专用编码转换器。。。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-7-8 14:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
9zhmke
中级用户




积分 355
发帖 99
注册 2003-1-6
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by slore at 2009-7-8 02:42 PM:
专用编码转换器。。。

不会全手工操作吧? 我的目的是根据一个用户名密码清单来生成这么几百个vbs。

如果一个直接在地址栏用javascript:alert(encodeURI('我是马甲'))就可以查出来,多了还不清楚怎么弄。继续查资料中....

[ Last edited by 9zhmke on 2009-7-8 at 14:59 ]

2009-7-8 14:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  那就自己写呗

MsgBox UTF8Encode("我是马甲")

Public Function UTF8Encode(szString)
    Dim szChar
    Dim szTemp
    Dim szCode
    Dim szHex
    Dim szBin
    Dim iCount1
    Dim iCount2
    Dim iStrLen1
    Dim iStrLen2
    Dim lResult
    Dim lAscVal
    szString = Trim(szString)
    iStrLen1 = Len(szString)
    For iCount1 = 1 To iStrLen1
        szChar = Mid(szString, iCount1, 1)
        lAscVal = AscW(szChar)
        If lAscVal >= &H0 And lAscVal <= &HFF Then
            If
(lAscVal >= &H30 And lAscVal <= &H39) or _
(
lAscVal >= &H41 And lAscVal <= &H5A) or _
(
lAscVal >= &H61 And lAscVal <= &H7A) Then
                szCode = szCode & szChar
            Else

                szCode = szCode & "%" & Hex(AscW(szChar))
            End If
        Else

            szHex = Hex(AscW(szChar))
            iStrLen2 = Len(szHex)
            For iCount2 = 1 To iStrLen2
                szChar = Mid(szHex, iCount2, 1)
                szBin = szBin & Mid("0000;0001;0010;0011;0100;0101;0110;0111;1000;1001;1010;1011;1100;1101;1110;1111;", CLng("&H" & szChar) * 5 + 1, 4)
            Next
            szTemp = "1110" & Left(szBin, 4) & "10" & Mid(szBin, 5, 6) & "10" & Right(szBin, 6)
            For iCount2 = 1 To 24
                If Mid(szTemp, iCount2, 1) = "1" Then
                    lResult = lResult + 1 * 2 ^ (24 - iCount2)
                    Else: lResult = lResult + 0 * 2 ^ (24 - iCount2)
                End If
            Next

            szTemp = Hex(lResult)
            szCode = szCode & "%" & Left(szTemp, 2) & "%" & Mid(szTemp, 3, 2) & "%" & Right(szTemp, 2)
        End If
        szBin = vbNullString
        lResult = 0
    Next
    UTF8Encode = szCode
End Function



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-7-8 15:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
9zhmke
中级用户




积分 355
发帖 99
注册 2003-1-6
状态 离线
『第 10 楼』:  

刚试了可以了,太谢谢了,就是要这个效果呢

2009-7-8 15:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
9zhmke
中级用户




积分 355
发帖 99
注册 2003-1-6
状态 离线
『第 11 楼』:  

把生成程序一起发上来,给大家省去调试的麻烦:
其中涉及到的LUNTAN2.TXT是马甲存放文件,格式为用户名+空格+密码,空格为任意个但是用户名和密码中不能有空格
@echo off
set menu=42
dir *./b|find "字母"&&for /f %%i in ('dir /b *.') do if not %%i==保留 rd /s /q %%i>nul 2>nul
set ch=1
set hz=1
set ch_count=0
set hz_count=0
setlocal enabledelayedexpansion
for /f "tokens=1,2" %%i in (LUNTAN2.TXT) do (
        set ansi=temp
        echo 正在处理:“%%i”密码为“%%j”
        echo Set regwsh=createobject^("wscript.shell"^) >%%i.vbs
        >>%%i.vbs echo Dim Wsh,bbs,cookies
        >>%%i.vbs echo Set Wsh = WScript.CreateObject^("WScript.Shell"^)
        >>%%i.vbs echo cookies=regwsh.regread ^("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies"^)
        >>%%i.vbs echo regwsh.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies","C:\\Documents and Settings\\All Users\\Cookies\\%%i"
        >>%%i.vbs echo bbs=UTF8Encode^("%%i"^)
        >>%%i.vbs echo user="IEXPLORE.EXE http://bbs.dp168.com/logging.php?action=login&loginsubmit=true&cookietime=0&username="^&bbs^&"&password=%%j"
        >>%%i.vbs echo Wsh.Run user,,False
        >>%%i.vbs echo wscript.sleep 3000
        >>%%i.vbs echo regwsh.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies",cookies
        >>%%i.vbs echo Set Wsh=NoThing
        >>%%i.vbs echo WScript.quit
       
       
        >>%%i.vbs echo Public Function UTF8Encode^(szString^)
        >>%%i.vbs echo Dim szChar,szTemp,szCode,szHex,szBin,iCount1,iCount2,iStrLen1,iStrLen2,lResult,lAscVal
        >>%%i.vbs echo szString = Trim^(szString^)
        >>%%i.vbs echo iStrLen1 = Len^(szString^)
        >>%%i.vbs echo For iCount1 = 1 To iStrLen1
        >>%%i.vbs echo     szChar = Mid^(szString, iCount1, 1^)
        >>%%i.vbs echo     lAscVal = AscW^(szChar^)
        >>%%i.vbs echo     If lAscVal ^>= ^&H0 And lAscVal ^<= ^&HFF Then
        >>%%i.vbs echo         If ^(lAscVal ^>= ^&H30 And lAscVal ^<= ^&H39^) or ^(lAscVal ^>= ^&H41 And lAscVal ^<= ^&H5A^) or ^(lAscVal ^>= ^&H61 And lAscVal ^<= ^&H7A^) Then
        >>%%i.vbs echo             szCode = szCode ^& szChar
        >>%%i.vbs echo         Else
        >>%%i.vbs echo             szCode = szCode ^& "%%" ^& Hex(AscW^(szChar^)^)
        >>%%i.vbs echo         End If
        >>%%i.vbs echo     Else
        >>%%i.vbs echo         szHex = Hex^(AscW^(szChar^)^)
        >>%%i.vbs echo         iStrLen2 = Len^(szHex^)
        >>%%i.vbs echo         For iCount2 = 1 To iStrLen2
        >>%%i.vbs echo             szChar = Mid^(szHex, iCount2, 1^)
        >>%%i.vbs echo             szBin = szBin ^& Mid^("0000;0001;0010;0011;0100;0101;0110;0111;1000;1001;1010;1011;1100;1101;1110;1111;", CLng^( "&H" ^& szChar^) * 5 + 1, 4^)
        >>%%i.vbs echo         Next
        >>%%i.vbs echo         szTemp = "1110" ^& Left^(szBin, 4^) ^& "10" ^& Mid^(szBin, 5, 6^) ^& "10" ^& Right^(szBin, 6^)
        >>%%i.vbs echo         For iCount2 = 1 To 24
        >>%%i.vbs echo             If Mid^(szTemp, iCount2, 1^) = "1" Then
        >>%%i.vbs echo                 lResult = lResult + 1 * 2 ^^ ^(24 - iCount2^)
        >>%%i.vbs echo                 Else: lResult = lResult + 0 * 2 ^^ ^(24 - iCount2^)
        >>%%i.vbs echo             End If
        >>%%i.vbs echo         Next
        >>%%i.vbs echo         szTemp = Hex^(lResult^)
        >>%%i.vbs echo         szCode = szCode ^& "%%" ^& Left^(szTemp, 2^) ^& "%%" ^& Mid^(szTemp, 3, 2^) ^& "%%" ^& Right^(szTemp, 2^)
        >>%%i.vbs echo     End If
        >>%%i.vbs echo     szBin = vbNullString
        >>%%i.vbs echo     lResult = 0
        >>%%i.vbs echo Next
        >>%%i.vbs echo UTF8Encode = szCode
        >>%%i.vbs echo End Function
       
       
       
       
        if "%%i" geq "阿" set chhz=汉字!hz!\ & set /a hz_count=hz_count+1&set /a hz=hz_count / menu + 1
        if "%%i" leq "阿" set chhz=英文!ch!\ & set /a ch_count=ch_count+1&set /a ch=ch_count / menu + 1
        if not exist !chhz! md !chhz!
        echo move %%i.vbs !chhz!,汉字计数=!hz_count!,汉字=!hz!,字符计数=!ch_count!,字符=!ch!.
        move %%i.vbs !chhz! >nul 2>nul
        )


2009-7-8 16:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: