Valhalla Legends Forums Archive | Battle.net Bot Development | Account upgrading

AuthorMessageTime
iago
Here is a packet log of my attempt to upgrade (I'll post the important packets at the end of this):
http://www.javaop.com/~iago/upgrade.txt

For some reason, Battle.net doesn't respond to SID_AUTH_ACCOUNTUPGRADEPROOF.  Any idea why?  Isn't it supposed to send SID_AUTH_ACCOUNTLOGONPROOF back? 

Here are the important packets:

I send SID_AUTH_ACCOUNTLOGON:
[code]ff 53 2f 00 3b 5c b4 8a c5 14 19 fc 5b d4  .H.S/.;\......[.
0050  1c 9b 3b ba 99 84 7f ba 2c 8f b1 f9 c3 b5 fe 20  ..;.....,......
0060  3f ed ea 85 a2 cf 72 6f 6e 69 73 63 6f 6f 6c 32  ?.....roniscool2
0070  00                                                .[/code]

Battle.net tells me to upgrade: [SID_AUTH_ACCOUNTLOGON]
[code]ff 53 48 00 05 00 00 00 00 00 00 00 00 00  .w.SH...........
0050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0080  00 00 00 00 00 00 00 00 00 00                    ..........[/code]

I send it a request to upgrade: [SID_AUTH_ACCOUNTUPGRADE]
[code]ff 57 04 00                                .K.W..[/code]

My request is accepted, and my the server token is provided: [SID_AUTH_ACCOUNTUPGRADE]
[code]ff 57 0c 00 00 00 00 00 56 2c db d9        .O.W......V,..[/code]

I do the SHA1 as well as calculating s and v, then send them: [SID_AUTH_ACCOUNTUPGRADEPROOF]
[code]ff 58 5c 00 9e be 7f 54 cc 8c 47 8e 74 87  .M.X\....T..G.t.
0050  b1 67 75 c9 7f cb 08 75 c4 54 84 5b 5d 98 55 d0  .gu....u.T.[].U.
0060  42 ab 45 6f 71 7f 3d 6a b6 28 d7 fa 9d 48 10 58  B.Eoq.=j.(...H.X
0070  50 c2 04 66 35 6b ce 36 db 2c a0 fc d8 50 35 65  P..f5k.6.,...P5e
0080  da 3c 4b d8 b4 1d 08 36 24 51 64 56 dc 5f 04 2a  .<K....6$QdV._.*
0090  3a 1e 6e 95 06 f2 4c bd 43 81 cc de 8e 3c        :.n...L.C....<[/code]

..... and get no response.  Any clue why?  My only thought was that they don't have it implemented, which seems silly..
February 3, 2006, 12:03 AM
Skywing
You experienced this on real Battle.net? On what circumstances? (server, product, ...)?

While support for upgrades is implemented on various recent Battle.net clients, the server continues to request that everybody use the old-style logon protocol.  I'd be very interested if you've found a case in which the server wants you to perform an actual upgrade.

Edit: Looked at your packet log.  IIRC, for War3 accounts, the upgrade packets have a meaning other than that the account really needs to be upgraded.  I recall somebody else (Spht perhaps?) running into this situation before, but I don't remember what the exact reason was.

You might try logging in with the official client to see what it does.  I don't have my notes on the War3 handler for that particular message here to check.
February 3, 2006, 12:59 AM
iago
I created the account using a bot and SID_CREATEACCOUNT2 and the SHA1 of my password.  I did this on all 4 realms, although I don't know the specific servers. 

When I then connected using a regular login (SID_AUTH_ACCOUNTLOGON) and that account, it gives me the "this account must be upgraded" response. 

I was doing it as Warcraft 3, when I tried sending SID_AUTH_ACCOUNTLOGON with Starcraft, I was disconnected. 

I more or less wanted to make sure I implemented it correctly, so it was an contrived situation.  You never know when they might move D2 or SC or any of those clients to NLS (unlikely, but who knows?)

When I tried with the official client, I got the message, "Warcraft 3 cannot login with that account type" or something similar.  It never got past SID_AUTH_ACCOUNTLOGON, it gave up after that point. 
February 3, 2006, 2:59 AM
Skywing
Ah - I would recommend a local Battle.net server which understands SRP.  That was the solution I used for testing it.  It also lets you verify it against a Blizzard client as a nice bonus.

I'll look into adding a message to enable a "developer mode" on BNLS to always return zero from all randomized calculations in case anyone wants to use it to verify implementations.
February 3, 2006, 3:01 AM
JoeTheOdd
[quote]When I tried with the official client, I got the message, "Warcraft 3 cannot login with that account type" or something similar.  It never got past SID_AUTH_ACCOUNTLOGON, it gave up after that point. [/quote]

Ahem, I was the one who tried with the client =p
February 3, 2006, 3:48 AM
iago
[quote author=Skywing link=topic=14113.msg144348#msg144348 date=1138935682]
Ah - I would recommend a local Battle.net server which understands SRP.  That was the solution I used for testing it.  It also lets you verify it against a Blizzard client as a nice bonus.

I'll look into adding a message to enable a "developer mode" on BNLS to always return zero from all randomized calculations in case anyone wants to use it to verify implementations.
[/quote]

I'm actually not sure how the values were derived, it was a friend of mine who did it.  But the fact that it matched the change password packet seemed logical enough. 

And yeah, that would be a neat feature.. although this is the only thing I haven't implemented (besides WoW, but I don't see that as being terribly likely), and I'm reasonably sure it's right :)

[quote author=Joe link=topic=14113.msg144349#msg144349 date=1138938497]
Ahem, I was the one who tried with the client =p
[/quote]
True, but that wasn't particularily relevant to the conversation, so I left it out. 
February 3, 2006, 4:40 AM
HdxBmx27
[quote author=Skywing link=topic=14113.msg144348#msg144348 date=1138935682]
I'll look into adding a message to enable a "developer mode" on BNLS to always return zero from all randomized calculations in case anyone wants to use it to verify implementations.
[/quote]
Please, this would be a wonderfull feature, All* of my research for Upgrading accounts has come from BNLS considering I have never encountered it in the wild. Addition of such a feature will help me greatly in conferming JBLS compliance with BNLS.
~-~(HDX)~-~
February 3, 2006, 6:25 AM
iago
[quote author=HdxBmx27 link=topic=14113.msg144383#msg144383 date=1138947909]
[quote author=Skywing link=topic=14113.msg144348#msg144348 date=1138935682]
I'll look into adding a message to enable a "developer mode" on BNLS to always return zero from all randomized calculations in case anyone wants to use it to verify implementations.
[/quote]
Please, this would be a wonderfull feature, All* of my research for Upgrading accounts has come from BNLS considering I have never encountered it in the wild. Addition of such a feature will help me greatly in conferming JBLS compliance with BNLS.
~-~(HDX)~-~
[/quote]
In other words, "Help me write a competitor!" :)
February 3, 2006, 4:08 PM
PaiD
I would like to point out that I discovered this some time ago and maybe the other topic might help

Click Here
February 3, 2006, 6:16 PM
iago
Yeah, you "discovered" it the same way I do it.  And for the record, I didn't do it by accident, I figured it out myself :-P

And no, it doesn't help, I actually tried doing the upgrade but without success.. :(
February 4, 2006, 12:13 AM
Barabajagal
I don't usually bump old topics like this, but is that method (using createaccount2 with war3) still a capability? I'd like to get upgrading implemented in my bot, and need a way to test...
April 15, 2008, 6:34 AM
iago
As far as I know, there's no way to test.

Back when I was playing with this (and I might have said so in this thread, I don't remember), if you tried logging on with NLS but used the old way to create an account, it would create it and kick you off. If you then tried to log into that using NLS, it would request an upgrade. I don't remember if it was actually possible to upgrade, though.

So:
- Connect as Warcraft 3
- Create an account the way you would on OLS (SID_CREATEACCOUNT(2?))
- Reconnect as Warcraft 3
- Send SID_AUTH_ACCOUNTLOGON with that username

It should send you an upgrade request, if nothing's changed.

I vaguely remember that this didn't quite work, but give it a shot.
April 15, 2008, 1:59 PM
Barabajagal
Yay, I'm IPBanned from Asia now. Way to go me.
April 15, 2008, 8:13 PM
Ribose
[quote author=Andy link=topic=14113.msg177673#msg177673 date=1208241248]I don't usually bump old topics like this, but is that method (using createaccount2 with war3) still a capability? I'd like to get upgrading implemented in my bot, and need a way to test...
[/quote]Yea it is; I was just able to do it now (by changing the call to 0x53 to call 0x3D instead, and have it logon immediately after with 0x53 and not 0x3A):
[code][Tuesday, April 15, 2008  4:48:06 PM] Welcome to Felbot v1.1 Dev by Joe[x86] and Ribose!
[4:48:06 PM] This bot is open source. Feel free to visit the project at: http://code.google.com/p/felbot/.
[4:48:06 PM] Profile Ribose.E loaded.
[4:48:11 PM] [BNET] Connecting to useast.battle.net..
[4:48:12 PM] [BNET] Connected!
[4:48:12 PM] [BNET] SENT BYTE 0x1
[4:48:12 PM] [BNET] SENT PACKET 0x50:
0000   ff 50 3a 00 00 00 00 00  36 38 58 49 33 52 41 57    ÿP:.....68XI3RAW
0010   15 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
0020   00 00 00 00 00 00 00 00  55 53 41 00 55 6e 69 74    ........USA.Unit
0030   65 64 20 53 74 61 74 65  73 00                      ed States.

[4:48:12 PM] [BNET] SENT PACKET 0x25:
0000   ff 25 08 00 13 37 00 00                              ÿ%...7..

[4:48:12 PM] [BNET] Requesting logon authorization..
[4:48:12 PM] [BNET] RECIEVED PACKET 0x25:
0000   ff 25 08 00 89 0a 59 83                              ÿ%....Y.

[4:48:12 PM] [BNET] RECIEVED PACKET 0x50:
0000   ff 50 e7 00 02 00 00 00  81 6a bb c3 7c 43 3a 00    ÿPç......j»Ã|C:.
0010   00 20 58 7d 99 cb c6 01  76 65 72 2d 49 58 38 36    . X}.ËÆ.ver-IX86
0020   2d 31 2e 6d 70 71 00 41  3d 34 30 32 33 38 34 37    -1.mpq.A=4023847
0030   37 37 37 20 42 3d 33 33  36 34 37 32 37 38 32 35    777 B=3364727825
0040   20 43 3d 33 33 35 38 30  30 31 35 31 20 34 20 41     C=335800151 4 A
0050   3d 41 2b 53 20 42 3d 42  5e 43 20 43 3d 43 5e 41    =A+S B=B^C C=C^A
0060   20 41 3d 41 2b 42 00 fd  f7 3f 3f e0 15 7d 2d 63     A=A+B.ý÷??à.}-c
0070   2f b8 78 03 5c bf 25 f7  fa b0 e0 6d 92 20 50 76    /¸x.\¿%÷ú°àm. Pv
0080   86 52 cf 9a 69 86 63 a6  91 6b 67 3c 22 66 60 93    .RÏ.i.c¦.kg<"f`.
0090   cc a0 69 54 66 e7 af 49  79 ae 86 dc c3 cb 2d 6c    Ì.iTfç¯Iy®.ÜÃË-l
00a0   49 77 e5 ac a9 51 37 52  bf ac 7f 2d 94 4b 61 67    Iw嬩Q7R¿¬.-.Kag
00b0   be ee 01 c5 ad e6 4e fc  1b 31 6a 10 d9 9a 26 f3    .î.Å­æNü.1j.Ù.&ó
00c0   80 0f 8d eb 32 42 8b 38  08 68 5b 6b ea ee 54 ef    ...ë2B.8.h[kêîTï
00d0   87 9c 2b f1 b3 f4 21 7f  f3 cb 80 3d 35 e7 5d 17    ..+ñ.ô!.óË.=5ç].
00e0   3b 01 c5 2a 3c 55 4a                                ;.Å*<UJ

[4:48:12 PM] [BNET] Received authorization challenge!
[4:48:14 PM] [BNET] SENT PACKET 0x51:
0000   ff 51 64 00 13 37 00 00  9c 19 15 01 7a b6 75 af    ÿQd..7......z¶u¯
0010   01 00 00 00 00 00 00 00  1a 00 00 00 0e 00 00 00    ................
0020   07 ef 70 00 00 00 00 00  e8 22 4f 91 a4 55 81 ab    .ïp.....è"O.¤U.«
0030   81 2d 98 81 cb 51 d9 fb  be 7d b3 d6 57 61 72 33    .-..ËQÙû.}.ÖWar3
0040   2e 65 78 65 20 37 2f 31  39 2f 30 37 20 31 38 3a    .exe 7/19/07 18:
0050   34 31 3a 31 32 20 34 30  39 36 36 30 00 46 65 6c    41:12 409660.Fel
0060   62 6f 74 00                                         bot.

[4:48:14 PM] [BNET] Answering authorization challenge..
[4:48:15 PM] [BNET] RECIEVED PACKET 0x51:
0000   ff 51 09 00 00 00 00 00  00                          ÿQ.......

[4:48:15 PM] [BNET] Passed authorization challenge!
[4:48:15 PM] [BNET] SENT PACKET 0x53:
0000   ff 53 2f 00 7c b3 96 55  5c 45 c2 83 fd d6 c9 76    ÿS/.|..U\EÂ.ýÖÉv
0010   08 d3 33 0b ea 55 d4 a9  86 d2 06 71 ac 31 ce 04    .Ó3.êUÔ©.Ò.q¬1Î.
0020   3b 0b 34 09 52 69 62 6f  73 65 2d 35 2e 31 00       ;.4.Ribose-5.1.

[4:48:15 PM] [BNET] Authenticating with logon credentials..
[4:48:15 PM] [BNET] RECIEVED PACKET 0x53:
0000   ff 53 48 00 05 00 00 00  00 00 00 00 00 00 00 00    ÿSH.............
0010   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
0030   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    ................
0040   00 00 00 00 00 00 00 00                              ........

[4:48:15 PM] [BNET] Authentication failed. Account requires upgrade!
[4:48:15 PM] [BNET] SENT PACKET 0x57:
0000   ff 57 04 00                                         ÿW..

[4:48:15 PM] [BNET] Attempting to upgrade account..
[4:48:15 PM] [BNET] RECIEVED PACKET 0x57:
0000   ff 57 0c 00 00 00 00 00  e0 49 bf 6f                ÿW......àI¿o

[4:48:15 PM] [BNET] Upgrade request valid!
[4:48:15 PM] [BNET] SENT PACKET 0x58:
0000   ff 58 5c 00 13 37 00 00  d4 1b 32 88 81 aa 3b 69    ÿX\..7..Ô.2..ª;i
0010   64 a1 2b 76 1b ef 14 a2  77 ea 3e bc 8a 88 e4 88    d¡+v.ï.¢wê>...ä.
0020   91 6b 17 fa 83 72 19 24  ef 20 df 9b 7a ef bc 45    .k.ú.r.$ï ß.zï.E
0030   a4 b1 16 25 61 e3 34 d2  d9 43 b7 7d 74 ec ed 30    ¤±.%aã4ÒÙC·}tìí0
0040   98 33 db 82 e6 cd 85 d3  ab c7 42 89 25 7d d8 64    .3Û.æÍ.Ó«ÇB.%}Ød
0050   cd 25 fc fa f7 7b 5e a3  3c 08 fa ea                Í%üú÷{^£<.úê

[4:48:15 PM] [BNET] Proving account upgrade..[/code]

It doesn't respond still.

[quote author=Andy link=topic=14113.msg177695#msg177695 date=1208290414]
Yay, I'm IPBanned from Asia now. Way to go me.
[/quote]I got IP'd a few times, however its not as bad as an IPBan for messing up 0x51 badly.


I just tried the account with the client.
Here's the client's response:
"The account specified is not supported by WarCraft III.

Please select 'Create New Account' and choose a new name and password."

Great, looks like its not implemented. Don't create your accounts with 0x3D on WarCraft III. :o
April 15, 2008, 8:50 PM
Barabajagal
Oh, my IP was cause I sent LogonResponse2 right after createaccount2...
And... what do you mean it's not implemented?

Only problem I've got is how to generate the ACCOUNTUPGRADEPROOF send packet... I'm trying to use BNLS to figure out exactly what to send it, but every time I send 0x08, I get disconnected.
April 15, 2008, 9:18 PM
Ribose
[quote author=Andy link=topic=14113.msg177699#msg177699 date=1208294281]
Oh, my IP was cause I sent LogonResponse2 right after createaccount2...
And... what do you mean it's not implemented?[/quote]
I meant WarCraft III doesn't attempt to upgrade it, so obviously the whole upgrade system doesn't seem to be enabled (so then the Battle.net side not responding wouldn't be surprising).
April 15, 2008, 9:23 PM
Barabajagal
Just cause the client doesn't work doesn't mean the server can't do it. Have you tried packet logging to see what the client actually does?
April 15, 2008, 9:32 PM
Ribose
[quote author=Andy link=topic=14113.msg177701#msg177701 date=1208295121]
Just cause the client doesn't work doesn't mean the server can't do it. Have you tried packet logging to see what the client actually does?
[/quote]Since WPE doesn't recognize WarCraft III I can't =[.  When I tried Ethereal (someone directed me to it) the installer is corrupt or something.  But, I'd assume that WarCraft III just recieves response 0x05 and says oops! and gives me the message box I described.  If you have a packet logger that works, link me. :/

Sending 0x58 doesn't IPBan me (my other bot stays online) or give me an error code or simply disconnect me when it's in this format:

(DWORD) client token
(BYTE[20]) old password hash
(BYTE[32]) NLS salt (s)
(BYTE[32]) NLS verifier (v)

but why wouldn't it respond (iago's question as well).
April 15, 2008, 10:27 PM
Barabajagal
Mm.. Then ya, it's probably disabled. Still, I'd like to add support for it. [s]How are the salt and verifier generated? I don't know much of anything about NLS.[/s] Nevermind. Stupid question. And Ethereal's always worked for me... I dunno.
April 15, 2008, 10:33 PM
Ribose
[quote author=Andy link=topic=14113.msg177706#msg177706 date=1208298838]
Mm.. Then ya, it's probably disabled. Still, I'd like to add support for it. How are the salt and verifier generated? I don't know much of anything about NLS. And Ethereal's always worked for me... I dunno.
[/quote]
[s]The salt and verifier is the (BYTE[64]) (or (DWORD[16])) that you send in SID_AUTH_ACCOUNTCREATE, or SID_AUTH_ACCOUNTCHANGEPROOF.
Looking at BNETDocs' documentation on BNLS, I'd do:
[BNLS] C -> S 0x04  BNLS_CREATEACCOUNT  (since it appears to return the s + v)
[BNLS] S -> C 0x04 (store the 64 bytes)
[BNET] C -> S 0x58
    (DWORD) Client token
    (BYTE[20]) old password hash
    (BYTE[64]) NLS s + v (the 64 bytes)[/s]

lol, you answered it yourself before I posted I guess...
April 15, 2008, 11:00 PM
Barabajagal
Wait, is it for the new password or the old one? Seems like it should be the new one to me...

And just in case anyone else happens to be doing this in the future, here's some easy-to-steal example code:
[code]Public Sub SID_Send_AUTH_ACCOUNTUPGRADEPROOF(ByVal SToken As Long)
Dim UpNLS  As Long
Dim BufLen As Long
Dim Buffer As String
Dim S      As String
Dim V      As String
  BufLen = &H41 + Len(Config.Username)
  Buffer = String$(BufLen, vbNullChar)
  UpNLS = nls_init(UCase$(Config.Username), UCase$(Config.Password))
  nls_account_create UpNLS, Buffer, BufLen
  nls_free UpNLS
  S = Left$(Buffer, &H20)
  V = Mid$(Buffer, &H21, &H20)
  BNCSPacket.ClearOutbound
  BNCSPacket.InsertDWORD ClientToken
  BNCSPacket.InsertString DoubleHashPassword(LCase$(Config.Password), ClientToken, SToken)
  BNCSPacket.InsertString S
  BNCSPacket.InsertString V
  AddQueue BNCSPacket.SendBNCSPacket(SID_AUTH_ACCOUNTUPGRADEPROOF)
End Sub[/code]
April 15, 2008, 11:04 PM
Ribose
[quote author=Andy link=topic=14113.msg177710#msg177710 date=1208300697]
And just in case anyone else happens to be doing this in the future, here's some easy-to-steal example code:
[code]Public Sub SID_Send_AUTH_ACCOUNTUPGRADEPROOF(ByVal SToken As Long)
Dim UpNLS  As Long
Dim BufLen As Long
Dim Buffer As String
Dim S      As String
Dim V      As String
  BufLen = &H41 + Len(Config.Username)
  Buffer = String$(BufLen, vbNullChar)
  UpNLS = nls_init(UCase$(Config.Username), UCase$(Config.Password))
  nls_account_create UpNLS, Buffer, BufLen
  nls_free UpNLS
  S = Left$(Buffer, &H20)
  V = Mid$(Buffer, &H21, &H20)
  BNCSPacket.ClearOutbound
  BNCSPacket.InsertDWORD ClientToken
  BNCSPacket.InsertString DoubleHashPassword(LCase$(Config.Password), ClientToken, SToken)
  BNCSPacket.InsertString S
  BNCSPacket.InsertString V
  AddQueue BNCSPacket.SendBNCSPacket(SID_AUTH_ACCOUNTUPGRADEPROOF)
End Sub[/code]
[/quote]
Lol... you leave easy-to-steal stuff everywhere. :P
And, yea, that's basically my code (except that is VB, and uses BNLS).
April 15, 2008, 11:36 PM
Barabajagal
Hmm? It doesn't use BNLS.
April 15, 2008, 11:51 PM
iago
iirc, I documented the packet:

http://www.javaop.com/~ron/documents/SRP.html

Never tested it, but me and Maddox reversed it.
April 16, 2008, 2:06 AM
Barabajagal
Might wanna add (for new password) next to s and v for ACCOUNTUPGRADEPROOF then. And it doesn't matter anyway cause the packet isn't responded to... Except maybe on private servers.
April 16, 2008, 2:15 AM
Ribose
[quote author=iago link=topic=14113.msg177721#msg177721 date=1208311590]
iirc, I documented the packet:

http://www.javaop.com/~ron/documents/SRP.html

Never tested it, but me and Maddox reversed it.
[/quote]Oh, well, it's not documented in BnetDocs (it looks like someone just was too lazy to finish that part/left it with only the server response), and I didn't know where your notes were. :o
April 21, 2008, 1:46 AM
Barabajagal
Mm... speaking of Documentation, I think I'll add SID_ACCOUNTUPGRADEPROOF C>S to Bnetdocs.org.
April 21, 2008, 2:38 AM

Search