Tác giả: Sưu tầm
Mô tả: Sử dụng Y! Protocol để đăng nhập, gởi nhận tin nhắn Y!M trong VB6
Yêu cầu:
- Winsock
- YMSG12ENCRYPT.dll (http://www.esnips.com/doc/a8edf6cb-54c8 ... G12ENCRYPT)
Bài viết này không nói sâu về Yahoo Protocol và sử dụng nó như thế nào, mà chỉ nếu các bước để đăng nhập, gởi nhận tin nhắn.
về Yahoo! Protocol, các bạn có thể tham khảo tại đây
http://www.venkydude.com/articles/yahoo.htm
Đầu tiên, tạo 1 Standard EXE Project
ta cần 1 module để thực hiện công việc mã hóa, giải mã các gói tin gởi, nhận từ Yahoo.
nội dung module như sau:
Mã: Chọn hết
-
- Option Explicit
- Private Declare Function YMSG12_ScriptedMind_Encrypt Lib "YMSG12ENCRYPT.dll" (ByVal username As String, ByVal Password As String, ByVal Seed As String, ByVal result_6 As String, ByVal result_96 As String, intt As Long) As Boolean
-
- Public Function EncryptPassword(strID As String, strPassword As String, strChallange As String)
- 'encrypt password
- Dim strEncrypted1 As String, strEncrypted2 As String
- strEncrypted1 = String(50, vbNullChar): strEncrypted2 = String(50, vbNullChar)
- Call YMSG12_ScriptedMind_Encrypt(strID, strPassword, strChallange, strEncrypted1, strEncrypted2, 1)
- EncryptPassword = strEncrypted1 & ":" & strEncrypted2
- End Function
- Public Function ChrH(strString) As String
- 'hex to ascii
- Dim A1
- A1 = Split(strString, " ")
- Dim i As Integer
- For i = 0 To UBound(A1)
- ChrH = ChrH & Chr("&H" & A1(i))
- DoEvents
- Next i
- End Function
- Public Function AscToHex(strString As String) As String
- 'ascii to hex
- Dim i As Integer
- For i = 1 To Len(strString)
- If Len(Hex(Asc(Mid(strString, i, 1)))) = 1 Then
- AscToHex = AscToHex & "0" & Hex(Asc(Mid(strString, i, 1)))
- Else
- AscToHex = AscToHex & Hex(Asc(Mid(strString, i, 1)))
- End If
- If i <> Len(strString) Then AscToHex = AscToHex & " "
- DoEvents
- Next i
- End Function
-
- '````````````````````````````````````````````````````````````
-
- 'Put a value up to 65535 into this, and get a 2 byte integer
- Public Function Word(ByVal lngVal As Long) As String
- 'by Xeon
- Dim Lo As Single
- Dim Hi As Single
-
- Lo = Fix(lngVal / 256)
- Hi = lngVal Mod 256
-
- Word = Chr(Lo) & Chr(Hi)
- End Function
-
Sau đó về lại Form1, gắn vào đó 1 đối tượng winsock, đặt tên gì cũng được (trong bài này đặt là Sock)
Cũng cần nói sơ qua về quá trình đăng nhập, gởi nhận tin nhắn trên cơ sở Y! Protocol
Đăng nhập:
Để bắt đầu quá trình đăng nhập, trước tiên, Y!M sẽ gởi 1 gói tin tới Server, gói tin như sau:
YMSG W 1Ŕ€sundaxxxaŔ€
đại khái, nội dung gói tin này là: "Ê! server, tao sắp login đây!"

Sau đó server sẽ trả về lại 1 gói tin:
YMSG , W ~* —1Ŕ€sundxxxaŔ€94Ŕ€3x0FCwY8xVwZSf90P.g5SA--Ŕ€
nội đung đại khái như: "Mày thích thì mày cứ việc login, nhưng khai ra tên tuổi mật khâu đây!"

Sau đó thì Y!M sẽ gởi gói tin chứa username và mật khẩu để đăng nhập:
YMSG ] T 0Ŕ€sunxxxxxaŔ€6Ŕ€2D6hQasaMBO1hSakKjf0MA--Ŕ€96Ŕ€H12vBg.nio6BdDL98MQRnA--Ŕ€2Ŕ€1Ŕ€1Ŕ€sunxxxxxxŔ€
<= "Dạ, tên em là:...., mật khẩu em là:..."

Gởi tin nhắn:
Để gởi tin nhắn (sau khi đăng nhập), Y!M sẽ gởi đến server 1 gói tin như sau:
YMSG D ZUŞV~*
—1Ŕ€sunxxxxxŔ€5Ŕ€venkxxxxeŔ€14Ŕ€hiŔ€97Ŕ€0Ŕ€63Ŕ€;0Ŕ€64Ŕ€0Ŕ€1002Ŕ€1Ŕ€
<= "Ê mậy, gởi giúp tao đoạn tin này:.... tới thằng này:..."

Nhận tin nhắn:
Khi có người gởi tin cho bạn, server sẽ "bắn" về Y!M của bạn 1 gói tin như sau:
YMSG A ~* —5Ŕ€sundaxxxxŔ€4Ŕ€venkyxxxxŔ€14Ŕ€hi thereŔ€63Ŕ€;0Ŕ€64Ŕ€0Ŕ€97Ŕ€0Ŕ€
Đại khái là: "Êh thằng kia, có tin nhắn! ku:.... gởi cho mày, nội dung:..."

Tất nhiên khi code thì ta không thể gởi trực tiếp những gói tin đọc hiểu chết như thế, mà phải qua một công đoạn gọi là: mã hóa - giải mã
đó là nhiệm vụ của cái module tạo ra ở đầu bài