ตัวอย่าง VB ในการ decode packet
Function decodePacket(value)
___Dim mask As Byte
___mask = &HAD
___decodePacket = value Xor mask
End Function
ตัวอย่างการ Connect ไปยังเกมส์ server
Private Sub cmdLogin_Click()
___If cmdLogin.Caption = "Login" Then
______Winsock1.Connect "203.144.137.9", 6414
______cmdLogin.Caption = "Logout"
___Else
______If Winsock1.State = 0 Then
_________Winsock1.Close
_________cmdLogin.Caption = "Login"
______End If
___End If
End Sub
___If cmdLogin.Caption = "Login" Then
______Winsock1.Connect "203.144.137.9", 6414
______cmdLogin.Caption = "Logout"
___Else
______If Winsock1.State = 0 Then
_________Winsock1.Close
_________cmdLogin.Caption = "Login"
______End If
___End If
End Sub
เมื่อ connect สำเร็จ
Private Sub Winsock1_Connect()
___If Winsock1.State = sckConnected Then
______pLoginPrompt = MakePacket("F4 44 01 00 00")
______Winsock1.SendData pLoginPrompt
___End If
End Sub
___If Winsock1.State = sckConnected Then
______pLoginPrompt = MakePacket("F4 44 01 00 00")
______Winsock1.SendData pLoginPrompt
___End If
End Sub
Public Function a2hex(alpha, length)
___hextemplate = "0123456789ABCDEF"
___alpha = Right("00000000" & UCase(alpha), length)
___If Len(alpha) = 2 Then
______ahindex = InStr(1, hextemplate, Left(alpha, 1)) - 1
______alindex = InStr(1, hextemplate, Right(alpha, 1)) - 1
______a2hex = (ahindex * (16 ^ 1)) + (alindex * (16 ^ 0))
___ElseIf Len(alpha) = 4 Then
______lb = Left(alpha, 2)
______hb = Right(alpha, 2)
______hx = a2hex(hb, 2) * (16 ^ 2) + a2hex(lb, 2)
______a2hex = hx
___ElseIf Len(alpha) = 8 Then
______aH = a2hex(Right(alpha, 4), 4)
______aL = a2hex(Left(alpha, 4), 4)
______a2hex = (aH * (16 ^ 4)) + aL
___End If
End Function
Public Function MakePacket(ByVal strPacket As String) As Byte()
___Dim i As Long
___Dim Hstr As String
___Hstr = Replace(strPacket, " ", "")
___Dim pHex() As Byte
___ReDim Preserve pHex((Len(Hstr) / 2 - 1))
___For i = 0 To Len(Hstr) / 2 - 1
______pHex(i) = decodePacket(a2hex(Mid(Hstr, (i * 2) + 1, 2), 2))
___Next
___Size = CInt(Len(strPacket) / 2)
___MakePacket = pHex
End Function
___hextemplate = "0123456789ABCDEF"
___alpha = Right("00000000" & UCase(alpha), length)
___If Len(alpha) = 2 Then
______ahindex = InStr(1, hextemplate, Left(alpha, 1)) - 1
______alindex = InStr(1, hextemplate, Right(alpha, 1)) - 1
______a2hex = (ahindex * (16 ^ 1)) + (alindex * (16 ^ 0))
___ElseIf Len(alpha) = 4 Then
______lb = Left(alpha, 2)
______hb = Right(alpha, 2)
______hx = a2hex(hb, 2) * (16 ^ 2) + a2hex(lb, 2)
______a2hex = hx
___ElseIf Len(alpha) = 8 Then
______aH = a2hex(Right(alpha, 4), 4)
______aL = a2hex(Left(alpha, 4), 4)
______a2hex = (aH * (16 ^ 4)) + aL
___End If
End Function
Public Function MakePacket(ByVal strPacket As String) As Byte()
___Dim i As Long
___Dim Hstr As String
___Hstr = Replace(strPacket, " ", "")
___Dim pHex() As Byte
___ReDim Preserve pHex((Len(Hstr) / 2 - 1))
___For i = 0 To Len(Hstr) / 2 - 1
______pHex(i) = decodePacket(a2hex(Mid(Hstr, (i * 2) + 1, 2), 2))
___Next
___Size = CInt(Len(strPacket) / 2)
___MakePacket = pHex
End Function
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
___Dim din() As Byte
___Winsock1.GetData din, , bytesTotal
___For i = 0 To bytesTotal - 1
______h = decodePacket(din(i))
______hx = Hex(h)
______strBuffer = strBuffer & IIf(h < 16, "0" & hx, hx)
___Next
End Sub
___Dim din() As Byte
___Winsock1.GetData din, , bytesTotal
___For i = 0 To bytesTotal - 1
______h = decodePacket(din(i))
______hx = Hex(h)
______strBuffer = strBuffer & IIf(h < 16, "0" & hx, hx)
___Next
End Sub
ถ้าทำ ข้างบนถูกต้อง
จะมี ข้อความตอบ กลับมาจาก server
คือ ค่า strBuffer ในที่นี้เป็นตัวแปรประเภท ข้อความ ซึ่ง จะเป็น ตัวเลข ฐาน 16 ที่ถูกถอดรหัสแล้ว จากนั้น ก็
เอาไป เล่นกันต่อเองนะครับ อิอิ ^^
จะมี ข้อความตอบ กลับมาจาก server
คือ ค่า strBuffer ในที่นี้เป็นตัวแปรประเภท ข้อความ ซึ่ง จะเป็น ตัวเลข ฐาน 16 ที่ถูกถอดรหัสแล้ว จากนั้น ก็
เอาไป เล่นกันต่อเองนะครับ อิอิ ^^
บอก ไม่ถูกหรอกคับ ว่า ข้อมูลอะไรอยู่ตรงไหน เพราะ เราจะจับ จาก header อย่างเดียว ไม่ได้สนใจ ตำแหน่งข้อมูลเลยซักกะติ๊ด เมื่อ เจอ header ถึง มาดู ว่า ข้อมูล ที่ต่อท้ายมานคืออะไร มีความหมายอย่างไร
จับ packet มาให้ได้ก่อน แล้ว แยกออกมาดู
หลังจากดูแล้ว จะเกิดอาการ งง และ โคตร งง
เหอๆ ๆ
ตอนนี้ต้องใช้ ความสามารถ ในการ มองแล้วนะครับ
เทคนิค ของผมคือ
มอง มุมกว้าง เอาข้อมูล มาเรียง ๆ ๆ กัน พยายามเรียงอย่างมีเหตุผล
แล้ว มองหา จุด ที่มี ความ สัมพันธ์ กัน หรือ จุด ที่ มีเอกลัษ แล้ว ตัด ข้อมูล มา เรียง ๆ ๆ ๆ
แล้ว มอง ๆ ๆ มอง ไป ก็ คำนวน เลข ฐาน 16 ไปด้วย
ผม อาจจะได้เปรียบหน่อย เพราะผม มอง เลข ฐาน 16 ให้เป็น ฐาน 10 ได้เลย ถ้า ค่าไม่ มากจนเกินไป เลยทำให้สังเกตุอะไรได้ง่าย ซึ่ง ถ้า คุณมองเห็น ตัวเลข ที่มีความหมาย ที่เรา หาอยู่วางเรียง ๆ ๆกัน อยู่ ก็ focus เข้าไป แล้ว นั่งแกะ ข้อมูลชุด นั้น ๆ ดู คุณจะได้ คำตอบเองว่า
ข้อมูลที่คุณหาอยู่ตรงไหน ตรงไหน บอกเลเวล ตรงไหน บอก เงิน ตรงไหนบอก texp เป็นต้น
เคดิต http://www.paradizex.com/forum/index.php?s=&showtopic=154&view=findpost&p=975
ไม่มีความคิดเห็น:
แสดงความคิดเห็น