Skip to content

Commit 006815d

Browse files
Merge pull request #1322 from alexbakker/new-battle-net
Add support for importing from the new Battle.net app
2 parents ec617e0 + 4311bd9 commit 006815d

File tree

33 files changed

+82
-71
lines changed

33 files changed

+82
-71
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@
157157
<package android:name="com.valvesoftware.android.steam.community" />
158158
<package android:name="com.authenticator.authservice2" />
159159
<package android:name="com.duosecurity.duomobile" />
160-
<package android:name="com.blizzard.bma" />
160+
<package android:name="com.blizzard.messenger" />
161161
</queries>
162162

163163
</manifest>

app/src/main/java/com/beemdevelopment/aegis/importers/BattleNetImporter.java

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,18 @@
1111
import com.beemdevelopment.aegis.otp.TotpInfo;
1212
import com.beemdevelopment.aegis.util.PreferenceParser;
1313
import com.beemdevelopment.aegis.vault.VaultEntry;
14+
import com.google.common.base.Strings;
1415
import com.topjohnwu.superuser.io.SuFile;
1516

1617
import org.xmlpull.v1.XmlPullParser;
1718
import org.xmlpull.v1.XmlPullParserException;
1819

1920
import java.io.IOException;
2021
import java.io.InputStream;
21-
import java.util.ArrayList;
22-
import java.util.List;
2322

2423
public class BattleNetImporter extends DatabaseImporter {
25-
private static final String _pkgName = "com.blizzard.bma";
26-
private static final String _subPath = "shared_prefs/com.blizzard.bma.AUTH_STORE.xml";
24+
private static final String _pkgName = "com.blizzard.messenger";
25+
private static final String _subPath = "shared_prefs/com.blizzard.messenger.authenticator_preferences.xml";
2726

2827
private static final byte[] _key;
2928

@@ -46,71 +45,80 @@ protected SuFile getAppPath() throws DatabaseImporterException, PackageManager.N
4645

4746
@Override
4847
protected State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {
48+
final String serialKey = "com.blizzard.messenger.AUTHENTICATOR_SERIAL";
49+
final String secretKey = "com.blizzard.messenger.AUTHENTICATOR_DEVICE_SECRET";
50+
4951
try {
5052
XmlPullParser parser = Xml.newPullParser();
5153
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
5254
parser.setInput(stream, null);
5355
parser.nextTag();
5456

55-
List<String> entries = new ArrayList<>();
57+
String serial = "";
58+
String secretValue = null;
5659
for (PreferenceParser.XmlEntry entry : PreferenceParser.parse(parser)) {
57-
if (entry.Name.equals("com.blizzard.bma.AUTH_STORE.HASH")) {
58-
entries.add(entry.Value);
59-
break;
60+
if (entry.Name.equals(secretKey)) {
61+
secretValue = entry.Value;
62+
} else if (entry.Name.equals(serialKey)) {
63+
serial = entry.Value;
6064
}
6165
}
62-
return new BattleNetImporter.State(entries);
66+
67+
if (secretValue == null) {
68+
throw new DatabaseImporterException(String.format("Key not found: %s", secretKey));
69+
}
70+
71+
return new BattleNetImporter.State(serial, secretValue);
6372
} catch (XmlPullParserException | IOException e) {
6473
throw new DatabaseImporterException(e);
6574
}
6675
}
6776

6877
public static class State extends DatabaseImporter.State {
69-
private final List<String> _entries;
78+
private final String _serial;
79+
private final String _secretValue;
7080

71-
public State(List<String> entries) {
81+
public State(String serial, String secretValue) {
7282
super(false);
73-
_entries = entries;
83+
_serial = serial;
84+
_secretValue = secretValue;
7485
}
7586

7687
@Override
7788
public Result convert() {
7889
Result result = new Result();
7990

80-
for (String str : _entries) {
81-
try {
82-
VaultEntry entry = convertEntry(str);
83-
result.addEntry(entry);
84-
} catch (DatabaseImporterEntryException e) {
85-
result.addError(e);
86-
}
91+
try {
92+
VaultEntry entry = convertEntry(_serial, _secretValue);
93+
result.addEntry(entry);
94+
} catch (DatabaseImporterEntryException e) {
95+
result.addError(e);
8796
}
8897

8998
return result;
9099
}
91100

92-
private static VaultEntry convertEntry(String hashString) throws DatabaseImporterEntryException {
101+
private static VaultEntry convertEntry(String serial, String secretString) throws DatabaseImporterEntryException {
93102
try {
94-
byte[] hash = Hex.decode(hashString);
95-
if (hash.length != _key.length) {
96-
throw new DatabaseImporterEntryException(String.format("Unexpected hash length: %d", hash.length), hashString);
103+
if (!Strings.isNullOrEmpty(serial)) {
104+
serial = unmask(serial);
97105
}
98-
99-
StringBuilder sb = new StringBuilder();
100-
for (int i = 0; i < hash.length; i++) {
101-
char c = (char) (hash[i] ^ _key[i]);
102-
sb.append(c);
103-
}
104-
105-
final int secretLen = 40;
106-
byte[] secret = Hex.decode(sb.substring(0, secretLen));
107-
String serial = sb.substring(secretLen);
108-
106+
byte[] secret = Hex.decode(unmask(secretString));
109107
OtpInfo info = new TotpInfo(secret, OtpInfo.DEFAULT_ALGORITHM, 8, TotpInfo.DEFAULT_PERIOD);
110108
return new VaultEntry(info, serial, "Battle.net");
111109
} catch (OtpInfoException | EncodingException e) {
112-
throw new DatabaseImporterEntryException(e, hashString);
110+
throw new DatabaseImporterEntryException(e, secretString);
111+
}
112+
}
113+
114+
private static String unmask(String s) throws EncodingException {
115+
byte[] ds = Hex.decode(s);
116+
StringBuilder sb = new StringBuilder();
117+
for (int i = 0; i < ds.length; i++) {
118+
char c = (char) (ds[i] ^ _key[i]);
119+
sb.append(c);
113120
}
121+
return sb.toString();
114122
}
115123
}
116124
}

app/src/main/res/values-ar-rSA/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@
492492
<string name="importer_help_authy">توفير نسخة من <b> /data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>، الموجود في دليل التخزين الداخلي لـ Authy.</string>
493493
<string name="importer_help_andotp">توفير مِلَفّ تصدير / نسخ احتياطي andOTP.</string>
494494
<string name="importer_help_bitwarden">توفير مِلَفّ تصدير / نسخ احتياطي لـ Bitwarden. الملفات المشفرة غير مدعومة.</string>
495-
<string name="importer_help_battle_net_authenticator">قم بتوفير نسخة من <b>/data/data/com.blizzard.bma/shared_prefs/com.blizzard.bma.AUTH_STORE.xml</b>، الموجود في مجلد المساحة الداخلية لمصادق Battle.net.</string>
495+
<string name="importer_help_battle_net_authenticator">قم بتوفير نسخة من <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>، الموجود في مجلد المساحة الداخلية لمصادق Battle.net.</string>
496496
<string name="importer_help_duo">توفير نسخة من <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>، الموجودة في دليل التخزين الداخلي لـ DUO.</string>
497497
<string name="importer_help_freeotp">قم بتوفير نسخة من <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>، الموجود في مجلد أو دليل التخزين الداخلي لـ FreeOTP (1.x).</string>
498498
<string name="importer_help_freeotp_plus">توفير ملف تصدير FreeOTP +.</string>

app/src/main/res/values-bg-rBG/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@
450450
<string name="importer_help_authy">Изберете копие на файла <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, който се намира в папката с данни на Authy.</string>
451451
<string name="importer_help_andotp">Изберете изнесен файл или резервно копие на andOTP.</string>
452452
<string name="importer_help_bitwarden">Изберете изнесен файл или резервно копие на Bitwarden. Шифровани файлове не се поддържат.</string>
453-
<string name="importer_help_battle_net_authenticator">Изберете копие на файла <b>/data/data/com.blizzard.bma/shared_prefs/com.blizzard.bma.AUTH_STORE.xml</b>, който се намира в папката с данни на Battle.net Authenticator.</string>
453+
<string name="importer_help_battle_net_authenticator">Изберете копие на файла <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, който се намира в папката с данни на Battle.net Authenticator.</string>
454454
<string name="importer_help_duo">Изберете копие на файла <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, който се намира в папката с данни на DUO.</string>
455455
<string name="importer_help_freeotp">Изберете копие на файла <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, който се намира в папката с данни на FreeOTP (1.x).</string>
456456
<string name="importer_help_freeotp_plus">Изберете изнесен файл от FreeOTP+.</string>

app/src/main/res/values-ca-rES/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@
448448
<string name="importer_help_authy">Subministra una còpia de <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, que està a l\'emmagatzematge intern del teu dispositiu, al directori del Authy.</string>
449449
<string name="importer_help_andotp">Subministra un fitxer exportat del andOTP.</string>
450450
<string name="importer_help_bitwarden">Subministreu un fitxer d\'exportació/còpia de seguretat de Bitwarden. Els fitxers xifrats no són compatibles.</string>
451-
<string name="importer_help_battle_net_authenticator">Proporciona una copia de <b>/data/data/com.blizzard.bma/shared_prefs/com.blizzard.bma.AUTH_STORE.xml</b>, trobat al directori del autenticador de Battle.net.</string>
451+
<string name="importer_help_battle_net_authenticator">Proporciona una copia de <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, trobat al directori del autenticador de Battle.net.</string>
452452
<string name="importer_help_duo">Subministra una còpia de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, que està a l\'emmagatzematge intern del teu dispositiu, al directori del DUO.</string>
453453
<string name="importer_help_freeotp">Subministra una còpia de <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, que està a l\'emmagatzematge intern del teu dispositiu, al directori del FreeOTP (1.x).</string>
454454
<string name="importer_help_freeotp_plus">Subministra un fitxer exportat del FreeOTP+.</string>

app/src/main/res/values-cs-rCZ/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@
475475
<string name="importer_help_authy">Dodejte kopii <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, která se nachází v interním úložišti Authy.</string>
476476
<string name="importer_help_andotp">Dodejte soubor exportu/zálohy andOTP.</string>
477477
<string name="importer_help_bitwarden">Vyberte soubor exportu/zálohy Bitwardenu. Šifrované soubory nejsou podporovány.</string>
478-
<string name="importer_help_battle_net_authenticator">Dodejte kopii <b>/data/data/com.blizzard.bma/shared_prefs/com.blizzard.bma.AUTH_STORE.xml</b>, která se nachází v interním úložišti Battle.net Authenticator.</string>
478+
<string name="importer_help_battle_net_authenticator">Dodejte kopii <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, která se nachází v interním úložišti Battle.net Authenticator.</string>
479479
<string name="importer_help_duo">Dodejte kopii <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, která se nachází v interním úložišti DUO.</string>
480480
<string name="importer_help_freeotp">Dodejte kopii <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, která se nachází v interním úložišti FreeOTP (1.x).</string>
481481
<string name="importer_help_freeotp_plus">Dodjete soubor exportu FreeOTP+.</string>

app/src/main/res/values-da-rDK/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@
451451
<string name="importer_help_authy">Levér en kopi af <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, der er placeret i den interne lagermappe i Authy.</string>
452452
<string name="importer_help_andotp">Levér en andOTP eksport/backup fil.</string>
453453
<string name="importer_help_bitwarden">Vælg en Bitwarden-eksport-/sikkerhedskopifil. Krypterede filer understøttes ikke.</string>
454-
<string name="importer_help_battle_net_authenticator">Levér en kopi af <b>/data/data/com.blizzard.bma/shared_prefs/com.blizzard.bma.AUTH_STORE.xml</b>, der er placeret i den interne lagermappe i Battle.net Authenticator.</string>
454+
<string name="importer_help_battle_net_authenticator">Levér en kopi af <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, der er placeret i den interne lagermappe i Battle.net Authenticator.</string>
455455
<string name="importer_help_duo">Skaf en kopi af <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> fra DUOs interne lagermappe.</string>
456456
<string name="importer_help_freeotp">Levér en kopi af <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> fra i den interne lagermappe i FreeOTP (1.x).</string>
457457
<string name="importer_help_freeotp_plus">Levér en FreeOTP+ eksportfil.</string>

app/src/main/res/values-de-rDE/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@
451451
<string name="importer_help_authy">Gib eine Kopie von <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> an, die sich im internen Speicherverzeichnis von Authy befindet.</string>
452452
<string name="importer_help_andotp">Gib eine andOTP-Export-/Sicherungsdatei an.</string>
453453
<string name="importer_help_bitwarden">Gib eine Bitwarden-Export-/Sicherungsdatei an. Verschlüsselte Dateien werden nicht unterstützt.</string>
454-
<string name="importer_help_battle_net_authenticator">Gib eine Kopie von <b>/data/data/com.blizzard.bma/shared_prefs/com.blizzard.bma.AUTH_STORE.xml</b> an, die sich im internen Speicherverzeichnis von Battle.net Authenticator befindet.</string>
454+
<string name="importer_help_battle_net_authenticator">Gib eine Kopie von <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> an, die sich im internen Speicherverzeichnis von Battle.net Authenticator befindet.</string>
455455
<string name="importer_help_duo">Gib eine Kopie von <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> an, die sich im internen Speicherverzeichnis von DUO befindet.</string>
456456
<string name="importer_help_freeotp">Gib eine Kopie von <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> an, die sich im internen Speicherverzeichnis von FreeOTP (1.X) befindet.</string>
457457
<string name="importer_help_freeotp_plus">Gib eine FreeOTP+-Exportdatei an.</string>

app/src/main/res/values-es-rES/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@
451451
<string name="importer_help_authy">Suministre una copia de <b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b>, localizado en el directorio de almacenamiento interno de Authy.</string>
452452
<string name="importer_help_andotp">Suministre un archivo exportado/copia de seguridad de andOTP.</string>
453453
<string name="importer_help_bitwarden">Suministra un archivo de exportación/copia de seguridad de Bitwarden. Los archivos encriptados no están soportados.</string>
454-
<string name="importer_help_battle_net_authenticator">Suministre una copia de <b>/data/data/com.blizzard.bma/shared_prefs/com.blizzard.bma.AUTH_STORE.xml</b>, ubicado en el directorio de almacenamiento interno de Battle.net Authenticator.</string>
454+
<string name="importer_help_battle_net_authenticator">Suministre una copia de <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b>, ubicado en el directorio de almacenamiento interno de Battle.net Authenticator.</string>
455455
<string name="importer_help_duo">Suministre una copia de <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b>, localizado en el directorio de almacenamiento interno de DUO.</string>
456456
<string name="importer_help_freeotp">Suministre una copia de <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b>, localizado en el directorio de almacenamiento interno de FreeOTP (1.x).</string>
457457
<string name="importer_help_freeotp_plus">Suministre un archivo exportado de FreeOTP+.</string>

app/src/main/res/values-eu-rES/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@
442442
<string name="importer_help_authy"><b>/data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml</b> fitxategia aukeratu.</string>
443443
<string name="importer_help_andotp">andOTPren esportazio/segurtasun-kopia fitxategia aukeratu.</string>
444444
<string name="importer_help_bitwarden">Kargatu Bitwardenen esportazio/segurtasun-kopia fitxategi bat. Ezin dituzu zifratutako fitxategiak kargatu.</string>
445-
<string name="importer_help_battle_net_authenticator">Battle.net Authenticatoren <b>/data/data/com.blizzard.bma/shared_prefs/com.blizzard.bma.AUTH_STORE.xml</b> fitxategia aukeratu.</string>
445+
<string name="importer_help_battle_net_authenticator">Battle.net Authenticatoren <b>/data/data/com.blizzard.messenger/shared_prefs/com.blizzard.messenger.authenticator_preferences.xml</b> fitxategia aukeratu.</string>
446446
<string name="importer_help_duo">Aukeratu <b>/data/data/com.duosecurity.duomobile/files/duokit/accounts.json</b> fitxategia, DUOren karpeten barruan dagoena.</string>
447447
<string name="importer_help_freeotp">FreeTOPren (1.x bersioa) barne karpetan dagoen <b>/data/data/org.fedorahosted.freeotp/shared_prefs/tokens.xml</b> fitxategia aukeratu.</string>
448448
<string name="importer_help_freeotp_plus">FreeOTP+en esportazio fitxategia aukeratu.</string>

0 commit comments

Comments
 (0)