Valhalla Legends Forums Archive | Battle.net Bot Development | 0x51 Help using BNCSUtil

AuthorMessageTime
Archangel
Since, i always get the same response and i havnt programmed a bot since 05 i need some help, i know.. i have tried.

Edit: Response i got "0x200: Invalid CD key" and yes its a valid cd-key.

[code]
Private Sub BNCS_SID_Auth_Check(lngLogonType As Long, strMPQNumber As String, lngServerToken As Long, strChecksumFormula As String)
    AddChat frmMain.rtbChat, vbYellow, "Sending Sid_Auth_Check (0x51)."
   
    Dim lngNewMPQNumber As Long
    Dim HashFiles(2) As String
    Dim lngChecksum As Long
    Dim lngEXEVersion As Long
    Dim lngDecoder As Long
    Dim strKeyHash As String
    Dim lngHashLength As Long
    Dim strExeInfo As String
   
    lngNewMPQNumber = extractMPQNumber(strMPQNumber)
   
    If (lngNewMPQNumber < 0) Then
        DisconnectBNCS
        AddChat frmMain.rtbChat, vbRed, "Unrecognized MPQ number."
        Exit Sub
    End If
   
    GetHashFiles HashFiles
   
    If (checkRevision(strChecksumFormula, HashFiles(0), HashFiles(1), _
    HashFiles(2), lngNewMPQNumber, lngChecksum) = False) Then
        DisconnectBNCS
        AddChat frmMain.rtbChat, vbRed, "Error: CheckRevision failed."
        Exit Sub
    End If
   
    lngEXEVersion = getExeInfo(HashFiles(0), strExeInfo)
    If (lngEXEVersion = 0) Then
        DisconnectBNCS
        AddChat frmMain.rtbChat, vbRed, "Error: Failed to get executable hash file information."
        Exit Sub
    End If
   
    Dim Buffer As New clsPacketBuffer
    Set Buffer = New clsPacketBuffer
       
        With Buffer
            .iDWORD Cfg.lngClientToken     'Client token
            .iDWORD lngEXEVersion          'EXE Version
            .iDWORD lngChecksum            'EXE Hash
            .iDWORD &H1                    'Number of keys
            .iDWORD &H0                    'Boolean Spawn Cd-Key
           
        lngDecoder = kd_create(Cfg.strCdKey, Len(Cfg.strCdKey))
        If (lngDecoder = -1) Then
            DisconnectBNCS
            AddChat frmMain.rtbChat, vbRed, "Error: Failed to decode your CD-key."
            Exit Sub
        End If
       
        lngHashLength = kd_calculateHash(lngDecoder, Cfg.lngClientToken, lngServerToken)
        If (lngHashLength = 0) Then
            DisconnectBNCS
            AddChat frmMain.rtbChat, vbRed, "Error: Failed to hash your CD-key."
            Exit Sub
        End If
       
        strKeyHash = String$(lngHashLength, vbNullChar) ' Initialize buffer.
        Call kd_getHash(lngDecoder, strKeyHash)
       
            .iDWORD Len(Cfg.strCdKey)      'Cd-Key Length
            .iDWORD kd_product(lngDecoder) 'Cd-Key Product Value
            .iDWORD kd_val1(lngDecoder)    'Cd-Key Public Value
            .iDWORD &H0                    'Unknown (0)
            .iNonNTString strKeyHash       'Hashed Key Data
           
            .iNTString strExeInfo          'Exe Information
            .iNTString "BNCE"              'Cd-Key Owner
           
            .sPacket SID_Auth_Check        'Send SID_Auth_Info
        End With
       
    Set Buffer = Nothing
End Sub
[/code]
May 19, 2006, 3:05 AM
Archangel
Ok, i dont know if this might help but when i send the packet strExeInfo it starts with "(null)... " and not with "Starcraft.exe... ", i don't really know if that affects in something.

Here is the packet logging.

[code]
4  Hide  Hide  98  Send 
0000  FF 51 62 00 6B 10 05 02 0B 03 01 01 C6 E5 B0 C3    .Qb.k...........
0010  01 00 00 00 00 00 00 00 0D 00 00 00 01 00 00 00    ................
0020  43 98 58 00 00 00 00 00 EF 43 16 82 C9 DE 00 60    C.X......C.....`
0030  B9 E1 1F D6 75 67 37 E6 A9 04 43 30 28 6E 75 6C    ....ug7...C0(nul
0040  6C 29 20 30 35 2F 31 39 2F 30 36 20 30 32 3A 33    l) 05/19/06 02:3
0050  32 3A 30 35 20 31 31 34 36 39 33 39 00 42 4E 43    2:05 1146939.BNC
0060  45 00                                              E.

5  Hide  Hide  9  Recv 
0000  FF 51 09 00 00 02 00 00 00                        .Q.......
[/code]
May 19, 2006, 6:14 AM
PiaNKA
You may want to double check your value of HashFiles(0)--and probably the others--before passing it to checkRevision().
May 19, 2006, 11:06 AM
MysT_DooM
Maybe when your sending the
[code]
.iDWORD kd_product(lngDecoder) 'Cd-Key Product Value
            .iDWORD kd_val1(lngDecoder)    'Cd-Key Public Value
[/code]

its not getting the right values; like try doin
[code]
.iDWORD Mid$(kd_product(lngDecoder), 1, 2) 'product
.iDWORD Mid$(kd_val1(lngDecoder),  3, 7) 'public
[/code]

i think that might be the problem
May 19, 2006, 1:21 PM
warz
You may also want to note that it's not starting with a null byte.

[quote]
0030  B9 E1 1F D6 75 67 37 E6 A9 04 43 30 28 6E 75 6C    ....ug7...C0(nul
[/quote]
May 19, 2006, 1:33 PM
Archangel
[quote author=MysT_DooM link=topic=15013.msg152769#msg152769 date=1148044873]
Maybe when your sending the
[code]
.iDWORD kd_product(lngDecoder) 'Cd-Key Product Value
            .iDWORD kd_val1(lngDecoder)    'Cd-Key Public Value
[/code]

its not getting the right values; like try doin
[code]
.iDWORD Mid$(kd_product(lngDecoder), 1, 2) 'product
.iDWORD Mid$(kd_val1(lngDecoder),  3, 7) 'public
[/code]

i think that might be the problem

[/quote]

Tried is not this.

[quote author=warz link=topic=15013.msg152771#msg152771 date=1148045607]
You may also want to note that it's not starting with a null byte.

[quote]
0030 B9 E1 1F D6 75 67 37 E6 A9 04 43 30 28 6E 75 6C ....ug7...C0(nul
[/quote]
[/quote]

I dont understand what u mean by is not starting with a null byte? what is not starting with a null byte?

------------

[code]
[13:41:37] Disconnected.
[13:41:37] Connecting...
[13:41:37] Connected!
[13:41:37] Sending protocol byte: Game (0x01).
[13:41:37] Sending Sid_Auth_Info (0x50).
[13:41:38] Handeling packet: Sid_Auth_Info (0x50)
[13:41:38] Sending Sid_Auth_Check (0x51).
[13:41:38] MPQNumber: IX86ver3.mpq
[13:41:38] ServerToken: -7284
[13:41:38] Checksum Formula: A=502971062 B=688582030 C=933114557 4 A=A^S B=B^C C=C+A A=A-B
[13:41:38] NewMPQNumber: 3
[13:41:38] HashFile(0): C:\Documents and Settings\Naruto.KONOHA-48E3F658\Escritorio\DaN\Visual Basic\BNCE\STAR\Starcraft.exe
[13:41:38] HashFile(1): C:\Documents and Settings\Naruto.KONOHA-48E3F658\Escritorio\DaN\Visual Basic\BNCE\STAR\Storm.dll
[13:41:38] HashFile(2): C:\Documents and Settings\Naruto.KONOHA-48E3F658\Escritorio\DaN\Visual Basic\BNCE\STAR\Battle.snp
[13:41:38] Checksum: -2099924186
[13:41:38] ExeVersion: 16843531
[13:41:38] ExeInfo: (null) 05/19/06 02:32:05 1146939
[13:41:38] Decoder: 0
[13:41:38] Hash Length: 20
[/code]
May 19, 2006, 6:27 PM
Ringo
[quote author=Archangel link=topic=15013.msg152793#msg152793 date=1148063235]
[13:41:38] ServerToken: -7284
[/quote]
hi, that seems abit small for an average server token, could you be reading it as a WORD rather than a DWORD?
May 19, 2006, 7:05 PM
l2k-Shadow
Seems like the function is fine, perhaps post your GetHashFiles() function and the function from which you call this so we can have a better understanding about your issues with incorrect values for the variables.
May 19, 2006, 7:25 PM
warz
Oh, does it literally have "(null)" in the packet log / file information string, or did you put that in there telling us that it's a 0x00 byte? If it's literally in there, I think I remember while looking at the BNCSutil source code one time, it does supply a string with "(null)" in it if there's an error in one of the functions. Maybe not, though, this is just a faint memory that this thread triggered.
May 19, 2006, 7:42 PM
Archangel
Yah im using BNCSUtil and (null) should be starcraft, here is my gethashfile funtion:

[code]
Public Sub GetHashFiles(Files() As String)
    Select Case Cfg.strProduct
        Case "STAR", "SEXP"
            Files(0) = App.Path & "\STAR\Starcraft.exe"
            Files(1) = App.Path & "\STAR\Storm.dll"
            Files(2) = App.Path & "\STAR\Battle.snp"
    End Select
End Sub
[/code]

Since i cant get this done im trying to use example code to see if i can fix it, but im not doing any good.
May 19, 2006, 9:17 PM
l2k-Shadow
Post the function from which you call BNCS_SID_Auth_Check().
May 19, 2006, 10:32 PM
Archangel
[quote author=l2k-Shadow link=topic=15013.msg152811#msg152811 date=1148077935]
Post the function from which you call BNCS_SID_Auth_Check().
[/quote]

[code]
Private Sub Handle_BNCS_Sid_Auth_Info(strBuffer As clsPacketBuffer)
    AddChat frmMain.rtbChat, vbYellow, "Handleling packet: Sid_Auth_Info (0x50)"
   
    Dim lngLogonType As Long
    Dim lngServerToken As Long
    Dim lngUDPValue As Long
    'FILETIME 8 BYTES SKIP :P
    Dim strMPQNumber As String
    Dim strChecksumFormula As String
   
    lngLogonType = strBuffer.gDWORD()
    lngServerToken = strBuffer.gDWORD()
    lngUDPValue = strBuffer.gDWORD()
    strBuffer.sBytes 8
    strMPQNumber = strBuffer.gString()
    strChecksumFormula = strBuffer.gString()
   
    BNCS_SID_Auth_Check lngLogonType, strMPQNumber, lngServerToken, strChecksumFormula
End Sub
[/code]
May 20, 2006, 7:31 AM
PiaNKA
First: LOL@strBuffer.gString

Second: you are calling kd_init() at the beginning of your program, correct?
May 20, 2006, 2:34 PM
Archangel
[quote author=PiaNKA link=topic=15013.msg152844#msg152844 date=1148135689]
First: LOL@strBuffer.gString

Second: you are calling kd_init() at the beginning of your program, correct?
[/quote]

im using example bot code for calling kd_init()
[code]
    On Error GoTo Startup_Error
    If (kd_init() = 0) Then
        MsgBox "The BNCSutil CD-key decoder could not be initialized, " & _
            "and the bot must close.", vbCritical, "Example Bot"
        End
    End If
[/code]
May 20, 2006, 5:12 PM
dRAgoN
[code]Public Function CheckRev(ByVal FileExe As String, ByVal FileStormDll As String, ByVal FileBnetDll As String, ByVal HashText As String, ByRef Version As Long, ByRef Checksum As Long, ByRef exeinfo As String, ByVal mpqName As String, ByVal MyClient As String)
Dim MpqNumber As Long
Dim CRev As Boolean
    MpqNumber = extractMPQNumber(mpqName)
    CRev = (checkRevision_Raw(HashText, FileExe, FileStormDll, FileBnetDll, MpqNumber, Checksum) > 0)
    Version = getExeInfo(FileExe, exeinfo)
    If InStr(1, exeinfo, "(null)") <> 0 Then
        exeinfo = Replace(exeinfo, "(null)", GetExe(MyClient))
    End If
    Debug.Print exeinfo
End Function

Private Function GetExe(ByVal MyClient As String) As String
    Select Case MyClient
        Case "RATS", "PXES", "RHSS"
            GetExe = "Starcraft.exe"
        Case "VD2D", "PX2D"
            GetExe = "Game.exe"
        Case "3RAW", "PX3W"
            GetExe = "WAR3.exe"
        Case "RHSD"
            GetExe = "Diablo_s.exe"
        Case "RTSJ"
            GetExe = "StarcraftJ.exe"
        Case "LTRD"
            GetExe = "Diablo.exe"
        Case "NB3W"
            GetExe = "Warcraft II BNE.exe"
        Case "MD3W"
            GetExe = "War3Demo.exe"
        Case Else
            GetExe = MyClient
    End Select
End Function[/code]

here.
May 20, 2006, 5:48 PM
Archangel
Ok, all the problem i had was in my buffer, i resovled it with the help of Pianka, i got a last question, should i take care about the (null)?
May 20, 2006, 6:28 PM
raylu
Didn't we determine somewhere a long time ago about how that was one of the optional fields?

Pianka is still online?!
May 21, 2006, 4:40 PM
dRAgoN
[quote author=raylu link=topic=15013.msg152907#msg152907 date=1148229631]
Didn't we determine somewhere a long time ago about how that was one of the optional fields?

Pianka is still online?!
[/quote]
Believe I posted that it was optional June of 05, the exeinfo and cdkey user name is both optional. Would still rather see people do things the way the game does it but hey it is your cdkey lol.

[code]Public Function p0x51(sck As Winsock, _
                       typ As String, _
                       cKey As Long, _
                       sKey As Long, _
                       CDK1 As String, _
                       CDK2 As String, _
                       Spawn As Long, _
                       CDKeyUsername As String, _
                       Version As Long, _
                       Checksum As Long, _
                       exeinfo As String)
Dim pb As New clsPacketBuffer
Dim NumberOfCDKeys As Long
Dim CDKeyOneBuf As String
Dim CDKeyTwoBuf As String
Dim CDKeyHashDat As String

    NumberOfCDKeys = GetNumberOfKeys(typ)

    Select Case NumberOfCDKeys
        Case 0
            'LTRD, RHSD, RHSS, W3DM can also use this function.
        Case 1
            CDKeyOneBuf = DoCDKeyOne(CDK1, sKey, cKey) 'CDKEY ONE
        Case 2
            CDKeyOneBuf = DoCDKeyOne(CDK1, sKey, cKey) 'CDKEY ONE
            CDKeyTwoBuf = DoCDKeyTwo(CDK2, sKey, cKey) 'CDKEY TWO
        Case Else
            'There are no products that have more then 2
            'cdkeys as of yet, But.. since the packet
            'could take more then 2, possibly they might
            'set up for some expansion to an expansion
            'games?
    End Select
    CDKeyHashDat = CDKeyOneBuf & CDKeyTwoBuf
   
    With pb
        .InsertDWORD cKey
        .InsertDWORD Version
        .InsertDWORD Checksum
        .InsertDWORD NumberOfCDKeys
        .InsertDWORD Spawn
        .InsertNonNTString CDKeyHashDat                             'W3DM, RHSS, RHSD, LTRD this field is empty, so haveing it here still wont have an effect
        .InsertNTString exeinfo                                     'Optional string <- Discovered to be Optional by me, l)ragon June 1, 2005.
        .InsertNTString IIf(NumberOfCDKeys > 0, CDKeyUsername, "")  'Optional string <- Discovered to be Optional by me, l)ragon June 1, 2005.
        .SendBuffer sck, Bnet, SID_AUTH_CHECK
    End With
   
    Set pb = Nothing
End Function

Private Function GetNumberOfKeys(typ As String) As Long
    Select Case typ
        Case "LTRD", "RHSD", "RHSS", "MD3W":
            GetNumberOfKeys = &H0
        Case "PX2D", "PX3W":
            GetNumberOfKeys = &H2
        Case Else:
            GetNumberOfKeys = &H1
    End Select
End Function[/code]

I'm sure you can figure out rest thats missing.
May 21, 2006, 6:27 PM

Search