From f2f74f95602514774f15a28ceda2a39956745034 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Fri, 27 Apr 2018 11:58:47 +0200 Subject: Respected specification alignments when reading Dex structures. --- plugins/dex/dex-int.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/plugins/dex/dex-int.c b/plugins/dex/dex-int.c index 9eee67f..150d401 100644 --- a/plugins/dex/dex-int.c +++ b/plugins/dex/dex-int.c @@ -61,6 +61,9 @@ bool read_dex_header(const GDexFormat *format, vmpa2t *pos, dex_header *header) GBinContent *content; /* Contenu binaire à lire */ size_t i; /* Boucle de parcours */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + result = true; content = G_BIN_FORMAT(format)->content; @@ -126,6 +129,9 @@ bool read_dex_string_id_item(const GDexFormat *format, vmpa2t *pos, string_id_it bool result; /* Bilan à retourner */ GBinContent *content; /* Contenu binaire à lire */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + content = G_BIN_FORMAT(format)->content; result = g_binary_content_read_u32(content, pos, SRE_LITTLE, &str_id->string_data_off); @@ -188,6 +194,9 @@ bool read_dex_type_id_item(const GDexFormat *format, vmpa2t *pos, type_id_item * bool result; /* Bilan à retourner */ GBinContent *content; /* Contenu binaire à lire */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + content = G_BIN_FORMAT(format)->content; result = g_binary_content_read_u32(content, pos, SRE_LITTLE, &item->descriptor_idx); @@ -216,6 +225,9 @@ bool read_dex_proto_id_item(const GDexFormat *format, vmpa2t *pos, proto_id_item bool result; /* Bilan à retourner */ GBinContent *content; /* Contenu binaire à lire */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + content = G_BIN_FORMAT(format)->content; result = g_binary_content_read_u32(content, pos, SRE_LITTLE, &proto_id->shorty_idx); @@ -246,6 +258,9 @@ bool read_dex_field_id_item(const GDexFormat *format, vmpa2t *pos, field_id_item bool result; /* Bilan à retourner */ GBinContent *content; /* Contenu binaire à lire */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + content = G_BIN_FORMAT(format)->content; result = g_binary_content_read_u16(content, pos, SRE_LITTLE, &field_id->class_idx); @@ -276,6 +291,9 @@ bool read_dex_method_id_item(const GDexFormat *format, vmpa2t *pos, method_id_it bool result; /* Bilan à retourner */ GBinContent *content; /* Contenu binaire à lire */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + content = G_BIN_FORMAT(format)->content; result = g_binary_content_read_u16(content, pos, SRE_LITTLE, &meth_id->class_idx); @@ -306,6 +324,9 @@ bool read_dex_class_def_item(const GDexFormat *format, vmpa2t *pos, class_def_it bool result; /* Bilan à retourner */ GBinContent *content; /* Contenu binaire à lire */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + content = G_BIN_FORMAT(format)->content; result = g_binary_content_read_u32(content, pos, SRE_LITTLE, &class_def->class_idx); @@ -440,6 +461,9 @@ bool read_dex_type_list(const GDexFormat *format, vmpa2t *pos, type_list *list) bool result; /* Bilan à retourner */ GBinContent *content; /* Contenu binaire à lire */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + result = true; content = G_BIN_FORMAT(format)->content; @@ -803,6 +827,9 @@ bool read_dex_code_item(const GDexFormat *format, vmpa2t *pos, code_item *item) uint16_t padding; /* Eventuel alignement */ uint16_t i; /* Boucle de parcours */ + /* Respect de l'alignement sur 4 octets */ + if (get_phy_addr(pos) % 4 != 0) return false; + result = true; content = G_BIN_FORMAT(format)->content; -- cgit v0.11.2-87-g4458