|
| 1 | +import base64 |
| 2 | +import io |
| 3 | +import unittest |
| 4 | + |
| 5 | +from credsweeper.deep_scanner.jclass_scanner import JclassScanner |
| 6 | +from tests import AZ_DATA |
| 7 | + |
| 8 | +SAMPLE_B64 = """ |
| 9 | +yv66vgAAAEEAaQoAAgADBwAEDAAFAAYBABBqYXZhL2xhbmcvT2JqZWN0AQAGPGluaXQ+AQADKClWEgAAAAgMAAkACgEAA3J1bgEAFigpTGphdmEvbGFuZy9S |
| 10 | +dW5uYWJsZTsLAAwADQcADgwACQAGAQASamF2YS9sYW5nL1J1bm5hYmxlCQAQABEHABIMABMAFAEAEGphdmEvbGFuZy9TeXN0ZW0BAANvdXQBABVMamF2YS9p |
| 11 | +by9QcmludFN0cmVhbTsHABYBAAZTYW1wbGUKABgAGQcAGgwAGwAcAQATamF2YS9pby9QcmludFN0cmVhbQEAB3ByaW50bG4BAAQoWilWCgAYAB4MABsAHwEA |
| 12 | +BChDKVYIACEBACRiYWNlNGQxOS1iZWVmLWNhZmUtY29vMS05MTI5NDc0YmNkODEKABgAIwwAGwAkAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWBQAAAAB3NhXZ |
| 13 | +CgAYACgMABsAKQEABChKKVYGQBdu4XWCSM4KABgALQwAGwAuAQAEKEQpVgoAFQADCgAVAA0IAAkBAAxKQVZBX0JPT0xFQU4BAAFaAQANQ29uc3RhbnRWYWx1 |
| 14 | +ZQMAAAABAQAJSkFWQV9DSEFSAQABQwMAAABYAQAJSkFWQV9CWVRFAQABQgMAAAB7AQAKSkFXQV9TSE9SVAEAAVMDAAABXgEACEpBVkFfSU5UAQABSQMAAIAA |
| 15 | +AQAJSkFWQV9MT05HAQABSgUAAAAAdzWUAAEACkpBVkFfRkxPQVQBAAFGBEBI9cMBAAtKQVZBX0RPVUJMRQEAAUQGQAW/CosEkZsBAAtKQVZBX1NUUklORwEA |
| 16 | +EkxqYXZhL2xhbmcvU3RyaW5nOwEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBAANsb2cBAARtYWluAQAWKFtMamF2YS9sYW5nL1N0cmluZzspVgEADGxhbWJk |
| 17 | +YSRydW4kMAEAClNvdXJjZUZpbGUBAAtTYW1wbGUuamF2YQEAEEJvb3RzdHJhcE1ldGhvZHMQAAYPBgBaCgAVAFsMAFQABg8GAF0KAF4AXwcAYAwAYQBiAQAi |
| 18 | +amF2YS9sYW5nL2ludm9rZS9MYW1iZGFNZXRhZmFjdG9yeQEAC21ldGFmYWN0b3J5AQDMKExqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZXMkTG9va3Vw |
| 19 | +O0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7TGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTtMamF2YS9sYW5nL2lu |
| 20 | +dm9rZS9NZXRob2RIYW5kbGU7TGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTspTGphdmEvbGFuZy9pbnZva2UvQ2FsbFNpdGU7AQAMSW5uZXJDbGFzc2Vz |
| 21 | +BwBlAQAlamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGVzJExvb2t1cAcAZwEAHmphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlcwEABkxvb2t1cAAh |
| 22 | +ABUAAgABAAwACQAaADIAMwABADQAAAACADUAGgA2ADcAAQA0AAAAAgA4ABoAOQA6AAEANAAAAAIAOwAaADwAPQABADQAAAACAD4AGgA/AEAAAQA0AAAAAgBB |
| 23 | +ABoAQgBDAAEANAAAAAIARAAaAEYARwABADQAAAACAEgAGgBJAEoAAQA0AAAAAgBLABoATQBOAAEANAAAAAIAIAAFAAEABQAGAAEATwAAAB0AAQABAAAABSq3 |
| 24 | +AAGxAAAAAQBQAAAABgABAAAABAABAAkABgABAE8AAAAtAAEAAgAAAA26AAcAAEwruQALAQCxAAAAAQBQAAAADgADAAAAEgAGABMADAAUAAEAUQAGAAEATwAA |
| 25 | +AFYAAwABAAAAKrIADwS2ABeyAA8QWLYAHbIADxIgtgAisgAPFAAltgAnsgAPFAAqtgAssQAAAAEAUAAAABoABgAAABcABwAYAA8AGQAXABoAIAAbACkAHAAJ |
| 26 | +AFIAUwABAE8AAAAnAAIAAQAAAAu7ABVZtwAvtgAwsQAAAAEAUAAAAAoAAgAAAB8ACgAgEAoAVAAGAAEATwAAACEAAgAAAAAACbIADxIxtgAisQAAAAEAUAAA |
| 27 | +AAYAAQAAABIAAwBVAAAAAgBWAFcAAAAMAAEAXAADAFgAWQBYAGMAAAAKAAEAZABmAGgAGQ== |
| 28 | +""" |
| 29 | + |
| 30 | + |
| 31 | +class TestJclassScanner(unittest.TestCase): |
| 32 | + |
| 33 | + def setUp(self): |
| 34 | + self.maxDiff = None |
| 35 | + |
| 36 | + def test_get_utf8_constants_n(self): |
| 37 | + with self.assertRaises(AttributeError): |
| 38 | + JclassScanner.get_utf8_constants(None) |
| 39 | + with self.assertRaises(Exception): |
| 40 | + JclassScanner.get_utf8_constants(io.BytesIO(b'')) |
| 41 | + self.assertListEqual([], JclassScanner.get_utf8_constants(io.BytesIO(AZ_DATA))) |
| 42 | + |
| 43 | + def test_get_utf8_constants_p(self): |
| 44 | + data = base64.b64decode(SAMPLE_B64) |
| 45 | + self.assertListEqual([ |
| 46 | + 'java/lang/Object', '<init>', '()V', 'run', '()Ljava/lang/Runnable;', 'java/lang/Runnable', |
| 47 | + 'java/lang/System', 'out', 'Ljava/io/PrintStream;', 'Sample', 'java/io/PrintStream', 'println', '(Z)V', |
| 48 | + '(C)V', 'bace4d19-beef-cafe-coo1-9129474bcd81', '(Ljava/lang/String;)V', '(J)V', '(D)V', 'JAVA_BOOLEAN', |
| 49 | + 'Z', 'ConstantValue', 'JAVA_CHAR', 'C', 'JAVA_BYTE', 'B', 'JAWA_SHORT', 'S', 'JAVA_INT', 'I', 'JAVA_LONG', |
| 50 | + 'J', 'JAVA_FLOAT', 'F', 'JAVA_DOUBLE', 'D', 'JAVA_STRING', 'Ljava/lang/String;', 'Code', 'LineNumberTable', |
| 51 | + 'log', 'main', '([Ljava/lang/String;)V', 'lambda$run$0', 'SourceFile', 'Sample.java', 'BootstrapMethods', |
| 52 | + 'java/lang/invoke/LambdaMetafactory', 'metafactory', |
| 53 | + ('(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;' |
| 54 | + 'Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;' |
| 55 | + ')Ljava/lang/invoke/CallSite;'), 'InnerClasses', 'java/lang/invoke/MethodHandles$Lookup', |
| 56 | + 'java/lang/invoke/MethodHandles', 'Lookup' |
| 57 | + ], JclassScanner.get_utf8_constants(io.BytesIO(data[8:]))) |
0 commit comments