Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions bulk-patch-builder/build-all
Original file line number Diff line number Diff line change
Expand Up @@ -160,34 +160,34 @@ build_all() {
# Build the hook patches

if (( quick )); then
build_and_apply_one sigspoof-hook-1.5-2.3 "$filesets_dir"/10-*
build_and_apply_one sigspoof-hook-4.0 "$filesets_dir"/15-*
#build_and_apply_one sigspoof-hook-1.5-2.3 "$filesets_dir"/10-*
#build_and_apply_one sigspoof-hook-4.0 "$filesets_dir"/15-*
build_one sigspoof-hook-4.1-6.0 "$filesets_dir"/16-*
apply_one sigspoof-hook-4.1-6.0 "$filesets_dir"/{16,17,22}-*
build_one sigspoof-hook-7.0-9.0 "$filesets_dir"/24-*
apply_one sigspoof-hook-7.0-9.0 "$filesets_dir"/2{4,6,8}-*
else
build_and_apply_one sigspoof-hook-1.5-2.3 "$filesets_dir"/{0[3-9],10}-*
build_and_apply_one sigspoof-hook-4.0 "$filesets_dir"/1[4-5]-*
#build_and_apply_one sigspoof-hook-1.5-2.3 "$filesets_dir"/{0[3-9],10}-*
#build_and_apply_one sigspoof-hook-4.0 "$filesets_dir"/1[4-5]-*
build_and_apply_one sigspoof-hook-4.1-6.0 "$filesets_dir"/{1[6-9],2[1-3]}-*
build_and_apply_one sigspoof-hook-7.0-9.0 "$filesets_dir"/2[4-8]-*
fi

# Build the core patch

if (( quick )); then
build_one sigspoof-core "$tmp_dir"/sigspoof-hook-1.5-2.3__fs/10-*
apply_one sigspoof-core "$tmp_dir"/sigspoof-hook-{1.5-2.3,4.0,4.1-6.0,7.0-9.0}__fs/*
#build_one sigspoof-core "$tmp_dir"/sigspoof-hook-1.5-2.3__fs/10-*
apply_one sigspoof-core "$tmp_dir"/sigspoof-hook-{4.1-6.0,7.0-9.0}__fs/*
else
# Avoid building the core patch on Android 9.0 (Workaround for https://github.com/Lanchon/haystack/issues/23)
#build_and_apply_one sigspoof-core "$tmp_dir"/sigspoof-hook-{1.5-2.3,4.0,4.1-6.0,7.0-9.0}__fs/*
build_one sigspoof-core "$tmp_dir"/sigspoof-hook-{{1.5-2.3,4.0,4.1-6.0}__fs/*,7.0-9.0__fs/2[4-7]-*}
apply_one sigspoof-core "$tmp_dir"/sigspoof-hook-{1.5-2.3,4.0,4.1-6.0,7.0-9.0}__fs/*
build_one sigspoof-core "$tmp_dir"/sigspoof-hook-{4.1-6.0__fs/*,7.0-9.0__fs/2[4-7]-*}
apply_one sigspoof-core "$tmp_dir"/sigspoof-hook-{4.1-6.0,7.0-9.0}__fs/*
fi

# Build the UI patches

build_one sigspoof-ui-global-4.0 "$tmp_dir"/sigspoof-core__fs/1[4-5]-*
#build_one sigspoof-ui-global-4.0 "$tmp_dir"/sigspoof-core__fs/1[4-5]-*
build_one sigspoof-ui-global-4.1 "$tmp_dir"/sigspoof-core__fs/16-*
build_one sigspoof-ui-global-4.2-5.0 "$tmp_dir"/sigspoof-core__fs/{1[7-9],21}-*
build_one sigspoof-ui-global-5.1-6.0 "$tmp_dir"/sigspoof-core__fs/2[2-3]-*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,24 @@ static class FakeSignatureCore {

@DexAdd
private static boolean getPerAppEnable(PackageInfo pi, Context context, PackageParser.Package p, int flags, int userId) {
return true;
// MAYBE FIXME: at least Android 4.1 required (for requestedPermissionsFlags)
if (pi.requestedPermissions==null || pi.requestedPermissionsFlags==null) {
return false;
}
if (pi.requestedPermissions.length != pi.requestedPermissionsFlags.length) {
Log.e("GeneratePackageInfoHook", "pi.requestedPermissions.length != pi.requestedPermissionsFlags.length");
return false;
}
for (int i=0; i<pi.requestedPermissions.length; i++) {
if (pi.requestedPermissions[i].equals(FakeSignatureCore.PERMISSION)) {
boolean r = ( (pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0 );
if (!r) {
Log.w("GeneratePackageInfoHook", "user didn't grant FAKE_PACKAGE_SIGNATURE permission");
}
return r;
}
}
return false;
}

@DexAdd
Expand All @@ -54,28 +71,22 @@ private static boolean getGlobalEnable(PackageInfo pi, Context context, PackageP
static PackageInfo hook(PackageInfo pi, Context context, PackageParser.Package p, int flags, int userId) {
try {
if ((flags & PackageManager.GET_SIGNATURES) != 0) {
if (p.requestedPermissions != null) {
if (p.requestedPermissions.contains(FakeSignatureCore.PERMISSION)) {
if (getGlobalEnable(pi, context, p, flags, userId) &&
getPerAppEnable(pi, context, p, flags, userId)) {
if (p.mAppMetaData != null) {
Object fakeSignatureData = p.mAppMetaData.get(FakeSignatureCore.METADATA);
if (fakeSignatureData != null) {
if (fakeSignatureData instanceof String) {
pi.signatures = new Signature[] { new Signature((String) fakeSignatureData) };
} else {
Log.e("GeneratePackageInfoHook", "invalid '" + FakeSignatureCore.METADATA + "' metadata");
}
} else {
Log.e("GeneratePackageInfoHook", "missing 'fake-signature' metadata");
}
if (getGlobalEnable(pi, context, p, flags, userId) &&
getPerAppEnable(pi, context, p, flags, userId)) {
if (p.mAppMetaData != null) {
Object fakeSignatureData = p.mAppMetaData.get(FakeSignatureCore.METADATA);
if (fakeSignatureData != null) {
if (fakeSignatureData instanceof String) {
pi.signatures = new Signature[] { new Signature((String) fakeSignatureData) };
} else {
Log.e("GeneratePackageInfoHook", "null mAppMetaData");
Log.e("GeneratePackageInfoHook", "invalid '" + FakeSignatureCore.METADATA + "' metadata");
}
} else {
Log.e("GeneratePackageInfoHook", "missing 'fake-signature' metadata");
}
} else {
Log.e("GeneratePackageInfoHook", "null mAppMetaData");
}
} else {
Log.e("GeneratePackageInfoHook", "null requestedPermissions");
}
}
} catch (Throwable t) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageParser;
import android.content.pm.PackageManager;

//<4.0// import com.android.server.pm.GeneratePackageInfoHookAccessor;

Expand All @@ -43,13 +44,19 @@ public class PackageManagerService /* extends IPackageManager.Stub */ {
/*>4.1*/ //<7.0// PackageInfo generatePackageInfo(PackageParser.Package p, int flags, int userId) {
/*>7.0*/ private PackageInfo generatePackageInfo(PackageSetting p, int flags, int userId) {
//<4.1// PackageInfo pi = generatePackageInfo(p, flags);
/*>4.1*/ PackageInfo pi = generatePackageInfo(p, flags, userId);
/*>4.1*/ PackageInfo pi = generatePackageInfo(p, flags | PackageManager.GET_PERMISSIONS, userId);
if (p != null && pi != null) {
//<4.0// pi = GeneratePackageInfoHookAccessor.hook(pi, mContext, p, flags, -1);
/*>4.0*/ //<4.1// pi = GeneratePackageInfoHook.hook(pi, mContext, p, flags, -1);
/*>4.1*/ //<7.0// pi = GeneratePackageInfoHook.hook(pi, mContext, p, flags, userId);
/*>7.0*/ PackageParser.Package pp = p.pkg;
/*>7.0*/ if (pp != null) pi = GeneratePackageInfoHook.hook(pi, mContext, pp, flags, userId);
if ((flags & PackageManager.GET_PERMISSIONS) == 0) {
// maybe not necessary but let's keep API compatibile
pi.permissions = null;
pi.requestedPermissions = null;
pi.requestedPermissionsFlags = null;
}
}
return pi;
}
Expand Down
49 changes: 30 additions & 19 deletions patches-src/sigspoof-core/services.jar/GeneratePackageInfoHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,24 @@ static class FakeSignatureCore {

@DexAdd
private static boolean getPerAppEnable(PackageInfo pi, Context context, PackageParser.Package p, int flags, int userId) {
return true;
// MAYBE FIXME: at least Android 4.1 required (for requestedPermissionsFlags)
if (pi.requestedPermissions==null || pi.requestedPermissionsFlags==null) {
return false;
}
if (pi.requestedPermissions.length != pi.requestedPermissionsFlags.length) {
Log.e("GeneratePackageInfoHook", "pi.requestedPermissions.length != pi.requestedPermissionsFlags.length");
return false;
}
for (int i=0; i<pi.requestedPermissions.length; i++) {
if (pi.requestedPermissions[i].equals(FakeSignatureCore.PERMISSION)) {
boolean r = ( (pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0 );
if (!r) {
Log.w("GeneratePackageInfoHook", "user didn't grant FAKE_PACKAGE_SIGNATURE permission");
}
return r;
}
}
return false;
}

@DexAdd
Expand All @@ -54,28 +71,22 @@ private static boolean getGlobalEnable(PackageInfo pi, Context context, PackageP
static PackageInfo hook(PackageInfo pi, Context context, PackageParser.Package p, int flags, int userId) {
try {
if ((flags & PackageManager.GET_SIGNATURES) != 0) {
if (p.requestedPermissions != null) {
if (p.requestedPermissions.contains(FakeSignatureCore.PERMISSION)) {
if (getGlobalEnable(pi, context, p, flags, userId) &&
getPerAppEnable(pi, context, p, flags, userId)) {
if (p.mAppMetaData != null) {
Object fakeSignatureData = p.mAppMetaData.get(FakeSignatureCore.METADATA);
if (fakeSignatureData != null) {
if (fakeSignatureData instanceof String) {
pi.signatures = new Signature[] { new Signature((String) fakeSignatureData) };
} else {
Log.e("GeneratePackageInfoHook", "invalid '" + FakeSignatureCore.METADATA + "' metadata");
}
} else {
Log.e("GeneratePackageInfoHook", "missing 'fake-signature' metadata");
}
if (getGlobalEnable(pi, context, p, flags, userId) &&
getPerAppEnable(pi, context, p, flags, userId)) {
if (p.mAppMetaData != null) {
Object fakeSignatureData = p.mAppMetaData.get(FakeSignatureCore.METADATA);
if (fakeSignatureData != null) {
if (fakeSignatureData instanceof String) {
pi.signatures = new Signature[] { new Signature((String) fakeSignatureData) };
} else {
Log.e("GeneratePackageInfoHook", "null mAppMetaData");
Log.e("GeneratePackageInfoHook", "invalid '" + FakeSignatureCore.METADATA + "' metadata");
}
} else {
Log.e("GeneratePackageInfoHook", "missing 'fake-signature' metadata");
}
} else {
Log.e("GeneratePackageInfoHook", "null mAppMetaData");
}
} else {
Log.e("GeneratePackageInfoHook", "null requestedPermissions");
}
}
} catch (Throwable t) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageParser;
import android.content.pm.PackageManager;

/*<4.0*/ import com.android.server.pm.GeneratePackageInfoHookAccessor;

Expand All @@ -43,13 +44,19 @@ public class PackageManagerService /* extends IPackageManager.Stub */ {
//>4.1// /*<7.0*/ PackageInfo generatePackageInfo(PackageParser.Package p, int flags, int userId) {
//>7.0// private PackageInfo generatePackageInfo(PackageSetting p, int flags, int userId) {
/*<4.1*/ PackageInfo pi = generatePackageInfo(p, flags);
//>4.1// PackageInfo pi = generatePackageInfo(p, flags, userId);
//>4.1// PackageInfo pi = generatePackageInfo(p, flags | PackageManager.GET_PERMISSIONS, userId);
if (p != null && pi != null) {
/*<4.0*/ pi = GeneratePackageInfoHookAccessor.hook(pi, mContext, p, flags, -1);
//>4.0// /*<4.1*/ pi = GeneratePackageInfoHook.hook(pi, mContext, p, flags, -1);
//>4.1// /*<7.0*/ pi = GeneratePackageInfoHook.hook(pi, mContext, p, flags, userId);
//>7.0// PackageParser.Package pp = p.pkg;
//>7.0// if (pp != null) pi = GeneratePackageInfoHook.hook(pi, mContext, pp, flags, userId);
if ((flags & PackageManager.GET_PERMISSIONS) == 0) {
// maybe not necessary but let's keep API compatibile
pi.permissions = null;
pi.requestedPermissions = null;
pi.requestedPermissionsFlags = null;
}
}
return pi;
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageParser;
import android.content.pm.PackageManager;

//<4.0// import com.android.server.pm.GeneratePackageInfoHookAccessor;

Expand All @@ -43,13 +44,19 @@ public class PackageManagerService /* extends IPackageManager.Stub */ {
//>4.1// /*<7.0*/ PackageInfo generatePackageInfo(PackageParser.Package p, int flags, int userId) {
//>7.0// private PackageInfo generatePackageInfo(PackageSetting p, int flags, int userId) {
/*<4.1*/ PackageInfo pi = generatePackageInfo(p, flags);
//>4.1// PackageInfo pi = generatePackageInfo(p, flags, userId);
//>4.1// PackageInfo pi = generatePackageInfo(p, flags | PackageManager.GET_PERMISSIONS, userId);
if (p != null && pi != null) {
//<4.0// pi = GeneratePackageInfoHookAccessor.hook(pi, mContext, p, flags, -1);
/*>4.0*/ /*<4.1*/ pi = GeneratePackageInfoHook.hook(pi, mContext, p, flags, -1);
//>4.1// /*<7.0*/ pi = GeneratePackageInfoHook.hook(pi, mContext, p, flags, userId);
//>7.0// PackageParser.Package pp = p.pkg;
//>7.0// if (pp != null) pi = GeneratePackageInfoHook.hook(pi, mContext, pp, flags, userId);
if ((flags & PackageManager.GET_PERMISSIONS) == 0) {
// maybe not necessary but let's keep API compatibile
pi.permissions = null;
pi.requestedPermissions = null;
pi.requestedPermissionsFlags = null;
}
}
return pi;
}
Expand Down
Loading