Example #1
0
    def test_init(self):
        for filename in self.certs:
            self.assertTrue(self.certs[filename] is not None)
            self.assertTrue(type(self.certs[filename]) is CERT)

        # Test the class raise when a non-existing file is given:
        with self.assertRaises(ParsingError):
            CERT(join('test', 'data', 'aaa_this_is_a_non_existent_file_xxx'))

        # Test the class raise when a non-CERT.RSA file is given:
        with self.assertRaises(CERTParsingError):
            CERT(join('test', 'data', 'Example.apk'))
            CERT(join('test', 'data', 'AndroidManifest.xml'))
            CERT(join('test', 'data', 'classes.dex'))
Example #2
0
    def _extract_and_set_entries(self, string_processing):
        exists_invalid_entry = False

        apk_filepath = self.get_file_path()
        with ZipFile(apk_filepath) as apk:
            tmpdir = tempfile.mkdtemp(APK._TEMPORARY_DIR)

            for filename in apk.namelist():
                entry_filepath = apk.extract(filename, tmpdir)

                try:
                    if AndroidManifest.looks_like_a_manifest(filename):
                        self._manifest = AndroidManifest(entry_filepath, True, apk_filepath)
                    elif CERT.looks_like_a_cert(filename):
                        self._cert = CERT(entry_filepath, filename)
                    elif Dex.looks_like_a_dex(filename):
                        self._dex = Dex(entry_filepath, string_processing)
                    else:
                        if not os.path.isdir(entry_filepath):
                            self._files.append(File(entry_filepath, filename))
                except (ParsingError, AndroidManifestParsingError, CERTParsingError):
                    exists_invalid_entry = True

            try:
                shutil.rmtree(tmpdir)
            except OSError:
                pass

            if exists_invalid_entry:
                raise APKParsingError
Example #3
0
    def setUpClass(cls):
        cls.certs = {}

        for filename in listdir(join('test', 'data')):
            if filename in cls.cert_properties:
                cls.certs[filename] = CERT(join('test', 'data', filename),
                                           filename)