Valhalla Legends Forums Archive | Battle.net Bot Development | Packet 0x26 Help

AuthorMessageTime
Spilled[DW]
I know you guys have gone over this before and yes i have read all the topics on this and i somewhat understand it, im having no problem sending the packet i have packet logged it sending and recieved the packet but i am lost on what to do with it when i recieve the packet back. reading the other post's i know i need the FileTime function. Can anyone help me parse the packet cuz i am lost when it comes to that. My code for sending it is here:

[code]
            InsertDWORD 1
            InsertDWORD 4
            InsertDWORD &H45
            InsertNTString strUser
            InsertNTString "profile\sex"
            InsertNTString "profile\age"
            InsertNTString "profile\location"
            InsertNTString "profile\description"
              SendPacket &H26
[/code]

I dont believe im sending it wrong because im not getting disconnected and i am getting a response just lost on what to do when i recieve it back. All i know is i need to use the FileTime function, where would i get this function and how would i use it to parse this packet? Any help is appreciated, thx

Spilled[DW]
February 15, 2005, 4:08 PM
shout
It appears that battle.net echos back the first 3 DWORDS. Then there is an array of strings reporting the keys requested.
February 15, 2005, 4:27 PM
Spilled[DW]
well yea battle.net echos back the DWORD's and the keys that i request but how would i go about parsing the packet and using the FILETIME function was my question to you...
February 15, 2005, 4:45 PM
CrAz3D
Well, to begin, you're sending the wrong info for the "Created On, Last Logon, Last Logoff, Time Logged" system information.

You should be requesting this:
"System\Username"
"System\Account Created"
"System\Last Logon"
"System\Last Logoff"
"System\Time Logged"

It will be returned like this:
[quote]0000  FF 26 5F 00 01 00 00 00 05 00 00 00 00 97 1F 08    .&_.............
0010  43 72 41 7A 33 44 5B 78 4C 5D 00 32 39 36 30 30    CrAz3D[xL].29600
0020  38 39 37 20 34 31 36 34 33 38 34 36 35 37 00 32    897 4164384657.2
0030  39 36 39 32 37 39 38 20 32 35 31 38 39 31 35 35    9692798 25189155
0040  31 37 00 32 39 36 39 32 37 39 38 20 32 35 31 33    17.29692798 2513
0050  31 33 34 33 30 34 00 36 35 32 36 39 30 33 00      134304.6526903.[/quote]

After seperating that info apart, you can use the FileTimeToLocalFileTime & then FileTimeToSystemTime & display your findings.

[code]Public Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Public Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End Type
Public Type SYSTEMTIME
        wYear As Integer
        wMonth As Integer
        wDayOfWeek As Integer
        wDay As Integer
        wHour As Integer
        wMinute As Integer
        wSecond As Integer
        wMilliseconds As Integer
End Type[/code]

What I did, after recieving 0x26 from bnet, I took the info that mattered to me & set about to finding the FileTime values.

I found the Profile info, split that by the nullterminator dude, Chr(0).  Then I split THAT data by a space, " " or Space(1), & set my FileTime.HighDate to the 1st item in the last array & FileTime.LowDat to the 2nd item in the array that is split by the Space.
Now I call FileTimeToLocalFileTime & then FileTimeToSystemTime

Now that we have the first item in the array split by Chr(0), we can move on to the next item in the array & do it the same way.



For the LAST item in the "split by Chr(0)" array I just used this ConvertTime() function to change the data sent to me by Battle.Net into something that is more understandable to me.
[code]Public Function ConvertTime(ByVal lngMS As Double) As String
    Dim lngSeconds As Long, lngDays As Long, lngHours As Long, lngMins As Long
    Dim strSeconds As String, strDays As String
    lngSeconds = lngMS / 1000
    lngDays = Int(lngSeconds / 86400)
    lngSeconds = lngSeconds Mod 86400
    lngHours = Int(lngSeconds / 3600)
    lngSeconds = lngSeconds Mod 3600
    lngMins = Int(lngSeconds / 60)
    lngSeconds = lngSeconds Mod 60
    If lngSeconds <> 1 Then strSeconds = "s"
    If lngDays <> 1 Then strDays = "s"
    ConvertTime = lngDays & " day" & strDays & ", " & lngHours & " hours, " & lngMins & " minutes and " & lngSeconds & " second" & strSeconds
End Function[/code]


I think that about wraps it up, more questions ask away
   
   
February 15, 2005, 5:03 PM
Spilled[DW]
Ok i read what you said and fixed how i was sending the packet that code looks  like this:

[code]

            Connection.InsertDWORD 1
            Connection.InsertDWORD 5
            Connection.InsertDWORD &H45
            Connection.InsertNTString "Spilled[DW]"
            Connection.InsertNTString "System\Username"
            Connection.InsertNTString "System\Account Created"
            Connection.InsertNTString "System\Last Logon"
            Connection.InsertNTString "System\Last Logoff"
            Connection.InsertNTString "System\Time Logged"
            Connection.SendPacket &H26
[/code]

I took the convertime function the and Filetime API's and added those to my module but when i was reading how you said the parse the packet you kind of lost me on that sry, if you could help me on that a little it would be  much appreciated... thanks crazed :D
February 15, 2005, 5:23 PM
Spilled[DW]
ooops sry forgot to post what i packet logged, here you go

[code]
1  Hide  Hide  123  Send 
0000  FF 26 7B 00 01 00 00 00 05 00 00 00 45 00 00 00    .&{.........E...
0010  53 70 69 6C 6C 65 64 5B 44 57 5D 00 53 79 73 74    Spilled[DW].Syst
0020  65 6D 5C 55 73 65 72 6E 61 6D 65 00 53 79 73 74    em\Username.Syst
0030  65 6D 5C 41 63 63 6F 75 6E 74 20 43 72 65 61 74    em\Account Creat
0040  65 64 00 53 79 73 74 65 6D 5C 4C 61 73 74 20 4C    ed.System\Last L
0050  6F 67 6F 6E 00 53 79 73 74 65 6D 5C 4C 61 73 74    ogon.System\Last
0060  20 4C 6F 67 6F 66 66 00 53 79 73 74 65 6D 5C 54     Logoff.System\T
0070  69 6D 65 20 4C 6F 67 67 65 64 00                   ime Logged.

2  Hide  Hide  95  Recv 
0000  FF 26 5F 00 01 00 00 00 05 00 00 00 45 00 00 00    .&_.........E...
0010  73 70 69 6C 6C 65 64 5B 64 77 5D 00 32 39 36 35    spilled[dw].2965
0020  34 38 31 35 20 32 39 38 31 39 31 31 30 31 30 00    4815 2981911010.
0030  32 39 36 39 32 38 30 33 20 39 36 37 36 31 37 30    29692803 9676170
0040  38 37 00 32 39 36 39 32 38 30 32 20 32 38 33 30    87.29692802 2830
0050  30 38 34 33 38 33 00 36 37 37 35 35 37 34 00       084383.6775574.

[/code]

o and sry about the double post everyone!

Looking at the logged recieved packet, on the first key would 29654815 be the highdate and 2981911010 be the low date?

Edit#2: Wait that would be the 2nd key cuz the first key we used was System/Username so thats why Spilled[DW] is there so 29654815 is the 2nd key's high date and 2981911010 is the low date of the 2nd key correct me if im wrong?
February 15, 2005, 5:26 PM
KkBlazekK
The one on the left of the space is low, the one on the right is the high, or am I mistaken?
February 15, 2005, 5:58 PM
Spilled[DW]
hrmm i thought the left was high anyone wanna clear this up for us? on the other hand now that i know which is low/high how would i use the FileTime functions? can anyone help me parse one of these keys? if i was shown how to use the function on 1 im sure i could do the other keys on my own, thx to all that has helped me much appreciated :D
February 15, 2005, 6:25 PM
HdxBmx27
As posted above:
[code]Public Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long[/code]
Simpley put the Low/High Info into the corrsponding parts og the File Time struct, then pass it through FileTimeToSystemTime() and use the resulting system time as such:
[code]Public Function FTtoST(High as long, Low as long) as string
  Dim FT as FileTime, ST as SystemTime
  FT.dwLowDateTime = Low
  FT.dwHighDateTime = High
  Call FileTimeToSystemTime(FT, ST)
  With ST
      FTtoST = .wMonth & "/" & .wDay & "/" & .wYear & Space(1) & .wHour & ":" & .wMinute & ":" & .wSecond & "." & .wMilliseconds
End Function[/code]
Sorry GTG period is ending. i'll check back tonight and finish up.
~-~(HDX)~-~
February 15, 2005, 7:03 PM
Spilled[DW]
Ok, i split the data and placed the high and low time into a variable, while i did this i packet logged and inserted a break point to make sure my variables were correct and heres the packet i recieved

[code]
1  Hide  Hide  67  Send 
0000  FF 26 43 00 01 00 00 00 02 00 00 00 45 00 00 00    .&C.........E...
0010  53 70 69 6C 6C 65 64 5B 44 57 5D 00 53 79 73 74    Spilled[DW].Syst
0020  65 6D 5C 55 73 65 72 6E 61 6D 65 00 53 79 73 74    em\Username.Syst
0030  65 6D 5C 41 63 63 6F 75 6E 74 20 43 72 65 61 74    em\Account Creat
0040  65 64 00                                          ed.

2  Hide  Hide  48  Recv 
0000  FF 26 30 00 01 00 00 00 02 00 00 00 45 00 00 00    .&0.........E...
0010  73 70 69 6C 6C 65 64 5B 64 77 5D 00 32 39 36 35    spilled[dw].2965
0020  34 38 31 35 20 32 39 38 31 39 31 31 30 31 30 00    4815 2981911010.

[/code]

I checked if my variables were the correct value and
Info(0) = 29654815
Info(1) = 2981911010
Then i passed these variables into the function you gave me (FTtoST) like this:
[code]
Addchat vbWhite, "Account Created: " & FTtoST(info(0), info(1))
[/code]

heres the Function:

[code]
Public Function FTtoST(High As Long, Low As Long) As String
  Dim FT As FILETIME, ST As SYSTEMTIME
  FT.dwLowDateTime = Low
  FT.dwHighDateTime = High
  Call FileTimeToSystemTime(FT, ST)
  With ST
      FTtoST = .wMonth & "/" & .wDay & "/" & .wYear & Space(1) & .wHour & ":" & .wMinute & ":" & .wSecond & "." & .wMilliseconds
  End With
End Function
[/code]

When i do this i get an error, "OverFlow" was it i believe, i doubled checked my variables and they are exactly what they should be.
Any help would be MUCH appreciated, thx everyone.
February 15, 2005, 8:09 PM
KkBlazekK
https://davnit.net/bnet/vL/phpbbs/index.php?topic=10417.msg99602#msg99602

See that topic for resolving an overflow.
February 15, 2005, 8:15 PM
Spilled[DW]
So i am passing the High and Low into the function correctly? i just need to add that module to control the variable over flow?
February 15, 2005, 8:18 PM
Spilled[DW]
Ive added the module on the post you provided me, but im lost on what to do now, I Tried passing the high and low into the FTtoST function and it is still overflowing. Lost on what to do now any help?
February 16, 2005, 6:04 PM
HdxBmx27
If you would of read the post, you should know that what you need to do is check if teh Number is > 2147483647, If so then subtract 4294967296#
from the number and add the result to the FT struct.
Well using my example:
[code]Public Function FTtoST(High as long, Low as long) as string
  Dim FT as FileTime, ST as SystemTime
  FT.dwLowDateTime = IIF(Low > 2147483647, Low - 4294967296#, Low)
  FT.dwHighDateTime = IIF(High > 2147483647, High - 4294967296#, High)
  Call FileTimeToSystemTime(FT, ST)
  With ST
      FTtoST = .wMonth & "/" & .wDay & "/" & .wYear & Space(1) & .wHour & ":" & .wMinute & ":" & .wSecond & "." & .wMilliseconds
End Function[/code]
This *should* stop the over flow.
Works on my bot :/
~-~(HDX)~-~
February 16, 2005, 6:48 PM
Spilled[DW]
I tried reading and lookin at that tutorial but i just didnt get it, ill try this and keep you posted check back soon as possible thanks alot

Edit: Left is high and right is low, correct me if im wrong anyone?
February 16, 2005, 6:50 PM
Spilled[DW]
[code]
        Case &H26
            Dim ProfileSplt() As String
            Dim Current As String
            Dim Info() As String
                ProfileSplt = Split(strData, "spilled[dw]", 2)
                ProfileSplt(1) = Left(ProfileSplt(1), Len(ProfileSplt(1)) - 1) 'Removes
                ProfileSplt(1) = Right(ProfileSplt(1), Len(ProfileSplt(1)) - 1)
                Info = Split(ProfileSplt(1), " ", 2)
                Current = modFunctions.FTtoST(Info(0), Info(1))
[/code]

Still getting a byref error and wheni use the val function to convert still overflowing. Ideas anyone?

Edit: Its overflowing before it gets to the function, i try passign it as info(0) and info(1) cuz thats the splits and its a byreg error Mismath so i use the val function to convert it and it overflows before i pass the value onto the function... so somehow i need to pass it without it overflowing... ideas?
February 16, 2005, 6:56 PM
UserLoser.
It's overflowing because you're putting too much of something into another thing which can't hold that much.  In this case, you're putting too large of a number into a variable which can't hold that big of a number.  If you don't understand that, then this should be a good enough example:  You're trying to put a liter of water into an empty container which is designed to hold a pint.  Guess what, it'll overflow
February 16, 2005, 8:08 PM
Spilled[DW]
Just like to say i got it working and thanks to everyone that helped me i really appreciate it, now gonna go and work on parsing multiple keys, thank you once again
February 16, 2005, 8:25 PM
^
Nice, well done, good job :)
February 16, 2005, 8:33 PM

Search