You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
PackageManager.GET_SIGNATURES use real apk signature instead of dummy
WhatsApp needs its own signature to generate a valid authentication token
This commit is contained in:
@@ -101,7 +101,9 @@ public class Context extends Object {
|
|||||||
theme = r.newTheme();
|
theme = r.newTheme();
|
||||||
application_info = new ApplicationInfo();
|
application_info = new ApplicationInfo();
|
||||||
try (XmlResourceParser parser = assets.openXmlResourceParser("AndroidManifest.xml")) {
|
try (XmlResourceParser parser = assets.openXmlResourceParser("AndroidManifest.xml")) {
|
||||||
pkg = new PackageParser(null).parsePackage(r, parser, 0, new String[1]);
|
PackageParser packageParser = new PackageParser(native_get_apk_path());
|
||||||
|
pkg = packageParser.parsePackage(r, parser, 0, new String[1]);
|
||||||
|
packageParser.collectCertificates(pkg, 0);
|
||||||
application_info = pkg.applicationInfo;
|
application_info = pkg.applicationInfo;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -1343,35 +1343,6 @@ public class PackageManager {
|
|||||||
*/
|
*/
|
||||||
public static final String EXTRA_REQUEST_PERMISSION_PERMISSION_LIST = "android.content.pm.extra.PERMISSION_LIST";
|
public static final String EXTRA_REQUEST_PERMISSION_PERMISSION_LIST = "android.content.pm.extra.PERMISSION_LIST";
|
||||||
|
|
||||||
// dummy certificate
|
|
||||||
public final static byte[] X509_DUMMY = (
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" +
|
|
||||||
"MIIERjCCAy6gAwIBAgIJAIz+EYMBU6aQMA0GCSqGSIb3DQEBBQUAMIGiMQswCQYD\n" +
|
|
||||||
"VQQGEwJDQTELMAkGA1UECBMCQkMxEjAQBgNVBAcTCVZhbmNvdXZlcjEWMBQGA1UE\n" +
|
|
||||||
"ChMNd3d3LmN1Y2JjLmNvbTEUMBIGA1UECxQLY29tbW9uc19zc2wxHTAbBgNVBAMU\n" +
|
|
||||||
"FGRlbW9faW50ZXJtZWRpYXRlX2NhMSUwIwYJKoZIhvcNAQkBFhZqdWxpdXNkYXZp\n" +
|
|
||||||
"ZXNAZ21haWwuY29tMB4XDTA2MTIxMTE1MzE0MVoXDTI4MTEwNTE1MzE0MVowgaQx\n" +
|
|
||||||
"CzAJBgNVBAYTAlVTMREwDwYDVQQIEwhNYXJ5bGFuZDEUMBIGA1UEBxMLRm9yZXN0\n" +
|
|
||||||
"IEhpbGwxFzAVBgNVBAoTDmh0dHBjb21wb25lbnRzMRowGAYDVQQLExF0ZXN0IGNl\n" +
|
|
||||||
"cnRpZmljYXRlczEQMA4GA1UEAxMHZm9vLmNvbTElMCMGCSqGSIb3DQEJARYWanVs\n" +
|
|
||||||
"aXVzZGF2aWVzQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" +
|
|
||||||
"ggEBAMhjr5aCPoyp0R1iroWAfnEyBMGYWoCidH96yGPFjYLowez5aYKY1IOKTY2B\n" +
|
|
||||||
"lYho4O84X244QrZTRl8kQbYtxnGh4gSCD+Z8gjZ/gMvLUlhqOb+WXPAUHMB39GRy\n" +
|
|
||||||
"zerA/ZtrlUqf+lKo0uWcocxeRc771KN8cPH3nHZ0rV0Hx4ZAZy6U4xxObe4rtSVY\n" +
|
|
||||||
"07hNKXAb2odnVqgzcYiDkLV8ilvEmoNWMWrp8UBqkTcpEhYhCYp3cTkgJwMSuqv8\n" +
|
|
||||||
"BqnGd87xQU3FVZI4tbtkB+KzjD9zz8QCDJAfDjZHR03KNQ5mxOgXwxwKw6lGMaiV\n" +
|
|
||||||
"JTxpTKqym93whYk93l3ocEe55c0CAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB\n" +
|
|
||||||
"hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE\n" +
|
|
||||||
"FJ8Ud78/OrbKOIJCSBYs2tDLXofYMB8GA1UdIwQYMBaAFHua2o+QmU5S0qzbswNS\n" +
|
|
||||||
"yoemDT4NMA0GCSqGSIb3DQEBBQUAA4IBAQC3jRmEya6sQCkmieULcvx8zz1euCk9\n" +
|
|
||||||
"fSez7BEtki8+dmfMXe3K7sH0lI8f4jJR0rbSCjpmCQLYmzC3NxBKeJOW0RcjNBpO\n" +
|
|
||||||
"c2JlGO9auXv2GDP4IYiXElLJ6VSqc8WvDikv0JmCCWm0Zga+bZbR/EWN5DeEtFdF\n" +
|
|
||||||
"815CLpJZNcYwiYwGy/CVQ7w2TnXlG+mraZOz+owr+cL6J/ZesbdEWfjoS1+cUEhE\n" +
|
|
||||||
"HwlNrAu8jlZ2UqSgskSWlhYdMTAP9CPHiUv9N7FcT58Itv/I4fKREINQYjDpvQcx\n" +
|
|
||||||
"SaTYb9dr5sB4WLNglk7zxDtM80H518VvihTcP7FHL+Gn6g4j5fkI98+S\n" +
|
|
||||||
"-----END CERTIFICATE-----\n").getBytes();
|
|
||||||
|
|
||||||
|
|
||||||
public PackageManager() {
|
public PackageManager() {
|
||||||
package_info = PackageParser.generatePackageInfo(Context.pkg, new int[0], 0, 0, 0, new HashSet<>(), new PackageUserState());
|
package_info = PackageParser.generatePackageInfo(Context.pkg, new int[0], 0, 0, 0, new HashSet<>(), new PackageUserState());
|
||||||
}
|
}
|
||||||
@@ -1411,10 +1382,7 @@ public class PackageManager {
|
|||||||
* @see #GET_UNINSTALLED_PACKAGES
|
* @see #GET_UNINSTALLED_PACKAGES
|
||||||
*/
|
*/
|
||||||
public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException {
|
public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException {
|
||||||
if ((flags & GET_SIGNATURES) == GET_SIGNATURES) {
|
return PackageParser.generatePackageInfo(Context.pkg, new int[0], flags, 0, 0, new HashSet<>(), new PackageUserState());
|
||||||
package_info.signatures = new Signature[]{new Signature(X509_DUMMY)};
|
|
||||||
}
|
|
||||||
return package_info;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -661,7 +661,7 @@ public class PackageParser {
|
|||||||
|
|
||||||
final String name = je.getName();
|
final String name = je.getName();
|
||||||
|
|
||||||
if (name.startsWith("META-INF/"))
|
if (name.startsWith("META-INF/") && !"META-INF/MANIFEST.MF".equals(name)) // MANIFEST.MF is always trusted, get certificate from it
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ANDROID_MANIFEST_FILENAME.equals(name)) {
|
if (ANDROID_MANIFEST_FILENAME.equals(name)) {
|
||||||
@@ -675,10 +675,10 @@ public class PackageParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (localCerts == null) {
|
if (localCerts == null) {
|
||||||
Slog.e(TAG, "Package " + pkg.packageName + " has no certificates at entry " + je.getName() + "; ignoring!");
|
// Slog.e(TAG, "Package " + pkg.packageName + " has no certificates at entry " + je.getName() + "; ignoring!");
|
||||||
jarFile.close();
|
// jarFile.close();
|
||||||
mParseError = PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES;
|
// mParseError = PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES;
|
||||||
return false;
|
// return false;
|
||||||
} else if (certs == null) {
|
} else if (certs == null) {
|
||||||
certs = localCerts;
|
certs = localCerts;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user