From 87d4858cf237f7c017a9e0426db77a7a413e4719 Mon Sep 17 00:00:00 2001 From: GhidraKnight <48915474+GhidraKnight@users.noreply.github.com> Date: Mon, 1 Nov 2021 10:19:04 -0400 Subject: [PATCH] GP-1247: Changes to support Android 12 --- .../ghidra/app/util/opinion/DexLoader.java | 113 ++++--- .../file/analyzers/FileFormatAnalyzer.java | 21 +- .../file/formats/android/art/ArtAnalyzer.java | 4 +- .../file/formats/android/art/ArtBlock.java | 6 +- .../formats/android/art/ArtConstants.java | 4 +- .../file/formats/android/art/ArtFactory.java | 5 +- .../file/formats/android/art/ArtField.java | 6 +- .../formats/android/art/ArtFieldGroup.java | 7 +- .../file/formats/android/art/ArtHeader.java | 6 +- .../android/art/ArtImageSectionsFactory.java | 64 ++++ .../file/formats/android/art/ArtMethod.java | 6 +- .../formats/android/art/ArtMethodGroup.java | 7 +- .../art/UnsupportedArtVersionException.java | 4 +- .../android/art/android10/ArtHeader_10.java | 13 +- .../android/art/android11/ArtHeader_11.java | 7 +- .../android/art/android12/ArtHeader_12.java | 54 +++ .../art/android12/ImageSections_12.java | 110 ++++++ .../android/art/kitkat/ArtHeader_KitKat.java | 5 +- .../art/lollipop/ArtHeader_Lollipop.java | 5 +- .../lollipop/ArtHeader_LollipopMR1WFC.java | 5 +- .../marshmallow/ArtHeader_Marshmallow.java | 9 +- .../android/art/nougat/ArtHeader_Nougat.java | 10 +- .../art/nougat/ArtHeader_NougatMR2Pixel.java | 9 +- .../android/art/oreo/ArtHeader_Oreo.java | 9 +- .../android/art/oreo/ArtHeader_OreoMR1.java | 9 +- .../android/art/pie/ArtHeader_Pie.java | 6 +- .../android/bootimg/BootImageHeaderV0.java | 2 +- .../android/bootimg/BootImageHeaderV3.java | 2 +- .../file/formats/android/cdex/CDexLoader.java | 107 +----- .../formats/android/dex/DexHeaderFactory.java | 22 +- .../dex/analyzer/DexAnalysisState.java | 1 - .../dex/analyzer/DexHeaderFormatAnalyzer.java | 34 +- .../dex/analyzer/DexHeaderFormatMarkup.java | 198 +++++------ .../analyzer/DexHeaderFragmentManager.java | 148 ++++++++ .../formats/android/dex/format/CodeItem.java | 14 +- .../file/formats/android/fbpk/FBPK.java | 6 +- .../formats/android/fbpk/FBPK_Partition.java | 3 +- .../file/formats/android/fbpk/FBPT.java | 6 +- .../file/formats/android/fbpk/FBPT_Entry.java | 8 +- .../file/formats/android/oat/OatClass.java | 166 --------- .../formats/android/oat/OatClassStatus.java | 160 --------- .../android/oat/OatClassStatus_OreoM2.java | 164 --------- .../formats/android/oat/OatConstants.java | 2 + .../formats/android/oat/OatExecAnalyzer.java | 2 + .../formats/android/oat/OatFileSystem.java | 9 +- .../file/formats/android/oat/OatHeader.java | 59 +++- .../android/oat/OatHeaderAnalyzer.java | 3 +- .../formats/android/oat/OatHeaderFactory.java | 28 +- .../formats/android/oat/OatHeader_10.java | 29 +- .../formats/android/oat/OatHeader_11.java | 29 +- .../formats/android/oat/OatHeader_12.java | 132 ++++++++ .../formats/android/oat/OatHeader_KitKat.java | 18 +- .../android/oat/OatHeader_Lollipop.java | 28 +- .../android/oat/OatHeader_Marshmallow.java | 29 +- .../formats/android/oat/OatHeader_Nougat.java | 4 +- .../formats/android/oat/OatHeader_Oreo.java | 4 +- .../android/oat/OatHeader_Oreo_M2.java | 34 +- .../formats/android/oat/OatHeader_Pie.java | 29 +- .../formats/android/oat/OatUtilities.java | 25 +- .../oat/UnsupportedOatVersionException.java | 6 +- .../android/oat/bundle/EmptyOatBundle.java | 67 ++++ .../android/oat/bundle/FullOatBundle.java | 318 ++++++++++++++++++ .../formats/android/oat/bundle/OatBundle.java | 80 +++++ .../android/oat/bundle/OatBundleFactory.java | 35 ++ .../android/oat/oatclass/OatClass.java | 144 ++++++++ .../android/oat/oatclass/OatClassFactory.java | 59 ++++ .../oat/oatclass/OatClassStatusEnum.java | 24 ++ .../oatclass/OatClassStatusEnum_11_12.java | 81 +++++ .../oatclass/OatClassStatusEnum_Invalid.java | 44 +++ .../oat/oatclass/OatClassStatusEnum_K.java | 74 ++++ .../oatclass/OatClassStatusEnum_L_M_N.java | 84 +++++ .../oat/oatclass/OatClassStatusEnum_O.java | 77 +++++ .../oat/oatclass/OatClassStatusEnum_O_M2.java | 78 +++++ .../oat/oatclass/OatClassStatusEnum_P_10.java | 81 +++++ .../oat/{ => oatclass}/OatClassType.java | 29 +- .../OatClass_Android10.java} | 40 +-- .../oat/oatclass/OatClass_Android11.java | 47 +++ .../oat/oatclass/OatClass_Android12.java | 142 ++++++++ .../android/oat/oatclass/OatClass_KitKat.java | 57 ++++ .../oat/oatclass/OatClass_Lollipop.java | 125 +++++++ .../oat/oatclass/OatClass_Marshmallow.java | 47 +++ .../android/oat/oatclass/OatClass_Nougat.java | 47 +++ .../android/oat/oatclass/OatClass_Oreo.java | 47 +++ .../android/oat/oatclass/OatClass_OreoM2.java | 47 +++ .../android/oat/oatclass/OatClass_Pie.java | 46 +++ .../oat/{ => oatdexfile}/OatDexFile.java | 6 +- .../{ => oatdexfile}/OatDexFileFactory.java | 40 +-- .../{ => oatdexfile}/OatDexFileUtilities.java | 29 +- .../OatDexFile_Android10.java | 13 +- .../OatDexFile_Android11.java | 13 +- .../oat/oatdexfile/OatDexFile_Android12.java | 226 +++++++++++++ .../{ => oatdexfile}/OatDexFile_KitKat.java | 158 +-------- .../{ => oatdexfile}/OatDexFile_Lollipop.java | 5 +- .../OatDexFile_Marshmallow.java | 5 +- .../{ => oatdexfile}/OatDexFile_Nougat.java | 9 +- .../oat/{ => oatdexfile}/OatDexFile_Oreo.java | 35 +- .../{ => oatdexfile}/OatDexFile_OreoM2.java | 22 +- .../oat/{ => oatdexfile}/OatDexFile_Pie.java | 42 ++- .../oat/{ => oatmethod}/OatMethodOffsets.java | 3 +- .../OatMethodOffsetsFactory.java | 19 +- .../OatMethodOffsets_KitKat.java | 2 +- .../OatMethodOffsets_Lollipop.java | 2 +- .../OatQuickMethodHeader.java | 4 +- .../OatQuickMethodHeaderFactory.java | 7 +- .../OatQuickMethodHeader_Android10.java | 6 +- .../OatQuickMethodHeader_Android12.java | 59 ++++ .../OatQuickMethodHeader_Lollipop.java | 7 +- .../OatQuickMethodHeader_LollipopMR1.java | 8 +- .../OatQuickMethodHeader_Nougat.java | 7 +- .../OatQuickMethodHeader_Oreo.java | 7 +- .../QuickMethodFrameInfo.java | 2 +- .../oat/{ => tlt}/TypeLookupTable.java | 2 +- .../oat/{ => tlt}/TypeLookupTableEntry.java | 42 ++- .../tlt/TypeLookupTableEntry_Android10.java | 60 ++++ .../oat/tlt/TypeLookupTableFactory.java | 51 +++ .../{ => tlt}/TypeLookupTable_Android10.java | 54 +-- .../oat/tlt/TypeLookupTable_Android11.java | 47 +++ .../oat/tlt/TypeLookupTable_Android12.java | 46 +++ .../oat/tlt/TypeLookupTable_Nougat.java | 80 +++++ .../oat/{ => tlt}/TypeLookupTable_Oreo.java | 39 ++- .../oat/{ => tlt}/TypeLookupTable_Pie.java | 42 ++- .../vdex/UnsupportedVdexVersionException.java | 2 +- .../formats/android/vdex/VdexConstants.java | 15 +- .../formats/android/vdex/VdexFactory.java | 87 +---- .../android/vdex/VdexHeaderAnalyzer.java | 4 +- .../formats/android/vdex/VdexHeader_10.java | 9 +- .../formats/android/vdex/VdexHeader_11.java | 4 +- .../formats/android/vdex/VdexHeader_Oreo.java | 4 +- .../formats/android/vdex/VdexHeader_Pie.java | 7 +- .../formats/android/vdex/VdexStringTable.java | 4 +- .../android/vdex/android12/VdexHeader_12.java | 203 +++++++++++ .../vdex/android12/VdexSectionHeader_12.java | 63 ++++ .../vdex/android12/VdexSection_12.java | 28 ++ .../Processors/Dalvik/certification.manifest | 2 + .../Dalvik/data/languages/Dalvik.ldefs | 12 + .../languages/Dalvik_DEX_Android12.slaspec | 30 ++ .../languages/Dalvik_OpCode_E3_EA_unused.sinc | 71 ++++ 137 files changed, 4107 insertions(+), 1572 deletions(-) create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/ArtImageSectionsFactory.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/android12/ArtHeader_12.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/android12/ImageSections_12.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexHeaderFragmentManager.java delete mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/OatClass.java delete mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/OatClassStatus.java delete mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/OatClassStatus_OreoM2.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/OatHeader_12.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/bundle/EmptyOatBundle.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/bundle/FullOatBundle.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/bundle/OatBundle.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/bundle/OatBundleFactory.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassFactory.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassStatusEnum.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassStatusEnum_11_12.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassStatusEnum_Invalid.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassStatusEnum_K.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassStatusEnum_L_M_N.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassStatusEnum_O.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassStatusEnum_O_M2.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClassStatusEnum_P_10.java rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatclass}/OatClassType.java (64%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{TypeLookupTableEntry_Android10.java => oatclass/OatClass_Android10.java} (53%) create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_Android11.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_Android12.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_KitKat.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_Lollipop.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_Marshmallow.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_Nougat.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_Oreo.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_OreoM2.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatclass/OatClass_Pie.java rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile.java (92%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFileFactory.java (60%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFileUtilities.java (91%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_Android10.java (74%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_Android11.java (74%) create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatdexfile/OatDexFile_Android12.java rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_KitKat.java (57%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_Lollipop.java (88%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_Marshmallow.java (88%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_Nougat.java (94%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_Oreo.java (57%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_OreoM2.java (88%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatdexfile}/OatDexFile_Pie.java (82%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatmethod}/OatMethodOffsets.java (93%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatmethod}/OatMethodOffsetsFactory.java (69%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatmethod}/OatMethodOffsets_KitKat.java (97%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => oatmethod}/OatMethodOffsets_Lollipop.java (96%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => quickmethod}/OatQuickMethodHeader.java (88%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => quickmethod}/OatQuickMethodHeaderFactory.java (91%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => quickmethod}/OatQuickMethodHeader_Android10.java (89%) create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/quickmethod/OatQuickMethodHeader_Android12.java rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => quickmethod}/OatQuickMethodHeader_Lollipop.java (91%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => quickmethod}/OatQuickMethodHeader_LollipopMR1.java (92%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => quickmethod}/OatQuickMethodHeader_Nougat.java (90%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => quickmethod}/OatQuickMethodHeader_Oreo.java (93%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => quickmethod}/QuickMethodFrameInfo.java (98%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => tlt}/TypeLookupTable.java (95%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => tlt}/TypeLookupTableEntry.java (57%) create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/tlt/TypeLookupTableEntry_Android10.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/tlt/TypeLookupTableFactory.java rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => tlt}/TypeLookupTable_Android10.java (57%) create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/tlt/TypeLookupTable_Android11.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/tlt/TypeLookupTable_Android12.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/tlt/TypeLookupTable_Nougat.java rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => tlt}/TypeLookupTable_Oreo.java (65%) rename Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/{ => tlt}/TypeLookupTable_Pie.java (58%) create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/vdex/android12/VdexHeader_12.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/vdex/android12/VdexSectionHeader_12.java create mode 100644 Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/vdex/android12/VdexSection_12.java create mode 100644 Ghidra/Processors/Dalvik/data/languages/Dalvik_DEX_Android12.slaspec create mode 100644 Ghidra/Processors/Dalvik/data/languages/Dalvik_OpCode_E3_EA_unused.sinc diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/app/util/opinion/DexLoader.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/app/util/opinion/DexLoader.java index e999a606d3..7631a235a3 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/app/util/opinion/DexLoader.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/app/util/opinion/DexLoader.java @@ -37,7 +37,7 @@ public class DexLoader extends AbstractLibrarySupportLoader { } @Override - public String getName( ) { + public String getName() { return "Dalvik Executable (DEX)"; } @@ -70,83 +70,106 @@ public class DexLoader extends AbstractLibrarySupportLoader { public void load(ByteProvider provider, LoadSpec loadSpec, List