refactoring. Rewriting code to spring-boot service, changing token-based filtering to data-based filtering.

This commit is contained in:
Michael Wain 2024-05-31 03:50:31 +03:00
parent c405fe60ba
commit 5a1ac47828
8 changed files with 458 additions and 111 deletions

View File

@ -19,6 +19,9 @@ public class TcpConnection extends Thread {
private final SSLSocket fromClient;
private OutputStream outToClient;
@Getter
private int token;
@Getter
private Map<Integer, Processor> processors;
@ -99,4 +102,8 @@ public class TcpConnection extends Thread {
log.error(e.getMessage());
}
}
public int nextToken() {
return this.token++;
}
}

View File

@ -27,24 +27,24 @@ public class AuthProcessor extends Processor {
h = Protocol.Header.newBuilder()
.setServiceId(1)
.setObjectId(0)
.setToken(0)
.setToken(conn.nextToken())
.setMethodId(12)
.setStatus(0)
.setSize(b.length)
.build();
conn.send(new BattleNetPacket(h, b));
h = Protocol.Header.newBuilder()
.setServiceId(1)
.setObjectId(0)
.setToken(1)
.setToken(conn.nextToken())
.setMethodId(13)
.setStatus(0)
.setSize(0)
.build();
conn.send(new BattleNetPacket(h, new byte[0]));
//120C7765625F617574685F75726C1A16687474703A2F2F68732F6C6F67696E2F7A2E68746D6C
byte[] us = "http://0.0.0.0:8080".getBytes(StandardCharsets.UTF_8);
byte[] bb = Util.hexStringToByteArray("120C7765625F617574685F75726C1A"+Util.intToHex(us.length)+Util.bytesToHex(us));
@ -52,13 +52,14 @@ public class AuthProcessor extends Processor {
h = Protocol.Header.newBuilder()
.setServiceId(8)
.setObjectId(0)
.setToken(2)
.setToken(conn.nextToken())
.setMethodId(3)
.setStatus(0)
.setSize(bb.length)
.build();
conn.send(new BattleNetPacket(h, bb));
}
private void selectGameAccount(BattleNetPacket packet, TcpConnection conn) throws Exception {
@ -78,24 +79,25 @@ public class AuthProcessor extends Processor {
h = Protocol.Header.newBuilder()
.setServiceId(10)
.setMethodId(1)
.setToken(4)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(2)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(h, Util.hexStringToByteArray("0800")));
h = Protocol.Header.newBuilder()
.setServiceId(10)
.setMethodId(1)
.setToken(5)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(2)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(h, Util.hexStringToByteArray("0800")));
// THIRD
//Protocol.LogonResult lr = Protocol.LogonResult.parseFrom(Util.hexStringToByteArray("080012120900000000000000011193710E1A000000001A12094743545702000002116739AB040000000022002801280228032806286230023A0F517569726B794F72632332393638384202534B4A40AA15061771938C7790CDA59BD500BF2AA3205912148098F8B68ADA802F1122B2792D90FA2952A338032A03895322DD02C4E2F3CFE6CD72415466B3798C9ADB015000"));
@ -117,13 +119,14 @@ public class AuthProcessor extends Processor {
h = Protocol.Header.newBuilder()
.setServiceId(1)
.setMethodId(5)
.setToken(6)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(logonResult.getSerializedSize())
.setStatus(0)
.build();
conn.send(new BattleNetPacket(h, logonResult.toByteArray()));
}
@Override

View File

@ -3,10 +3,8 @@ package com.alterdekim.hearthhack.component.processor;
import com.alterdekim.Protocol;
import com.alterdekim.hearthhack.component.TcpConnection;
import com.alterdekim.hearthhack.util.BattleNetPacket;
import com.alterdekim.hearthhack.util.ClientRequestBody;
import com.alterdekim.hearthhack.util.ClientRequestManager;
import com.alterdekim.hearthhack.util.Util;
import com.alterdekim.hearthhack.util.*;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import lombok.extern.slf4j.Slf4j;
@ -36,11 +34,157 @@ public class GameUtilitiesProcessor extends Processor {
return requestBody;
}
private void parseRequestNetCacheObject(ClientRequestBody body, TcpConnection conn) throws InvalidProtocolBufferException {
parseGenericRequest(Protocol.UtilGenericRequest.parseFrom(body.getBody()), conn);
}
private void processGoldBalance( TcpConnection conn ) throws Exception {
Protocol.GoldBalance gb = Protocol.GoldBalance.newBuilder()
.setCap(999999)
.setBonusBalance(165)
.setCappedBalance(160)
.setCapWarning(2000)
.build();
byte[] b = generateNotification(278, gb.toByteString(), gb.getSerializedSize()).toByteArray();
Protocol.Header header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
}
private void parseGenericRequest(Protocol.UtilGenericRequest genericRequest, TcpConnection conn) {
// body = genericRequest.getGenericData().getData().toByteArray()
GetAccountInfoRequest req = GetAccountInfoRequest.parseFromInt(genericRequest.getRequestSubId());
try {
switch (req) {
case GOLD_BALANCE -> processGoldBalance(conn);
default -> log.warn("Unknown generic request: {}", req);
}
} catch (Exception e) {
log.error(e.getMessage());
}
}
private void parseRequestNetCacheObjectList(ClientRequestBody body, TcpConnection conn) throws InvalidProtocolBufferException {
Protocol.GenericRequestList genericRequestList = Protocol.GenericRequestList.parseFrom(body.getBody());
genericRequestList.getRequestsList().forEach(gr -> this.parseGenericRequest(gr, conn));
}
private void parseSubscriptionRequest(ClientRequestBody body) throws InvalidProtocolBufferException {
Protocol.Subscribe subscribe = Protocol.Subscribe.parseFrom(body.getBody());
log.info("parseSubscriptionRequest: {}", subscribe);
}
private void parseGetAssetsVersion(ClientRequestBody body) {
log.info("parseGetAssetsVersion: got");
}
private void parseCheckAccountLicenses(ClientRequestBody body) {
// CheckAccountLicensesResponse
log.info("parseCheckAccountLicenses: got");
}
private void parseUpdateLogin(ClientRequestBody body) throws InvalidProtocolBufferException {
Protocol.UpdateLogin updateLogin = Protocol.UpdateLogin.parseFrom(body.getBody());
log.info("parseUpdateLogin: {}", updateLogin);
}
private void parseCheckGameLicenses(ClientRequestBody body) {
log.info("parseCheckGameLicenses: got");
// CheckGameLicensesResponse
}
private void parseGetAdventureProgress(ClientRequestBody body) {
log.info("parseGetAdventureProgress: got");
}
private void parseGetBattlePayConfig(ClientRequestBody body) {
log.info("parseGetBattlePayConfig: got");
}
private void parseGetAchieves(ClientRequestBody body) throws InvalidProtocolBufferException {
Protocol.GetAchieves getAchieves = Protocol.GetAchieves.parseFrom(body.getBody());
log.info("parseGetAchieves: {}", getAchieves);
}
private void parseGetBattlePayStatus(ClientRequestBody body) {
log.info("parseGetBattlePayStatus: got");
}
private void parseSetOptions(ClientRequestBody body) throws InvalidProtocolBufferException {
Protocol.SetOptions setOptions = Protocol.SetOptions.parseFrom(body.getBody());
log.info("parseSetOptions: {}", setOptions);
}
private void parseSendUnsubcribeRequest(ClientRequestBody body) {
log.info("parseSendUnsubcribeRequest: got");
}
private Protocol.Notification generateNotification(int message_type, ByteString bs, int size) {
return Protocol.Notification.newBuilder()
.setSenderId(Protocol.EntityId.newBuilder()
.setHigh(144115188075855872L)
.setLow(0))
.setTargetId(Protocol.EntityId.newBuilder()
.setHigh(144115198130930503L)
.setLow(78330215))
.setType("WTCG.UtilNotificationMessage")
.setSenderBattleTag("")
.setSenderAccountId(Protocol.EntityId.newBuilder()
.setHigh(72057594037927936L)
.setLow(0))
.setTargetAccountId(Protocol.EntityId.newBuilder()
.setHigh(72057594037927936L)
.setLow(437154195))
.addAttribute(Protocol.Attribute.newBuilder()
.setName("message_type")
.setValue(Protocol.Variant.newBuilder()
.setIntValue(message_type))) // 278L
.addAttribute(Protocol.Attribute.newBuilder()
.setName("fragment_000")
.setValue(Protocol.Variant.newBuilder()
.setBlobValue(bs)))
.addAttribute(Protocol.Attribute.newBuilder()
.setName("message_size")
.setValue(Protocol.Variant.newBuilder()
.setIntValue(size)))
.build();
}
private void processClientRequest(BattleNetPacket packet, TcpConnection conn) throws Exception {
Protocol.ClientRequest cr = Protocol.ClientRequest.parseFrom(packet.getBody());
var p = parseClientRequest(cr);
log.info("processClientRequest: {}, token={}, body={}", p, packet.getHeader().getToken(), Protocol.Subscribe.parseFrom(p.getBody()));
//log.info("processClientRequest: {}, token={}, body={}", p, packet.getHeader().getToken(), Protocol.Subscribe.parseFrom(p.getBody()));
int type = p != null ? p.getType() : 0;
switch(type) {
case 201 -> parseRequestNetCacheObject(p, conn);
case 327 -> parseRequestNetCacheObjectList(p, conn);
case 314 -> parseSubscriptionRequest(p);
case 303 -> parseGetAssetsVersion(p);
case 267 -> parseCheckAccountLicenses(p);
case 205 -> parseUpdateLogin(p);
case 276 -> parseCheckGameLicenses(p);
case 305 -> parseGetAdventureProgress(p);
case 237 -> parseGetBattlePayConfig(p);
case 253 -> parseGetAchieves(p);
case 255 -> parseGetBattlePayStatus(p);
case 239 -> parseSetOptions(p);
case 329 -> parseSendUnsubcribeRequest(p);
default -> log.warn("Unknown ClientRequest type #{}", p.getType());
}
if( packet.getHeader().getToken() == 10 ) {
Protocol.Header header = Processor.generateResponse(37, packet.getHeader().getToken(), 0, 0);
conn.send(new BattleNetPacket(header, Util.hexStringToByteArray("0A090A026964120318BB020A180A0570726F746F120F320D084918AC0220002800300F4078")));
@ -54,13 +198,14 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(16)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(213)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318C60222170A0C667261676D656E745F303030120732050801108B0222120A0C6D6573736167655F73697A65120218052A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802")));
} else if( packet.getHeader().getToken() == 16 ) {
Protocol.Header header = Processor.generateResponse(29, packet.getHeader().getToken(), 0, 0);
conn.send(new BattleNetPacket(header, Util.hexStringToByteArray("0A090A026964120318C6020A100A0570726F746F12073205080110CD01")));
@ -85,45 +230,49 @@ public class GameUtilitiesProcessor extends Processor {
.build();
conn.send(new BattleNetPacket(header, b));
b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318C60222170A0C667261676D656E745F30303012073205080110940222120A0C6D6573736167655F73697A65120218052A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802");
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(20)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318B30222120A0C6D6573736167655F73697A65120218002A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802");
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(21)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318CB0222140A0C667261676D656E745F30303012043202080122120A0C6D6573736167655F73697A65120218022A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802");
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(22)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
} else if (packet.getHeader().getToken() == 20) {
byte[] b = Util.hexStringToByteArray("0A090A026964120318C6020A100A0570726F746F12073205080110C702");
@ -136,26 +285,28 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(23)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318E90122160A0C667261676D656E745F303030120632040806100022120A0C6D6573736167655F73697A65120218042A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802");
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(24)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
} else if( packet.getHeader().getToken() == 21 ) {
byte[] b = Util.hexStringToByteArray("0A090A026964120318C6020A100A0570726F746F12073205080110C702");
@ -168,46 +319,49 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(25)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318C60222190A0C667261676D656E745F30303012093207080110C901180222120A0C6D6573736167655F73697A65120218072A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802");
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(26)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318C60222190A0C667261676D656E745F30303012093207080110C901180322120A0C6D6573736167655F73697A65120218072A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802");
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(27)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318C60222190A0C667261676D656E745F30303012093207080110C901180F22120A0C6D6573736167655F73697A65120218072A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802");
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(28)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -226,7 +380,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(29)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -239,7 +393,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(30)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -252,7 +406,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(31)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -265,7 +419,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(32)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -293,7 +447,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(33)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -306,7 +460,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(34)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -319,7 +473,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(35)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -332,7 +486,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(36)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -345,7 +499,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(37)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -358,7 +512,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(38)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -371,7 +525,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(39)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -384,7 +538,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(40)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -397,7 +551,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(41)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -410,7 +564,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(42)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -423,7 +577,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(43)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -436,7 +590,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(44)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -449,7 +603,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(45)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -462,7 +616,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(46)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -475,7 +629,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(47)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -488,7 +642,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(48)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -501,14 +655,14 @@ public class GameUtilitiesProcessor extends Processor {
// log.warn("ProtoNotify" + Protocol.Notification.parseFrom(b));
Protocol.GoldBalance gb = Protocol.GoldBalance.newBuilder()
/*Protocol.GoldBalance gb = Protocol.GoldBalance.newBuilder()
.setCap(999999)
.setBonusBalance(165)
.setCappedBalance(160)
.setCapWarning(2000)
.build();
.build();*/
Protocol.Notification notification = Protocol.Notification.newBuilder()
/* Protocol.Notification notification = Protocol.Notification.newBuilder()
.setSenderId(Protocol.EntityId.newBuilder()
.setHigh(144115188075855872L)
.setLow(0))
@ -535,25 +689,25 @@ public class GameUtilitiesProcessor extends Processor {
.setName("message_size")
.setValue(Protocol.Variant.newBuilder()
.setIntValue(gb.getSerializedSize())))
.build();
b = notification.toByteArray();
.build();*/
/* b = notification.toByteArray();
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(49)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, b));
conn.send(new BattleNetPacket(header, b));*/
b = Util.hexStringToByteArray("0A120900000000000000021100000000000000001212094743545702000002116739AB04000000001A1C575443472E5574696C4E6F74696669636174696F6E4D65737361676522130A0C6D6573736167655F74797065120318F10122480A0C667261676D656E745F303030123832360A04081818030A0B08013080E08380C0E180180A090802308080808080100A04081418020A04081518010A04080818040A04080A180122120A0C6D6573736167655F73697A65120218362A1209000000000000000111000000000000000032120900000000000000011193710E1A000000003A004A0A0889FF5C1092E5A1B90552150A050D93710E1A120C0D6739AB0415474354571802");
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(50)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -566,7 +720,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(51)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -579,7 +733,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(52)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -592,7 +746,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(53)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -605,7 +759,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(54)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -618,7 +772,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(55)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -631,7 +785,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(56)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -644,7 +798,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(57)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -676,7 +830,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(59)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -701,7 +855,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(60)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -714,7 +868,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(61)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -731,7 +885,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(5)
.setMethodId(6)
.setToken(62)
.setToken(conn.nextToken())
.setObjectId(2)
.setSize(b.length)
.setStatus(0)
@ -753,7 +907,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(64)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -766,7 +920,7 @@ public class GameUtilitiesProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(65)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)

View File

@ -39,7 +39,7 @@ public class PresenceProcessor extends Processor {
.setMethodId(1)
.setSize(bb.length)
.setObjectId(1)
.setToken(7)
.setToken(conn.nextToken())
.setStatus(0)
.build();
// FIRST
@ -62,7 +62,7 @@ public class PresenceProcessor extends Processor {
.setMethodId(1)
.setSize(bb.length)
.setObjectId(2)
.setToken(8)
.setToken(conn.nextToken())
.setStatus(0)
.build();
// SECOND
@ -76,7 +76,7 @@ public class PresenceProcessor extends Processor {
.setMethodId(6)
.setSize(68)
.setObjectId(2)
.setToken(10)
.setToken(conn.nextToken())
.setStatus(0)
.build();
conn.send(new BattleNetPacket(header, Util.hexStringToByteArray("1242AA063F0A12094743545702000002116739AB040000000012170A150A0808CE840110021804120918F182EAF5CEBDCC0212100A0E0A0808CE84011002180112021001")));
@ -95,7 +95,7 @@ public class PresenceProcessor extends Processor {
header1 = Protocol.Header.newBuilder()
.setServiceId(5)
.setMethodId(6)
.setToken(14)
.setToken(conn.nextToken())
.setObjectId(2)
.setSize(Util.hexStringToByteArray("1233AA06300A12094743545702000002116739AB0400000000121A0A180A0A08C786D1BA0510021813120A2A083833383836303830").length)
.setStatus(0)
@ -111,7 +111,7 @@ public class PresenceProcessor extends Processor {
header1 = Protocol.Header.newBuilder()
.setServiceId(5)
.setMethodId(6)
.setToken(17)
.setToken(conn.nextToken())
.setObjectId(2)
.setSize(b.length)
.setStatus(0)
@ -124,7 +124,7 @@ public class PresenceProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(18)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)
@ -141,7 +141,7 @@ public class PresenceProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(5)
.setMethodId(6)
.setToken(58)
.setToken(conn.nextToken())
.setObjectId(2)
.setSize(b.length)
.setStatus(0)
@ -159,7 +159,7 @@ public class PresenceProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(5)
.setMethodId(6)
.setToken(63)
.setToken(conn.nextToken())
.setObjectId(2)
.setSize(b.length)
.setStatus(0)
@ -181,7 +181,7 @@ public class PresenceProcessor extends Processor {
header = Protocol.Header.newBuilder()
.setServiceId(4)
.setMethodId(1)
.setToken(64)
.setToken(conn.nextToken())
.setObjectId(0)
.setSize(b.length)
.setStatus(0)

View File

@ -1,10 +0,0 @@
package com.alterdekim.hearthhack.handler;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class BattleNetSocketHandler {
public String handleMessage() {
return "";
}
}

View File

@ -1,27 +0,0 @@
package com.alterdekim.hearthhack.parser;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.serializer.Deserializer;
import org.springframework.core.serializer.Serializer;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@Slf4j
@Data
public class BattleNetSerializerDeserializer implements Serializer<byte[]>, Deserializer<byte[]> {
@Override
public byte[] deserialize(InputStream inputStream) throws IOException {
return inputStream.readAllBytes();
}
@Override
public void serialize(byte[] object, OutputStream outputStream) throws IOException {
outputStream.write(object);
}
}

View File

@ -0,0 +1,71 @@
package com.alterdekim.hearthhack.util;
public enum GetAccountInfoRequest {
// Token: 0x04000931 RID: 2353
LAST_LOGIN,
// Token: 0x04000932 RID: 2354
DECK_LIST,
// Token: 0x04000933 RID: 2355
COLLECTION,
// Token: 0x04000934 RID: 2356
MEDAL_INFO,
// Token: 0x04000935 RID: 2357
MEDAL_HISTORY,
// Token: 0x04000936 RID: 2358
BOOSTERS,
// Token: 0x04000937 RID: 2359
CARD_BACKS,
// Token: 0x04000938 RID: 2360
PLAYER_RECORD,
// Token: 0x04000939 RID: 2361
GAMES_PLAYED,
// Token: 0x0400093A RID: 2362
DECK_LIMIT,
// Token: 0x0400093B RID: 2363
CAMPAIGN_INFO,
// Token: 0x0400093C RID: 2364
NOTICES,
// Token: 0x0400093D RID: 2365
MOTD,
// Token: 0x0400093E RID: 2366
CLIENT_OPTIONS,
// Token: 0x0400093F RID: 2367
CARD_VALUES,
// Token: 0x04000940 RID: 2368
DISCONNECTED,
// Token: 0x04000941 RID: 2369
ARCANE_DUST_BALANCE,
// Token: 0x04000942 RID: 2370
FEATURES,
// Token: 0x04000943 RID: 2371
REWARD_PROGRESS,
// Token: 0x04000944 RID: 2372
GOLD_BALANCE,
// Token: 0x04000945 RID: 2373
HERO_XP,
// Token: 0x04000946 RID: 2374
PVP_QUEUE,
// Token: 0x04000947 RID: 2375
NOT_SO_MASSIVE_LOGIN,
// Token: 0x04000948 RID: 2376
BOOSTER_TALLY,
// Token: 0x04000949 RID: 2377
TAVERN_BRAWL_INFO,
// Token: 0x0400094A RID: 2378
TAVERN_BRAWL_RECORD,
// Token: 0x0400094B RID: 2379
FAVORITE_HEROES,
// Token: 0x0400094C RID: 2380
ACCOUNT_LICENSES;
public int getValue() {
return ordinal() + 1;
}
public static GetAccountInfoRequest parseFromInt(int val) {
for( GetAccountInfoRequest r : values() ) {
if( r.getValue() == val ) return r;
}
return LAST_LOGIN;
}
}

View File

@ -2090,4 +2090,153 @@ message Subscribe {
ID = 314;
}
}
// ref: PegasusUtil.GenericData
message GenericData {
required uint32 type_id = 1;
required bytes data = 2;
}
// ref: PegasusUtil.GenericRequest
message UtilGenericRequest {
required int32 request_id = 1;
optional GenericData generic_data = 2;
optional int32 request_sub_id = 3;
}
// ref: PegasusUtil.GenericRequestList
message GenericRequestList {
// ref: PegasusUtil.GenericRequestList/PacketID
enum PacketID {
system = 0;
ID = 327;
}
repeated UtilGenericRequest requests = 1;
}
// ref: PegasusUtil.GetPurchaseMethod
message GetPurchaseMethod {
// ref: PegasusUtil.GetPurchaseMethod/PacketID
enum PacketID {
system = 1;
ID = 250;
}
required string product_id = 1;
required int32 quantity = 2;
required int32 currency = 3;
required string device_id = 4;
optional Platform platform = 5;
}
// ref: PegasusShared.Platform
message Platform {
required int32 os = 1;
required int32 screen = 2;
required string name = 3;
optional int32 store = 4;
}
// ref: PegasusUtil.CheckAccountLicenses
message CheckAccountLicenses {
// ref: PegasusUtil.CheckAccountLicenses/PacketID
enum PacketID {
system = 0;
ID = 267;
}
}
// ref: PegasusUtil.CheckAccountLicensesResponse
message CheckAccountLicensesResponse {
// ref: PegasusUtil.CheckAccountLicensesResponse/PacketID
enum PacketID {
ID = 330;
}
required bool success = 1;
}
// ref: PegasusUtil.UpdateLogin
message UpdateLogin {
// ref: PegasusUtil.UpdateLogin/PacketID
enum PacketID {
system = 0;
ID = 205;
}
optional bool reply_required = 1;
optional string referral = 2;
optional string device_model_deprecated = 3;
}
// ref: PegasusUtil.CheckGameLicenses
message CheckGameLicenses {
// ref: PegasusUtil.CheckGameLicenses/PacketID
enum PacketID {
system = 1;
ID = 276;
}
}
// ref: PegasusUtil.GetAchieves
message GetAchieves {
// ref: PegasusUtil.GetAchieves/PacketID
enum PacketID {
system = 0;
ID = 253;
}
optional bool only_active_or_new_complete = 1;
optional string device_model = 2;
}
// ref: PegasusUtil.CheckGameLicensesResponse
message CheckGameLicensesResponse {
// ref: PegasusUtil.CheckGameLicensesResponse/PacketID
enum PacketID {
ID = 331;
}
required bool success = 1;
}
// ref: PegasusUtil.GetAdventureProgress
message GetAdventureProgress {
// ref: PegasusUtil.GetAdventureProgress/PacketID
enum PacketID {
system = 0;
ID = 305;
}
}
// ref: PegasusUtil.SetOptions
message SetOptions {
// ref: PegasusUtil.SetOptions/MaxOptionCount
enum MaxOptionCount {
LIMIT = 51;
}
// ref: PegasusUtil.SetOptions/PacketID
enum PacketID {
system = 0;
ID = 239;
}
repeated ClientOption options = 1;
}
// ref: PegasusUtil.ClientOption
message ClientOption {
required int32 index = 1;
optional bool as_bool = 2;
optional int32 as_int32 = 3;
optional int64 as_int64 = 4;
optional float as_float = 5;
optional uint64 as_uint64 = 6;
}