diff options
author | Ujjwal Verma <ujjwalverma1111@gmail.com> | 2017-06-24 03:11:59 +0530 |
---|---|---|
committer | Ujjwal Verma <ujjwalverma1111@gmail.com> | 2017-06-24 03:28:44 +0530 |
commit | e81144e26b35aea3e2a4293b256228581a44288a (patch) | |
tree | 83df650e256d0e9e427c4258e3943462753d1b24 /mitmproxy/contentviews | |
parent | ba38a120e410f47e85387fc50f25d93f5f0fd503 (diff) | |
download | mitmproxy-e81144e26b35aea3e2a4293b256228581a44288a.tar.gz mitmproxy-e81144e26b35aea3e2a4293b256228581a44288a.tar.bz2 mitmproxy-e81144e26b35aea3e2a4293b256228581a44288a.zip |
ICO Parser. Closes #2407
Diffstat (limited to 'mitmproxy/contentviews')
-rw-r--r-- | mitmproxy/contentviews/image/image_parser.py | 22 | ||||
-rw-r--r-- | mitmproxy/contentviews/image/view.py | 9 |
2 files changed, 31 insertions, 0 deletions
diff --git a/mitmproxy/contentviews/image/image_parser.py b/mitmproxy/contentviews/image/image_parser.py index 7c74669a..46549b1b 100644 --- a/mitmproxy/contentviews/image/image_parser.py +++ b/mitmproxy/contentviews/image/image_parser.py @@ -6,6 +6,7 @@ from kaitaistruct import KaitaiStream from mitmproxy.contrib.kaitaistruct import png from mitmproxy.contrib.kaitaistruct import gif from mitmproxy.contrib.kaitaistruct import jpeg +from mitmproxy.contrib.kaitaistruct import ico Metadata = typing.List[typing.Tuple[str, str]] @@ -78,3 +79,24 @@ def parse_jpeg(data: bytes) -> Metadata: if field.data is not None: parts.append((field.tag._name_, field.data.decode('UTF-8').strip('\x00'))) return parts + + +def parse_ico(data: bytes) -> Metadata: + img = ico.Ico(KaitaiStream(io.BytesIO(data))) + parts = [ + ('Format', 'ICO'), + ('Number of images', str(img.num_images)), + ] + + for i, image in enumerate(img.images): + parts.append( + ( + 'Image {}'.format(i), "Size: {} x {}\n " + "Bits per pixel: {}\n " + "PNG: {}".format(256 if not image.width else image.width, + 256 if not image.height else image.height, + image.bpp, image.is_png) + ) + ) + + return parts diff --git a/mitmproxy/contentviews/image/view.py b/mitmproxy/contentviews/image/view.py index 95ee1e43..8fe7017a 100644 --- a/mitmproxy/contentviews/image/view.py +++ b/mitmproxy/contentviews/image/view.py @@ -5,6 +5,13 @@ from mitmproxy.types import multidict from . import image_parser +def test_ico(h, f): + if h.startswith(b"\x00\x00\x01\x00"): + return "ico" + +imghdr.tests.append(test_ico) + + class ViewImage(base.View): name = "Image" prompt = ("image", "i") @@ -27,6 +34,8 @@ class ViewImage(base.View): image_metadata = image_parser.parse_gif(data) elif image_type == 'jpeg': image_metadata = image_parser.parse_jpeg(data) + elif image_type == 'ico': + image_metadata = image_parser.parse_ico(data) else: image_metadata = [ ("Image Format", image_type or "unknown") |