Rafal Mantiuk

106 papers A* 6B 5C 1Misc 2Journal 39Unranked 45
YearRankTypeTitle / Venue / Authors
2025 ed.
Eurographics (Tutorials)
Rafal Mantiuk, Klaus Hildebrandt
2025 J jnl
CoRR
Yancheng Cai, Robert Wanat, Rafal Mantiuk
2025 A* conf
CVPR
Yancheng Cai, Fei Yin, Dounia Hammou, Rafal Mantiuk
2025 J jnl
CoRR
Yancheng Cai, Fei Yin, Dounia Hammou, Rafal Mantiuk
2025 J jnl
CoRR
Fei Yin, Mallikarjun B. R, Chun-Han Yao, Rafal Mantiuk, Varun Jampani
2025 J jnl
CoRR
Yixu Chen, Bowen Chen, Hai Wei, Alan C. Bovik, Baojun Li, Wei Sun, Linhan Cao, Kang Fu, Dandan Zhu, Jun Jia, Menghan Hu, Xiongkuo Min, Guangtao Zhai, Dounia Hammou, Fei Yin, Rafal Mantiuk, Amritha Premkumar, Prajit T. Rajendran, Vignesh V. Menon
2025 Misc conf
IbPRIA
Luis Miguel Calvo, Pedro Latorre-Carmona, Samuel Morillas, Rafael Huertas, Rafal Mantiuk
2025 conf
CVPR Workshops
Andrew Yanzhe Ke, Lei Luo, Xiaoyu Xiang, Yuchen Fan, Rakesh Ranjan, Alexandre Chapiro, Rafal Mantiuk
2024 conf
ECCV (76)
Fazilet Gokbudak, Alejandro Sztrajman, Chenliang Zhou, Fangcheng Zhong, Rafal Mantiuk, Cengiz Öztireli
2024 J jnl
Comput. Graph. Forum
Hanxue Liang, Tianhao Wu, Param Hanji, Francesco Banterle, Hongyun Gao, Rafal Mantiuk, A. Cengiz Öztireli
2024 J jnl
CoRR
Chenliang Zhou, Alejandro Sztrajman, Gilles Rainer, Fangcheng Zhong, Fazilet Gokbudak, Zhilin Guo, Weihao Xia, Rafal Mantiuk, Cengiz Öztireli
2023 conf
HVEI
Alexandre Chapiro, Nathan Matsuda, Maliha Ashraf, Rafal Mantiuk
2023 J jnl
CoRR
Fazilet Gokbudak, Alejandro Sztrajman, Chenliang Zhou, Fangcheng Zhong, Rafal Mantiuk, Cengiz Öztireli
2023 conf
HVEI
Maliha Ashraf, Rafal Mantiuk, Alexandre Chapiro
2023 conf
SIGGRAPH (Conference Paper Track)
Martin Bálint, Krzysztof Wolski, Karol Myszkowski, Hans-Peter Seidel, Rafal Mantiuk
2023 J jnl
CoRR
Hanxue Liang, Tianhao Wu, Param Hanji, Francesco Banterle, Hongyun Gao, Rafal Mantiuk, A. Cengiz Öztireli
2023 J jnl
J. Imaging
Abdullah Kucuk, Graham D. Finlayson, Rafal Mantiuk, Maliha Ashraf
2023 J jnl
CoRR
Robert Kerschner, Rakesh John Amala Arokia Nathan, Rafal Mantiuk, Oliver Bimber
2023 J jnl
CoRR
Lei Luo, Alexandre Chapiro, Xiaoyu Xiang, Yuchen Fan, Rakesh Ranjan, Rafal Mantiuk
2022 conf
CIC
Qiang Xu, Qichen Ye, Rafal Mantiuk, Ming Ronnier Luo
2022 conf
CIC
Abdullah Kucuk, Graham D. Finlayson, Rafal Mantiuk, Maliha Ashraf
2022 conf
LIM
Maliha Ashraf, Rafal Mantiuk, Graham D. Finlayson, Abdullah Kucuk, Sophie M. Wuerger
2022 conf
LIM
Abdullah Kucuk, Graham D. Finlayson, Rafal Mantiuk, Maliha Ashraf
2022 conf
SIGGRAPH (Conference Paper Track)
Param Hanji, Rafal Mantiuk, Gabriel Eilertsen, Saghi Hajisharif, Jonas Unger
2022 J jnl
CoRR
Dan-Andrei Iliescu, Aliaksei Mikhailiuk, Damon Wischik, Rafal Mantiuk
2022 conf
CVMP
Aamir Mustafa, Param Hanji, Rafal Mantiuk
2022 ed.
CVMP
Marco Volino, Rafal Mantiuk, Armin Mustafa, Yulia Gryaditskaya
2022 A* conf
SIGGRAPH Asia
Joseph March, Anantha Krishnan, Simon J. Watt, Marek Wernikowski, Hongyun Gao, Ali Özgür Yöntem, Rafal Mantiuk
2022 ed.
LIM
Rafal Mantiuk, Ali Özgür Yöntem
2022 conf
SIGGRAPH Courses
Koray Kavakli, David Robert Walton, Nick Antipa, Rafal Mantiuk, Douglas Lanman, Kaan Aksit
2022 conf
CIC
Maliha Ashraf, Rafal Mantiuk, Jasna Martinovic, Sophie M. Wuerger
2021 ed.
CVMP
Rafal Mantiuk, Christian Richardt, Marco Volino, Armin Mustafa
2020 conf
ICME Workshops
Dingcheng Yue, Muhammad Shahzeb Khan Gul, Michel Bätz, Joachim Keinert, Rafal Mantiuk
2020 J jnl
CoRR
Aliaksei Mikhailiuk, Clifford Wilmot, María Pérez-Ortiz, Dingcheng Yue, Rafal Mantiuk
2020 conf
CIC
Qiang Xu, Stephen Westland, Marcel P. Lucassen, Dragan Sekulovski, Sophie M. Wuerger, Rafal Mantiuk, Ming Ronnier Luo
2019 conf
SIGGRAPH Posters
Fangcheng Zhong, George Alex Koulieris, George Drettakis, Martin S. Banks, Mathieu Chambe, Frédo Durand, Rafal Mantiuk
2019 A* conf
AAAI
María Pérez-Ortiz, Peter Tiño, Rafal Mantiuk, César Hervás-Martínez
2019 J jnl
CoRR
María Pérez-Ortiz, Peter Tiño, Rafal Mantiuk, César Hervás-Martínez
2019 J jnl
Comput. Graph. Forum
George Alex Koulieris, Kaan Aksit, Michael Stengel, Rafal Mantiuk, Katerina Mania, Christian Richardt
2019 J jnl
Comput. Graph. Forum
Krzysztof Wolski, Daniele Giunchi, Shinichi Kinuwaki, Piotr Didyk, Karol Myszkowski, Anthony Steed, Rafal Mantiuk
2018 A* conf
NeurIPS
Jing Li, Rafal Mantiuk, Junle Wang, Suiyi Ling, Patrick Le Callet
2018 B conf
QoMEX
Aliaksei Mikhailiuk, María Pérez-Ortiz, Rafal Mantiuk
2017 J jnl
Comput. Graph. Forum
Gabriel Eilertsen, Rafal Mantiuk, Jonas Unger
2017 J jnl
Vis. Comput.
Joss Whittle, Mark W. Jones, Rafal Mantiuk
2017 B conf
QoMEX
Emin Zerman, Vedad Hulusic, Giuseppe Valenzise, Rafal Mantiuk, Frédéric Dufaux
2017 conf
NIPS
Nanyang Ye, Zhanxing Zhu, Rafal Mantiuk
2016 ed.
Eurographics (Posters)
Luís Gonzaga Magalhães, Rafal Mantiuk
2016 J jnl
Signal Process. Image Commun.
Ratnajit Mukherjee, Kurt Debattista, Thomas Bashford-Rogers, Peter Vangorp, Rafal Mantiuk, Maximino Bessa, Brian Waterfield, Alan Chalmers
2016 conf
Eurographics (Short Papers)
Kanita Karaduzovic Hadziabdic, Jasminka Hasic Telalovic, Rafal Mantiuk
2015 conf
ICAT
Kanita Karaduzovic Hadziabdic, Jasminka Hasic Telalovic, Rafal Mantiuk
2015 J jnl
ACM Trans. Appl. Percept.
Scott Kuhl, Rafal Mantiuk, Betsy Sanders
2015 B ed.
SAP
Laura C. Trutoiu, Michael Geuss, Scott Kuhl, Betsy Sanders, Rafal Mantiuk
2015 B conf
QoMEX
Pavel Korshunov, Philippe Hanhart, Thomas Richter, Alessandro Artusi, Rafal Mantiuk, Touradj Ebrahimi
2014 conf
SIGGRAPH Talks
Gabriel Eilertsen, Jonas Unger, Robert Wanat, Rafal Mantiuk
2013 J jnl
J. Vis. Commun. Image Represent.
Josselin Petit, Rafal Mantiuk
2013 conf
SCCG
Kanita Karaduzovic Hadziabdic, Jasminka Hasic Telalovic, Rafal Mantiuk
2013 J jnl
Comput. Graph. Forum
Martin Cadík, Robert Herzog, Rafal Mantiuk, Radoslaw Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2013 conf
Human Vision and Electronic Imaging
Kil Joong Kim, Rafal Mantiuk, Kyoung Ho Lee
2013 B conf
SAP
Robert Wanat, Rafal Mantiuk
2013 conf
SIGGRAPH Talks
Gabriel Eilertsen, Jonas Unger, Robert Wanat, Rafal Mantiuk
2012 J jnl
Comput. Graph. Forum
Rafal Mantiuk, Anna M. Tomaszewska, Radoslaw Mantiuk
2012 conf
Eurographics (Tutorials)
Francesco Banterle, Alessandro Artusi, Tunç Ozan Aydin, Piotr Didyk, Elmar Eisemann, Diego Gutierrez, Rafal Mantiuk, Karol Myszkowski, Tobias Ritschel
2012 J jnl
ACM Trans. Graph.
Martin Cadík, Robert Herzog, Rafal Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2012 conf
TPCG
Robert Wanat, Josselin Petit, Rafal Mantiuk
2012 J jnl
Comput. Graph. Forum
Matthew Trentacoste, Rafal Mantiuk, Wolfgang Heidrich, Florian Dufrot
2011 ed.
Eurographics (Areas Papers)
Andy M. Day, Rafal Mantiuk, Erik Reinhard, Roberto Scopigno
2011 J jnl
Comput. Graph. Forum
Matthew Trentacoste, Rafal Mantiuk, Wolfgang Heidrich
2011 A* conf
ICCV
Cheryl Lau, Wolfgang Heidrich, Rafal Mantiuk
2011 conf
CIC
Allan G. Rempel, Rafal Mantiuk, Wolfgang Heidrich
2011 A* conf
CVPR
Mushfiqur Rouf, Rafal Mantiuk, Wolfgang Heidrich, Matthew Trentacoste, Cheryl Lau
2011 J jnl
ACM Trans. Graph.
Rafal Mantiuk, Kil Joong Kim, Allan G. Rempel, Wolfgang Heidrich
2011 conf
SIGGRAPH Asia Courses
Francesco Banterle, Alessandro Artusi, Tunç Ozan Aydin, Piotr Didyk, Elmar Eisemann, Diego Gutierrez, Rafal Mantiuk, Karol Myszkowski
2011 J jnl
IEEE Trans. Image Process.
Zicong Mai, Hassan Mansour, Rafal Mantiuk, Panos Nasiopoulos, Rabab Kreidieh Ward, Wolfgang Heidrich
2011 conf
APGV
Allan G. Rempel, Wolfgang Heidrich, Rafal Mantiuk
2010 J jnl
IEEE Trans. Medical Imaging
Kil Joong Kim, Bo Hyoung Kim, Rafal Mantiuk, Thomas Richter, Hyunna Lee, Heung Sik Kang, Jinwook Seo, Kyoung Ho Lee
2010 conf
Human Vision and Electronic Imaging
Kil Joong Kim, Rafal Mantiuk, Kyoung Ho Lee, Wolfgang Heidrich
2010 conf
Digital Photography
Matthew Trentacoste, Cheryl Lau, Mushfiqur Rouf, Rafal Mantiuk, Wolfgang Heidrich
2010 C conf
ISCAS
Zicong Mai, Hassan Mansour, Rafal Mantiuk, Panos Nasiopoulos, Rabab Kreidieh Ward, Wolfgang Heidrich
2010 conf
SIGGRAPH Posters
Matthew Trentacoste, Rafal Mantiuk, Wolfgang Heidrich
2010 conf
Human Vision and Electronic Imaging
Rafal Mantiuk, Scott J. Daly, Louis Kerofsky
2009 J jnl
Comput. Graph. Forum
Radoslaw Mantiuk, Rafal Mantiuk, Anna M. Tomaszewska, Wolfgang Heidrich
2009 conf
APGV
Rafal Mantiuk, Allan G. Rempel, Wolfgang Heidrich
2009 conf
APGV
Allan G. Rempel, Wolfgang Heidrich, Hiroe Li, Rafal Mantiuk
2009 J jnl
J. Graphics, GPU, & Game Tools
Rafal Mantiuk, Wolfgang Heidrich
2008 conf
APGV
Akiko Yoshida, Matthias Ihrke, Rafal Mantiuk, Hans-Peter Seidel
2008 J jnl
ACM Trans. Graph.
Rafal Mantiuk, Scott J. Daly, Louis Kerofsky
2008 J jnl
ACM Trans. Graph.
Tunç Ozan Aydin, Rafal Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2008 J jnl
Comput. Graph. Forum
Piotr Didyk, Rafal Mantiuk, Matthias Hein, Hans-Peter Seidel
2008 conf
Human Vision and Electronic Imaging
Tunç Ozan Aydin, Rafal Mantiuk, Hans-Peter Seidel
2008 book
Karol Myszkowski, Rafal Mantiuk, Grzegorz Krawczyk
2008 J jnl
Comput. Graph. Forum
Rafal Mantiuk, Hans-Peter Seidel
2008 conf
SCCG
Radoslaw Mantiuk, Dorota Zdrojewska, Anna M. Tomaszewska, Rafal Mantiuk, Karol Myszkowski
2007 Misc conf
PG
Grzegorz Krawczyk, Rafal Mantiuk, Dorota Zdrojewska, Hans-Peter Seidel
2007 conf
ICIP (1)
Rafal Mantiuk, Grzegorz Krawczyk, Karol Myszkowski, Hans-Peter Seidel
2007 conf
Human Vision and Electronic Imaging
Rafal Mantiuk, Grzegorz Krawczyk, Radoslaw Mantiuk, Hans-Peter Seidel
2006 J jnl
ACM Trans. Appl. Percept.
Rafal Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2006 J jnl
Comput. Graph. Forum
Akiko Yoshida, Rafal Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2006 J jnl
ACM Trans. Graph.
Rafal Mantiuk, Alexander Efremov, Karol Myszkowski, Hans-Peter Seidel
2006
Rafal Mantiuk
2006 conf
Human Vision and Electronic Imaging
Rafal Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2005 conf
APGV
Rafal Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2005 conf
Human Vision and Electronic Imaging
Rafal Mantiuk, Scott J. Daly, Karol Myszkowski, Hans-Peter Seidel
2004 conf
APGV
Grzegorz Krawczyk, Rafal Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2004 J jnl
ACM Trans. Graph.
Rafal Mantiuk, Grzegorz Krawczyk, Karol Myszkowski, Hans-Peter Seidel
2004 conf
SMC (3)
Rafal Mantiuk, Karol Myszkowski, Hans-Peter Seidel
2003 conf
SCCG
Rafal Mantiuk, Karol Myszkowski, Sumanta N. Pattanaik
redb/extractors/apk_extractors/apk_inconsistency_tests.py
← Index redb/extractors/apk_extractors/apk_inconsistency_tests.py python
import inspect
import re
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.apk_extractor import APKExtractor
from redb.models.dataclasses import APKInconsistencyTests

# Emulator detection indicator strings
EMULATOR_INDICATORS = {
    "generic", "sdk", "google_sdk", "Emulator",
    "goldfish", "ranchu", "Andy", "Genymotion",
    "BlueStacks", "nox", "ttVM_Hdragon",
}

# Root detection indicator strings
ROOT_INDICATORS = {
    "/system/app/Superuser.apk",
    "/system/xbin/su",
    "/system/bin/su",
    "com.noshufou.android.su",
    "com.thirdparty.superuser",
    "eu.chainfire.supersu",
    "com.koushikdutta.superuser",
    "com.topjohnwu.magisk",
}

# Standard DEX filename pattern
STANDARD_DEX_PATTERN = re.compile(r"^classes\d*\.dex$")


class APKInconsistencyTestsExtractor(APKExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False,
        apk=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, apk,
        )
        self.test_results = None
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.APK_INCONSISTENCY_TESTS.value

    def _test_zip_bomb(self):
        """Check if any ZIP entry has compression ratio > 100:1."""
        try:
            zf = self._get_zip_file()
            if not zf:
                return None
            with zf:
                for info in zf.infolist():
                    if info.compress_size > 0:
                        ratio = info.file_size / info.compress_size
                        if ratio > 100:
                            return True
            return False
        except Exception as e:
            self.log.warning(f"Error in zip bomb test: {e}")
            return None

    def _test_zip_duplicate_entries(self):
        """Check for duplicate filenames in ZIP directory."""
        try:
            zf = self._get_zip_file()
            if not zf:
                return None
            with zf:
                names = [info.filename for info in zf.infolist()]
                return len(names) != len(set(names))
        except Exception as e:
            self.log.warning(f"Error in duplicate entries test: {e}")
            return None

    def _test_zip_path_traversal(self):
        """Check for path traversal (../) in ZIP entry names."""
        try:
            for f in self._list_files():
                if ".." in f or f.startswith("/"):
                    return True
            return False
        except Exception as e:
            self.log.warning(f"Error in path traversal test: {e}")
            return None

    def _test_zip_suspicious_timestamps(self):
        """Check for timestamps at epoch (1980) or in the future."""
        try:
            zf = self._get_zip_file()
            if not zf:
                return None
            now = datetime.now()
            with zf:
                for info in zf.infolist():
                    try:
                        dt = datetime(*info.date_time)
                        if dt.year <= 1980 or dt > now:
                            return True
                    except (ValueError, TypeError):
                        continue
            return False
        except Exception as e:
            self.log.warning(f"Error in suspicious timestamps test: {e}")
            return None

    def _test_hidden_dex_files(self):
        """Check for DEX files not matching classes*.dex pattern."""
        try:
            for f in self._list_files():
                if f.endswith(".dex"):
                    basename = f.split("/")[-1]
                    if not STANDARD_DEX_PATTERN.match(basename):
                        return True
            return False
        except Exception as e:
            self.log.warning(f"Error in hidden DEX files test: {e}")
            return None

    def _test_manifest_component_mismatch(self):
        """Check for declared components that don't exist in DEX."""
        try:
            if not self._is_valid_apk():
                return None

            # Get all class names from DEX
            dex_classes = set()
            try:
                from androguard.core.dex import DEX
                for dex_data in (self.apk.get_all_dex() or []):
                    try:
                        d = DEX(dex_data)
                        for cls in d.get_classes():
                            name = cls.get_name()
                            if name:
                                # Convert "Lcom/example/Foo;" to "com.example.Foo"
                                dex_classes.add(
                                    name[1:-1].replace("/", ".") if name.startswith("L") else name
                                )
                    except Exception:
                        continue
            except Exception:
                return None

            if not dex_classes:
                return None

            # Check manifest components against DEX classes
            components = []
            try:
                components.extend(self.apk.get_activities() or [])
                components.extend(self.apk.get_services() or [])
                components.extend(self.apk.get_receivers() or [])
                components.extend(self.apk.get_providers() or [])
            except Exception:
                return None

            for comp in components:
                if comp and comp not in dex_classes:
                    # Component might use a shorthand; check with package prefix
                    package = self.apk.get_package() or ""
                    full_name = package + comp if comp.startswith(".") else comp
                    if full_name not in dex_classes:
                        return True

            return False
        except Exception as e:
            self.log.warning(f"Error in manifest component mismatch test: {e}")
            return None

    def _test_debuggable_release(self):
        """Check android:debuggable=true combined with a release signature."""
        try:
            if not self._is_valid_apk():
                return None

            is_debuggable = self.apk.get_attribute_value(
                "application", "debuggable"
            ) == "true"

            if not is_debuggable:
                return False

            # Check if it has a signing certificate (release builds have certs)
            try:
                certs = self.apk.get_certificates()
                if certs and len(certs) > 0:
                    return True
            except Exception:
                pass

            return False
        except Exception as e:
            self.log.warning(f"Error in debuggable release test: {e}")
            return None

    def _get_dex_strings(self):
        """Get all string constants from DEX files."""
        all_strings = set()
        try:
            from androguard.core.dex import DEX
            for dex_data in (self.apk.get_all_dex() or []):
                try:
                    d = DEX(dex_data)
                    for s in d.get_strings():
                        if s:
                            all_strings.add(s)
                except Exception:
                    continue
        except Exception:
            pass
        return all_strings

    def _test_emulator_detection_strings(self):
        """Check for emulator detection patterns in DEX strings."""
        try:
            if not self._is_valid_apk():
                return None

            dex_strings = self._get_dex_strings()
            for indicator in EMULATOR_INDICATORS:
                for s in dex_strings:
                    if indicator in s:
                        return True
            return False
        except Exception as e:
            self.log.warning(f"Error in emulator detection test: {e}")
            return None

    def _test_debugger_detection(self):
        """Check for debugger detection API calls in DEX."""
        try:
            if not self._is_valid_apk():
                return None

            dex_strings = self._get_dex_strings()
            debugger_patterns = {
                "isDebuggerConnected",
                "waitingForDebugger",
                "Debug.isDebuggerConnected",
            }
            for pattern in debugger_patterns:
                for s in dex_strings:
                    if pattern in s:
                        return True
            return False
        except Exception as e:
            self.log.warning(f"Error in debugger detection test: {e}")
            return None

    def _test_root_detection(self):
        """Check for root detection patterns in DEX."""
        try:
            if not self._is_valid_apk():
                return None

            dex_strings = self._get_dex_strings()
            for indicator in ROOT_INDICATORS:
                for s in dex_strings:
                    if indicator in s:
                        return True
            return False
        except Exception as e:
            self.log.warning(f"Error in root detection test: {e}")
            return None

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        self.test_results = APKInconsistencyTests(
            test_zip_bomb=self._test_zip_bomb(),
            test_zip_duplicate_entries=self._test_zip_duplicate_entries(),
            test_zip_path_traversal=self._test_zip_path_traversal(),
            test_zip_suspicious_timestamps=self._test_zip_suspicious_timestamps(),
            test_hidden_dex_files=self._test_hidden_dex_files(),
            test_manifest_component_mismatch=self._test_manifest_component_mismatch(),
            test_debuggable_release=self._test_debuggable_release(),
            test_emulator_detection_strings=self._test_emulator_detection_strings(),
            test_debugger_detection=self._test_debugger_detection(),
            test_root_detection=self._test_root_detection(),
        )
        return self.test_results

    def _bool_to_nullable(self, val):
        """Convert bool/None to ClickHouse Nullable(UInt8)."""
        if val is None:
            return None
        return int(val)

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.test_results:
                return None

            current_time = datetime.now(timezone.utc)
            t = self.test_results

            data = [[
                self.sha256,
                self._bool_to_nullable(t.test_zip_bomb),
                self._bool_to_nullable(t.test_zip_duplicate_entries),
                self._bool_to_nullable(t.test_zip_path_traversal),
                self._bool_to_nullable(t.test_zip_suspicious_timestamps),
                self._bool_to_nullable(t.test_hidden_dex_files),
                self._bool_to_nullable(t.test_manifest_component_mismatch),
                self._bool_to_nullable(t.test_debuggable_release),
                self._bool_to_nullable(t.test_emulator_detection_strings),
                self._bool_to_nullable(t.test_debugger_detection),
                self._bool_to_nullable(t.test_root_detection),
                current_time,
            ]]

            column_names = [
                'sha256',
                'test_zip_bomb', 'test_zip_duplicate_entries',
                'test_zip_path_traversal', 'test_zip_suspicious_timestamps',
                'test_hidden_dex_files', 'test_manifest_component_mismatch',
                'test_debuggable_release', 'test_emulator_detection_strings',
                'test_debugger_detection', 'test_root_detection',
                'analysis_date',
            ]

            column_type_names = [
                'FixedString(64)',
                'Nullable(UInt8)', 'Nullable(UInt8)',
                'Nullable(UInt8)', 'Nullable(UInt8)',
                'Nullable(UInt8)', 'Nullable(UInt8)',
                'Nullable(UInt8)', 'Nullable(UInt8)',
                'Nullable(UInt8)', 'Nullable(UInt8)',
                "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_apk_inconsistency_tests"