• Welcome to Valhalla Legends Archive.
 
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Don Cullen

#1
Quote from: MyStiCaL on November 13, 2008, 03:50 PM
You might say that, but if it was soley for hacks, then it'd be used like warden on d2 & w3 and not be active untill in game, but no! this is active from the second you login. thus meaning its a prevention for BOTH.

Read what I said earlier:

Quote from: Don Cullen on November 13, 2008, 02:22 PM
Unlike other games, Starcraft has Warden running both in game and chat lobby. In other games, they have two separate servers; chat server, and game servers. But for Starcraft, they have a single server for both chat and game. So because of that, for other games, they run Warden on the game servers, but for Starcraft, since the server handles both chat/game, Warden runs for both.

The server is using old software; it runs warden on both not because they wanted it to cover both chat and game, but because they had no choice since both game and chat were both a SINGLE server. I don't know how to explain it any more simpler than that. Warden is intended to combat game hackers/cheaters, not bots. If it was intended to combat bots, then they would have applied Warden to the chat servers of all other games, not just the game servers.
#2
Quote from: PunK on November 13, 2008, 01:33 PMWas this another sad attempt to try to "prevent" bots and complicate things?

It wasn't an attempt to prevent bots from connecting to Battle.net nor was it an attempt to complicate bot development. The whole point of Warden is to prevent/complicate hacking/cheating. If a bot developer finds a way to defeat Warden just so a bot can use Starcraft to connect to Battle.net, the end result is hackers can use this information to enable their hacks to work in games and not be caught by Warden not just in Starcraft, but in all other games that make use of Warden. Unlike other games, Starcraft has Warden running both in game and chat lobby. In other games, they have two separate servers; chat server, and game servers. But for Starcraft, they have a single server for both chat and game. So because of that, for other games, they run Warden on the game servers, but for Starcraft, since the server handles both chat/game, Warden runs for both.

Just wanted to point that out so people don't mistakenly assume Warden was intended to complicate botmaking.
#3
Quote from: Racial on November 05, 2008, 04:04 PMcan someone please give me a hint in the direction to opening mod files?

IDA Pro Disassembler.

http://www.hex-rays.com/idapro/idadown.htm

I think.
#4
Web Development / Re: SQL Databases
October 30, 2008, 02:01 PM
Quote from: Invert on June 07, 2008, 04:21 PM
Quote from: Banana fanna fo fanna on June 01, 2008, 12:08 PM
i wouldn't use sql if i were you. the technology is outdated and is barely in use anymore. only a few vendors support the technology until its end of life later this year. no real company still uses a sql database these days. sql is slow, inflexible, and overall lacking in relevance to any career plans you may have.

instead, i would use ajax.

^
|
This is the dumbest thing I have ever read on the Web Development forums.

Seconded.
#5
I keep wanting to use Javascript, but I keep remembering some users who deliberately disable Javascript on their browsers.

So should I go ahead and use Javascript thus pissing off those extremely few users, or should I opt instead for an entirely no-javascript site?
#6
Yes, yes, they are. :)
#7
Links and images are down.
#8
Battle.net / Re: World of Warcraft "Battle.net.dll"
October 01, 2008, 07:36 PM
Quote from: Sixen on October 01, 2008, 04:24 PMIn the Beta, we have to use our Blizzard Accounts to login. Hm?

Did you packet log it? The packet log may be interesting to look at.
#9
How should expired BNETDocs.org accounts be handled?

This is how it currently is:

When someone registers, but never logs in thereafter for two weeks, it results in the account being deleted, but retained in backup database and the account name being locked permanently (preventing other people from registering using that name) for until the person who previously registered it re-registers it using the same email address they had used previously.

That's it.

So I'm considering modifying it to:

If someone registers, but fails to validate their email and doesn't login thereafter for two weeks, the account is completely deleted and the name made available for use by others.

If someone registers, and validates their email, but doesn't login thereafter for a period of two weeks, the account would be deleted, retained in backup database for recreation if the user re-registers using same registration info as before, but if someone else registers using that name with different registration info, the account in backup would be deleted permanently and the account name be given to that user.

If someone registers, validates, and does login at least once a year, but hasn't commented or contributed at all, and stops using the account for more than a year, an email will be sent asking the person to click on a link to keep the account (if they don't want to keep, just ignore the email). Two weeks after the email is sent, if no click, the account would be deleted and shifted to backup, and the name be made available for either recreation by same user or for use by somebody else.

If someone registers, validates, and comments/contributes at least once, the account would just be left alone permanently for archival purposes even if user never uses the account ever again.

What do you guys think?
#10
Cool. As for making you make the bot; I'm not going to make you-- BUT you're welcome to do so, as it's certainly an interesting idea in principle. But of course, you don't have to, your time is to do with as you please. :-)

And besides, now I have the XML format ironed out, I have to work on the packet editor, then I have to reformat all of the packets. That'll take me eternity, considering how there's over 300 of them and none of them are in XML format. Fun, eh?

Edit: Just saw the edit you made; while I could do that, users could just request both the send/recv data and parse both if the user wanted both... This way, it'll save on bandwidth.
#11
@Hdx-- Makes sense. I need the hex id there since that's what I use to look up the packet data in the SQL table. But I'll add the decimal attribute to the packet element. It'll look like this:

<packet type="bncs" id="0x09" decid="9" name="SID_GETADVLISTEX" direction="1" >

Will that work for you?
#12
@Hdx and Kp -- excellent feedback! Thanks!

@Hdx-- why decimal? The SQL database has an ID field for the ordinals (ie: 0x09), so it'd be easy to have PHP quickly locate the corresponding packet via type, ID, and direction... Although if you do think it'd make it easier for botmakers, I can always add a decimal attribute to the packet element?

@KP-- In regards to using &gt; and &lt;, I used [] because that's easier on people who write the documentation rather than typing out &gt;/&lt;, but I just realized I can just let them use <> when coding/writing the documentation, and have PHP change those to their corresponding equivalents so the XML will validate. Thanks for pointing it out. :-)

I've updated the DTD and the XML accordingly:

XML:
<?xml version="1.0"?>
<!DOCTYPE packet SYSTEM "http://labs.bnetdocs.org/dtd/packet.dtd">

<packet type="bncs" id="0x09" name="SID_GETADVLISTEX" direction="1" >
   <client>STAR</client>
   <client>SEXP</client>
   <related type="bncs" id="0x09" direction="2" />
   <format>
      <field type="DWORD" name="dwGameCount" descr="Number of Games" />
      <field type="DWORD" case="dwGameCount == 0" descr="Status" />
      <repeat case="dwGameCount > 0">
         <field type="WORD" descr="Game Type" />
         <field type="WORD" descr="Parameter" />
         <field type="DWORD" descr="Language ID" />
         <field type="WORD" descr="Address Family" default="AF_INET" />
         <field type="WORD" descr="Port" />
         <field type="DWORD" descr="Host's IP Address" />
         <field type="DWORD" descr="Sin Zero (0)" />
<field type="DWORD" descr="Sin Zero (0)" />
         <field type="DWORD" descr="Game Status" />
         <field type="DWORD" descr="Elapsed time (in seconds)" />
         <field type="STRING" descr="Game Name" />
         <field type="STRING" descr="Game Password" />
         <field type="STRING" descr="Game Statstring" />
      </repeat>
   </format>
   <remarks>
      &lt;p&gt;Returns a list of available games and their information. Varies depending on product.&lt;/p&gt;
      &lt;p&gt;Note that fields from Address Family to sin_zero form a sockaddr_in structure.&lt;p&gt;
      &lt;u&gt;Valid status codes:&lt;/u&gt;
         &lt;dl&gt;&lt;dd&gt;0x00: OK
         0x01: Game doesn't exist
         0x02: Incorrect password
         0x03: Game full
         0x04: Game already started
         0x06: Too many server requests&lt;/dd&gt;&lt;/dl&gt;
   </remarks>
   <response type="bncs" id="0x09" direction="2" />
</packet>


This is the DTD the XML is validating against:

<!ENTITY % HTML.Version "BNETDocs Packet Format v1.0">
<!ELEMENT packet (client*, related*, format, remarks, response*)>
<!ATTLIST packet type CDATA #REQUIRED>
<!ATTLIST packet id CDATA #REQUIRED>
<!ATTLIST packet name CDATA #REQUIRED>
<!ATTLIST packet direction CDATA #REQUIRED>
<!ELEMENT client (#PCDATA)>
<!ELEMENT related (#PCDATA)>
<!ATTLIST related type CDATA #REQUIRED>
<!ATTLIST related id CDATA #REQUIRED>
<!ATTLIST related direction CDATA #REQUIRED>
<!ELEMENT format (field*, repeat*)>
<!ELEMENT field EMPTY>
<!ATTLIST field type CDATA #REQUIRED>
<!ATTLIST field descr CDATA #REQUIRED>
<!ATTLIST field name CDATA #IMPLIED>
<!ATTLIST field case CDATA #IMPLIED>
<!ATTLIST field default CDATA #IMPLIED>
<!ELEMENT repeat (field*)>
<!ATTLIST repeat case CDATA #REQUIRED>
<!ELEMENT remarks (#PCDATA)>
<!ELEMENT response (#PCDATA)>
<!ATTLIST response type CDATA #REQUIRED>
<!ATTLIST response id CDATA #REQUIRED>
<!ATTLIST response direction CDATA #REQUIRED>


Any thoughts/feedback before I mark that up as completed and begin work on other parts of BNETDocs?
#13
Battle.net Bot Development / XML for BNETDocs Packets
September 02, 2008, 04:14 AM
I just finished coding the DTD for the XML, and also coded up two example XML-formatted packets. I'd love to hear your thoughts on it!

This XML example demonstrates basic usage:

<?xml version="1.0"?>
<!DOCTYPE packet SYSTEM "http://labs.bnetdocs.org/dtd/packet.dtd">

<packet ordinal="0x15" name="SID_CHECKAD" direction="2" clients="star,sexp" relatedurls="type=bncs&amp;id=0x15&amp;direction=1">
<!-- relatedurls would be delimited by commas -->
<format>
<field type="DWORD" descr="Platform ID" />
<field type="DWORD"  descr="Product ID" />
<field type="DWORD"  descr="ID of last displayed banner" />
<field type="DWORD"  descr="Current Time" />
<!-- Following are just fake, meant as an example -->
<field type="STRING" descr="Null Terminated String" />
<field type="VOID" descr="Non-Null Terminated String" />
</format>
<remarks>
<!-- if any, can include html for formatting, but use [] instead of <> -->
Requests ad banner information from battle.net.
</remarks>
</packet>


This XML example demonstrates usage of loop, and conditionals:

<?xml version="1.0"?>
<!DOCTYPE packet SYSTEM "http://labs.bnetdocs.org/dtd/packet.dtd">

<packet ordinal="0x09" name="SID_GETADVLISTEX" direction="1" clients="star,sexp" relatedurls="type=bncs&amp;id=0x19&amp;direction=2">
<!-- relatedurls would be delimited by commas -->
<format>
<field type="DWORD" descr="Number of Games" />
<field type="DWORD" case="if DWORD1 == 0" descr="Status" />
<repeat case="DWORD1 > 0" amtdefined="true" amt="1">
<!-- If amtdefined is set to true, tell it which field contains amount (Ex: amt="1" means first field) -->
<field type="WORD" descr="Game Type" />
<field type="WORD" descr="Parameter" />
<field type="DWORD" descr="Language ID" />
<field type="WORD" descr="Address Family" default="AF_INET" />
<field type="WORD" descr="Port" />
<field type="DWORD" descr="Host's IP Address" />
<field type="DWORD" amt="2" descr="Sin Zero (0)" />
<field type="DWORD" descr="Game Status" />
<field type="DWORD" descr="Elapsed time (in seconds)" />
<field type="STRING" descr="Game Name" />
<field type="STRING" descr="Game Password" />
<field type="STRING" descr="Game Statstring" />
</repeat>
</format>
<remarks>
<!-- if any, can include html for formatting, but use [] instead of <> -->
[p]Returns a list of available games and their information. Varies depending on product.[/p]
[p]Note that fields from Address Family to sin_zero form a sockaddr_in structure.[/p]
[u]Valid status codes:[/u]
[dl][dd]0x00: OK
0x01: Game doesn't exist
0x02: Incorrect password
0x03: Game full
0x04: Game already started
0x06: Too many server requests[/dd][/dl]
</remarks>
</packet>


This is the DTD both XML examples are validating against:

<!ELEMENT packet (format, remarks)>
<!ATTLIST packet ordinal CDATA #REQUIRED>
<!ATTLIST packet name CDATA #REQUIRED>
<!ATTLIST packet direction CDATA #REQUIRED>
<!ATTLIST packet clients CDATA #REQUIRED>
<!ATTLIST packet relatedurls CDATA #REQUIRED>
<!ELEMENT format (field*, repeat*)>
<!ELEMENT field EMPTY>
<!ATTLIST field type CDATA #REQUIRED>
<!ATTLIST field descr CDATA #REQUIRED>
<!ATTLIST field amt CDATA #IMPLIED>
<!ATTLIST field case CDATA #IMPLIED>
<!ATTLIST field default CDATA #IMPLIED>
<!ELEMENT repeat (field*)>
<!ATTLIST repeat case CDATA #REQUIRED>
<!ATTLIST repeat amtdefined (true | false | TRUE | FALSE) #REQUIRED>
<!ATTLIST repeat amt CDATA #REQUIRED>
<!ELEMENT remarks (#PCDATA)>


I've been using http://validator.w3.org/check to validate my XML code against the DTD I coded, although I may modify it if you have better ideas on how the XML for the packets should be structured/laid out.

This thread is related to an old thread I posted over a year ago, which can be found here:

http://forum.valhallalegends.com/index.php?topic=17219.0

Thoughts?
#14
Thanks. Got it working.
#15
InData isn't set to anything It's set to PacketData now:

Private Sub ParseBNETPacket(ByVal PacketData As String)
    Dim PacketID As Byte
    Dim lResults As Long
    Dim sReason As String
    Dim i As Integer    'Used with loops
    PacketDeBuf.SetData (PacketData)
    PacketID = PacketDeBuf.StripHeader


I'm assuming the function requires the packet in its' entireity; or is pre-processing required (stripping out header, etc)?

I highlighted where I'm getting the KeyHash from:

Quote        Case &HC    '0x0C, BNLS_CDKEY_EX
            Dim iTotalCDKeys As Byte
            Dim iTotalSuccesses As Byte
            With PacketDeBuf
                lCookie = .rDWORD
                If lCookie <> lClientCookie Then
                    'Not our cookie.
                    Exit Sub
                End If
                iTotalCDKeys = .rByte
                iTotalSuccesses = .rByte
               
               
                Dim lBitMask As Long
                lBitMask = .rDWORD  'don't use for now
               
                lClientToken = .rDWORD
                lKeyLength = .rDWORD
                lCDKeyProdValue = .rDWORD
                lCDKeyPubValue = .rDWORD
                lUnknown = .rDWORD
                lHashedKeyData(0) = .rDWORD
                lHashedKeyData(1) = .rDWORD
                lHashedKeyData(2) = .rDWORD
                lHashedKeyData(3) = .rDWORD
                lHashedKeyData(4) = .rDWORD

            End With

            Dim sKeyHash As String
            sKeyHash = lHashedKeyData(0) & lHashedKeyData(1) & lHashedKeyData(2) & lHashedKeyData(3) & lHashedKeyData(4)
            cWarden.StartWarden sKeyHash, "c:\progra~1\starcraft\Starcraft.exe"

            With PacketBuf
                .InsertDWORD lClientToken
                .InsertDWORD lEXEVersion
                .InsertDWORD lChecksum
                .InsertDWORD &H1 '1 cdkey for now (number of cdkeys)
                .InsertDWORD &H0 'Not using spawn
               
                'for each cdkey loop goes here
               
                .InsertDWORD lKeyLength
                .InsertDWORD lCDKeyProdValue
                .InsertDWORD lCDKeyPubValue
                .InsertDWORD &H0
                For i = 0 To 4
                    .InsertDWORD lHashedKeyData(i)
                Next
                .InsertSTRING sVerChkStat
                .InsertSTRING "ABot"
                .Send BNETSock, &H51
            End With

Edit: changed code tags to quote tags so highlighting would show up...

Edit: Changed the sKeyHash line, now it says:

sKeyHash = Chr(lHashedKeyData(0)) & Chr(lHashedKeyData(1)) & Chr(lHashedKeyData(2)) & Chr(lHashedKeyData(3)) & Chr(lHashedKeyData(4))

Because I realized I was trying to set long variables to a string variable. Added Chr to each one to make it a string. Still errors out though:

"Runtime error '5': Invalid procedure call or argument"

And the sKeyHash line is highlighted when I hit debug. Ideas?