Exemplo n.º 1
0
def decompile(input_, file_, output, format_, jar, limit, decompiler):
    """
    Decompile an APK and create Control Flow Graphs.

    Example:

    \b
        $ androguard resources.arsc
    """
    from androguard import session
    if file_ and input_:
        print(
            "Can not give --input and positional argument! "
            "Please use only one of them!",
            file=sys.stderr)
        sys.exit(1)

    if not input_ and not file_:
        print("Give one file to decode!", file=sys.stderr)
        sys.exit(1)

    if input_:
        fname = input_
    else:
        fname = file_

    s = session.Session()
    with open(fname, "rb") as fd:
        s.add(fname, fd.read())
    export_apps_to_format(fname, s, output, limit, jar, decompiler, format_)
Exemplo n.º 2
0
    def __init__(self,
                 parent=None,
                 session=session_module.Session(),
                 input_file=None,
                 input_plugin=None):
        super(MainWindow, self).__init__(parent)
        self.session = session
        self.bin_windows = {}

        self.setupFileMenu()
        self.setupViewMenu()
        self.setupPluginsMenu()
        self.setupHelpMenu()

        self.setupCentral()
        self.setupEmptyTree()
        self.setupDock()

        self.setupSession()

        self.setWindowTitle("Androguard GUI")

        self.showStatus("Androguard GUI")

        self.installEventFilter(self)

        self.input_plugin = input_plugin

        if input_file:
            self._openFile(input_file)

        root = os.path.dirname(os.path.realpath(__file__))
        self.setWindowIcon(QtGui.QIcon(os.path.join(root, "androguard.ico")))
    def testSessionLoad(self):
        s = session.Session()
        with open("examples/android/TestsAndroguard/bin/TestActivity.apk",
                  "rb") as fd:
            s.add("examples/android/TestsAndroguard/bin/TestActivity.apk",
                  fd.read())
            session.Save(s, "test_session")

        self.assertIn(
            '2f24538b3064f1f88d3eb29ee7fbd2146779a4c9144aefa766d18965be8775c7',
            s.analyzed_dex.keys())
        self.assertIn(
            '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb',
            s.analyzed_apk.keys())
        x = s.analyzed_apk[
            '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb'][
                0]
        self.assertIsInstance(x, APK)

        nsession = session.Load("test_session")
        self.assertIn(
            '2f24538b3064f1f88d3eb29ee7fbd2146779a4c9144aefa766d18965be8775c7',
            nsession.analyzed_dex.keys())
        self.assertIn(
            '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb',
            nsession.analyzed_apk.keys())
        y = nsession.analyzed_apk[
            '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb'][
                0]
        self.assertIsInstance(y, APK)
Exemplo n.º 4
0
 def testSessionSave(self):
     s = session.Session()
     with open("examples/android/TestsAndroguard/bin/TestActivity.apk",
               "r") as fd:
         s.add("examples/android/TestsAndroguard/bin/TestActivity.apk",
               fd.read())
         s.save("test_session")
Exemplo n.º 5
0
    def __init__(self,
                 parent=None,
                 session=session_module.Session(),
                 input_file=None,
                 input_plugin=None):
        super(MainWindow, self).__init__(parent)
        self.session = session
        self.bin_windows = {}

        self.setupFileMenu()
        self.setupViewMenu()
        self.setupPluginsMenu()
        self.setupHelpMenu()

        self.setupCentral()
        self.setupEmptyTree()
        self.setupDock()

        self.setupSession()

        self.setWindowTitle("Androguard GUI")

        self.showStatus("Androguard GUI")

        self.installEventFilter(self)

        self.input_plugin = input_plugin

        if input_file:
            self._openFile(input_file)
Exemplo n.º 6
0
def get_default_session():
    """
        Return the default Session from the configuration
        or create a new one, if the session is None.
    """
    if androconf.CONF["SESSION"] is None:
        androconf.CONF["SESSION"] = session.Session()
    return androconf.CONF["SESSION"]
Exemplo n.º 7
0
 def testSessionDex(self):
     s = session.Session()
     with open("examples/android/TestsAndroguard/bin/classes.dex",
               "r") as fd:
         s.add("examples/android/TestsAndroguard/bin/classes.dex", fd.read())
         self.assertEqual(len(s.analyzed_apk), 0)
         self.assertEqual(len(s.analyzed_files), 1)
         self.assertEqual(len(s.analyzed_digest), 1)
         self.assertEqual(len(s.analyzed_dex), 1)
    def testSessionDex(self):
        s = session.Session()
        s.add("examples/android/TestsAndroguard/bin/classes.dex")

        self.assertEqual(len(s.analyzed_apk), 0)
        self.assertEqual(len(s.analyzed_files), 1)
        self.assertEqual(len(s.analyzed_digest), 1)
        self.assertEqual(len(s.analyzed_vms), 1)
        self.assertEqual(len(s.analyzed_dex), 1)
Exemplo n.º 9
0
def main(options, arguments):
    if options.input is not None and options.output is not None:
        s = session.Session()
        with open(options.input, "rb") as fd:
            s.add(options.input, fd.read())
            export_apps_to_format(options.input, s, options.output, options.limit,
                                  options.jar, options.decompiler, options.format)
    else:
        print("Please, specify an input file and an output directory")
Exemplo n.º 10
0
 def testSessionAPK(self):
     s = session.Session()
     with open("examples/android/TestsAndroguard/bin/TestActivity.apk",
               "r") as fd:
         s.add("examples/android/TestsAndroguard/bin/TestActivity.apk",
               fd.read())
         self.assertEqual(len(s.analyzed_apk), 1)
         self.assertEqual(len(s.analyzed_files), 1)
         self.assertEqual(len(s.analyzed_digest), 2)
         self.assertEqual(len(s.analyzed_dex), 1)
    def testSessionDexIPython(self):
        """ Test if exporting ipython works"""
        s = session.Session(export_ipython=True)
        s.add("examples/android/TestsAndroguard/bin/classes.dex")

        self.assertEqual(len(s.analyzed_apk), 0)
        self.assertEqual(len(s.analyzed_files), 1)
        self.assertEqual(len(s.analyzed_digest), 1)
        self.assertEqual(len(s.analyzed_vms), 1)
        self.assertEqual(len(s.analyzed_dex), 1)
    def testSessionAPK(self):
        s = session.Session()
        s.add("examples/android/TestsAndroguard/bin/TestActivity.apk")

        self.assertEqual(len(s.analyzed_apk), 1)
        self.assertEqual(len(s.analyzed_files), 1)
        self.assertEqual(
            len(s.analyzed_files[
                'examples/android/TestsAndroguard/bin/TestActivity.apk']), 2)
        self.assertEqual(len(s.analyzed_digest), 2)
        # Two VMs analyzed: one at the APK level, one at the dex level
        self.assertEqual(len(s.analyzed_vms), 2)
        self.assertEqual(len(s.analyzed_dex), 1)
    def testSessionAPKIP(self):
        """Test if exporting to ipython works with APKs"""
        s = session.Session(export_ipython=True)
        s.add("examples/android/TestsAndroguard/bin/TestActivity.apk")

        self.assertEqual(len(s.analyzed_apk), 1)
        self.assertEqual(len(s.analyzed_files), 1)
        self.assertEqual(
            len(s.analyzed_files[
                'examples/android/TestsAndroguard/bin/TestActivity.apk']), 2)
        self.assertEqual(len(s.analyzed_digest), 2)
        # Two VMs analyzed: one at the APK level, one at the dex level
        self.assertEqual(len(s.analyzed_vms), 2)
        self.assertEqual(len(s.analyzed_dex), 1)
    def testSessionClassesDex(self):
        """Test if all classes.dex are added into the session"""
        from androguard.core.bytecodes.dvm import DalvikVMFormat
        from androguard.core.analysis.analysis import Analysis

        s = session.Session()

        # 0e1aa10d9ecfb1cb3781a3f885195f61505e0a4557026a07bd07bf5bd876c951
        x = s.add("examples/tests/Test.dex")
        self.assertEqual(
            x,
            "0e1aa10d9ecfb1cb3781a3f885195f61505e0a4557026a07bd07bf5bd876c951")
        self.assertIn(
            '0e1aa10d9ecfb1cb3781a3f885195f61505e0a4557026a07bd07bf5bd876c951',
            s.analyzed_dex)

        dexfiles = list(s.get_objects_dex())

        self.assertEqual(len(dexfiles), 1)
        df = dexfiles[0]
        self.assertEqual(
            df[0],
            "0e1aa10d9ecfb1cb3781a3f885195f61505e0a4557026a07bd07bf5bd876c951")
        self.assertIsInstance(df[1], DalvikVMFormat)
        self.assertIsInstance(df[2], Analysis)
        self.assertIn(df[1], df[2].vms)

        x = s.add("examples/android/TestsAndroguard/bin/TestActivity.apk")
        self.assertEqual(
            x,
            '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb')
        self.assertIn(
            '2f24538b3064f1f88d3eb29ee7fbd2146779a4c9144aefa766d18965be8775c7',
            s.analyzed_dex)

        dexfiles = list(s.get_objects_dex())
        self.assertEqual(len(dexfiles), 2)
        self.assertEqual(
            sorted([
                '0e1aa10d9ecfb1cb3781a3f885195f61505e0a4557026a07bd07bf5bd876c951',
                '2f24538b3064f1f88d3eb29ee7fbd2146779a4c9144aefa766d18965be8775c7'
            ]), sorted(map(lambda x: x[0], dexfiles)))
Exemplo n.º 15
0
            help="Use a different decompiler (default: DAD)")
    return parser


if __name__ == "__main__":
    parser = get_parser()
    args = parser.parse_args()

    if args.file and args.input:
        print("Can not give --input and positional argument! Please use only one of them!", file=sys.stderr)
        sys.exit(1)

    if args.version:
        print("Androaxml version %s" % androconf.ANDROGUARD_VERSION)
        sys.exit(0)

    if not args.input and not args.file:
        print("Give one file to decode!", file=sys.stderr)
        sys.exit(1)

    if args.input:
        fname = args.input
    else:
        fname = args.file

    s = session.Session()
    with open(fname, "rb") as fd:
        s.add(fname, fd.read())
    export_apps_to_format(fname, s, args.output, args.limit,
                          args.jar, args.decompiler, args.format)