标题: [已解决]VBS调用IE进UTF8论坛,中文编码无法登陆
[打印本页]
作者: 9zhmke
时间: 2009-7-8 12:37
标题: [已解决]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 ]
作者: slore
时间: 2009-7-8 13:11
标题: UTF就直接用UTF编码传就行了
cookie完全不用改。。。就一句就可以了啊
直接:
点击链接:
http://bbs.dp168.com/logging.php ... =%E7%99%BB%E5%BD%95
作者: 9zhmke
时间: 2009-7-8 13:19
这是两个不相干的问题,如果不改注册表里的cookies,是不可以同时登两个以上的号的,不信你在本论坛试就知道了。
...你句子里这个后面的%??是怎么来的呢?
[
Last edited by 9zhmke on 2009-7-8 at 13:21 ]
作者: slore
时间: 2009-7-8 13:43
你没有看我的标题么?
作者: 9zhmke
时间: 2009-7-8 13:45
看了,vbs的文件如果用utf文件根本就不能执行。不知道怎么才能在里面弄成utf8。如果可以转换成三字节格式的%数据就好了。
[
Last edited by 9zhmke on 2009-7-8 at 14:10 ]
作者: slore
时间: 2009-7-8 14:11
记事本用过没?
简单方法用专用播放器。。。
要用系统的方法就新建记事本,写 我是马甲
然后另存为 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就知道了
作者: slore
时间: 2009-7-8 14:42
标题: 专用播放器。。。
专用编码转换器。。。
作者: 9zhmke
时间: 2009-7-8 14:46
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 ]
作者: slore
时间: 2009-7-8 15:07
标题: 那就自己写呗
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
作者: 9zhmke
时间: 2009-7-8 15:14
刚试了可以了,太谢谢了,就是要这个效果呢
作者: 9zhmke
时间: 2009-7-8 16:13
把生成程序一起发上来,给大家省去调试的麻烦:
其中涉及到的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
)