summaryrefslogtreecommitdiff
path: root/karton/android/android.py
blob: be4a11a3df826e663ea11dc14abfe120d08589d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import sys

import androguard
from karton.core import Karton, Task

from .__version__ import __version__

class Android(Karton):
    """
    Augment apk files with various information.
    """

    identity = "karton.android"
    version = __version__
    filters = [
        {"type": "sample", "extension": "apk"},
    ]

    def process(self, task: Task) -> None:
        sample = task.get_resource("sample")

        a = androguard.core.bytecodes.apk.APK(sample)
        if not a.is_valid_APK():
            self.log.info("Not a valid APK file.")
            return

        metadata = {
           'package': a.package,
           'sample': sample,
           'activities': a.get_activites(),
           'main_activity': a.get_main_activity(),
           'permissions': a.get_permissions(),
        }

        if a.is_signed() or a.is_signed_v3():
            metadata['certificate'] = a.get_certificates()[0].sha1_fingerprint.replace(" ", "")

        self.send_task(
            Task(
                headers={"type": "sample", "stage": "analyzed"},
                payload=metadata)
            )

if __name__ == "__main__":
    Android().loop()