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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
import unittest
import sys
from androguard.core.bytecodes.apk import APK
from androguard import session
class SessionTest(unittest.TestCase):
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)
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 testSessionSave(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")
@unittest.skipIf(True, "fails in autopkgtest but works locally, probably Python 3.12 issue")
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)
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)))
if __name__ == '__main__':
unittest.main()
|