James G. Nagy

70 papers B 1C 2Journal 60Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
SIAM J. Matrix Anal. Appl.
James G. Nagy, Lucas Onisk
2025 J jnl
SIAM J. Matrix Anal. Appl.
Ariana N. Brown, Malena Sabaté Landman, James G. Nagy
2025 J jnl
CoRR
Chelsea Drum, James G. Nagy, Lucas Onisk
2025 J jnl
CoRR
Malena Sabaté Landman, Ariana N. Brown, Julianne Chung, James G. Nagy
2025 J jnl
Numer. Algorithms
Malena Sabaté Landman, Ariana N. Brown, Julianne Chung, James G. Nagy
2025 J jnl
SIAM J. Sci. Comput.
Davide Evangelista, Elena Loli Piccolomini, Elena Morotti, James G. Nagy
2024 J jnl
CoRR
Ariana N. Brown, Malena Sabaté Landman, James G. Nagy
2024 J jnl
CoRR
Ariana N. Brown, Julianne Chung, James G. Nagy, Malena Sabaté Landman
2024 J jnl
CoRR
James G. Nagy, Lucas Onisk
2023 J jnl
J. Imaging
Davide Evangelista, Elena Morotti, Elena Loli Piccolomini, James G. Nagy
2023 J jnl
CoRR
Davide Evangelista, Elena Morotti, Elena Loli Piccolomini, James G. Nagy
2023 J jnl
Numer. Algorithms
Chang Meng, James G. Nagy
2022 J jnl
SIAM J. Matrix Anal. Appl.
Difeng Cai, James G. Nagy, Yuanzhe Xi
2022 J jnl
CoRR
Davide Evangelista, James G. Nagy, Elena Morotti, Elena Loli Piccolomini
2021 J jnl
CoRR
Difeng Cai, James G. Nagy, Yuanzhe Xi
2021 J jnl
SIAM J. Sci. Comput.
Silvia Gazzola, James G. Nagy, Malena Sabate Landman
2021 J jnl
SIAM J. Imaging Sci.
Chao Wang, Min Tao, James G. Nagy, Yifei Lou
2021 J jnl
CoRR
Chao Wang, Min Tao, Chen-Nee Chuah, James G. Nagy, Yifei Lou
2020 J jnl
CoRR
Xiaotong Chen, James L. Herring, James G. Nagy, Yuanzhe Xi, Bo Yu
2020 J jnl
CoRR
Kelvin K. Kan, James G. Nagy, Lars Ruthotto
2020 J jnl
IEEE Trans. Computational Imaging
James L. Herring, James G. Nagy, Lars Ruthotto
2020 J jnl
SIAM J. Matrix Anal. Appl.
Silvia Gazzola, Chang Meng, James G. Nagy
2020 J jnl
CoRR
Chao Wang, Min Tao, James G. Nagy, Yifei Lou
2020 J jnl
Bioinform.
Blair J. Rossetti, Steven A. Wilbert, Jessica L. Mark Welch, Gary G. Borisy, James G. Nagy
2020 J jnl
Numer. Linear Algebra Appl.
Zixuan Chen, James G. Nagy, Yuanzhe Xi, Bo Yu
2019 J jnl
CoRR
Silvia Gazzola, Misha E. Kilmer, James G. Nagy, Oguz Semerci, Eric L. Miller
2019 J jnl
Numer. Algorithms
Silvia Gazzola, Per Christian Hansen, James G. Nagy
2019 J jnl
CoRR
Silvia Gazzola, Chang Meng, James G. Nagy
2019 J jnl
SIAM J. Sci. Comput.
Yunyi Hu, Martin S. Andersen, James G. Nagy
2018 J jnl
Numer. Linear Algebra Appl.
Jianjun Zhang, James G. Nagy
2018 conf
IWBI
Koen Michielsen, Christian Fedon, James G. Nagy, Ioannis Sechopoulos
2018 conf
AIPR
Huamei Chen, John M. Irvine, Zhonghai Wang, Genshe Chen, Erik Blasch, James G. Nagy
2018 J jnl
Numer. Algorithms
Marie Kubínová, James G. Nagy
2018 J jnl
SIAM J. Matrix Anal. Appl.
Clarissa C. Garvey, Chang Meng, James G. Nagy
2017 J jnl
CoRR
James L. Herring, James G. Nagy, Lars Ruthotto
2016 ch.
Context-Enhanced Information Fusion
Erik Blasch, Riad I. Hammoud, Haibin Ling, Dan Shen, James G. Nagy, Genshe Chen
2016 B conf
ILP
Marcin Malec, Tushar Khot, James G. Nagy, Erik Blask, Sriraam Natarajan
2015 J jnl
SIAM J. Sci. Comput.
Sebastian Berisha, James G. Nagy, Robert J. Plemmons
2015 J jnl
Numer. Linear Algebra Appl.
James G. Nagy, Michael K. Ng
2015 J jnl
Numer. Linear Algebra Appl.
Sebastian Berisha, James G. Nagy, Robert J. Plemmons
2015 ch.
Handbook of Mathematical Methods in Imaging
Julianne Chung, Sarah Knepper, James G. Nagy
2015 C conf
FUSION
Erik Blasch, Haibin Ling, Dan Shen, Genshe Chen, Riad I. Hammoud, Arslan Basharat, Roddy Collins, Alex Aved, James G. Nagy
2014 J jnl
Numer. Algorithms
Anastasia Cornelio, Elena Loli Piccolomini, James G. Nagy
2014 C conf
FUSION
Erik Blasch, James G. Nagy, Alex Aved, Eric K. Jones, William M. Pottenger, Arslan Basharat, Anthony Hoogs, Michael Schneider, Riad I. Hammoud, Genshe Chen, Dan Shen, Haibin Ling
2014 J jnl
SIAM J. Sci. Comput.
Silvia Gazzola, James G. Nagy
2013 J jnl
SIAM J. Sci. Comput.
Veronica Mejia Bustamante, James G. Nagy, Steve S. J. Feng, Ioannis Sechopoulos
2013 J jnl
SIAM J. Sci. Comput.
Qing Chu, Stuart Jefferies, James G. Nagy
2012 J jnl
J. Comput. Appl. Math.
Ying-Wai (Daniel) Fan, James G. Nagy
2011 J jnl
Int. J. Biomed. Imaging
Yangbo Ye, Robert J. Plemmons, James G. Nagy, Qinian Jin
2011 J jnl
Adv. Comput. Math.
Johnathan M. Bardsley, Sarah Knepper, James G. Nagy
2010 J jnl
SIAM J. Sci. Comput.
Julianne Chung, James G. Nagy
2010 J jnl
SIAM J. Imaging Sci.
Julianne Chung, James G. Nagy, Ioannis Sechopoulos
2010 J jnl
ACM Trans. Math. Softw.
Piotr Wendykier, James G. Nagy
2008 conf
ICCS (1)
Piotr Wendykier, James G. Nagy
2007 J jnl
Numer. Linear Algebra Appl.
Misha Elena Kilmer, James G. Nagy
2007 conf
IbPRIA (1)
Martin Welk, James G. Nagy
2006 J jnl
SIAM J. Matrix Anal. Appl.
Johnathan M. Bardsley, James G. Nagy
2006 J jnl
IEEE Trans. Image Process.
James G. Nagy, Misha Elena Kilmer
2004 J jnl
Numer. Algorithms
James G. Nagy, Katrina Palmer, Lisa Perrone
2003 J jnl
Comput. Sci. Eng.
James G. Nagy, Dianne P. O'Leary
2003 J jnl
SIAM J. Matrix Anal. Appl.
James G. Nagy, Michael K. Ng, Lisa Perrone
2003 J jnl
Comput. Sci. Eng.
James G. Nagy, Dianne P. O'Leary
2003 J jnl
Comput. Sci. Eng.
Dianne P. O'Leary, Yalin Evren Sagduyu, James G. Nagy
2000 J jnl
SIAM J. Matrix Anal. Appl.
Julie Kamm, James G. Nagy
1998 J jnl
SIAM J. Sci. Comput.
James G. Nagy, Dianne P. O'Leary
1996 J jnl
IEEE Trans. Image Process.
James G. Nagy, Robert J. Plemmons, Todd C. Torgersen
1996 conf
WNAA
Julie Kamm, James G. Nagy
1994 J jnl
SIAM J. Matrix Anal. Appl.
Raymond H. Chan, James G. Nagy, Robert J. Plemmons
1994 J jnl
Numer. Algorithms
Martin Hanke, James G. Nagy
1993 J jnl
SIAM J. Sci. Comput.
James G. Nagy
redb/extractors/pe_extractors/pe_inconsistency_tests.py
← Index redb/extractors/pe_extractors/pe_inconsistency_tests.py python
import inspect
from redb.ext.spoof_check import (
    Result,
    checksum_test,
    duplicate_test,
    import_count_test,
    linker_test,
)
from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import (
    DotNetInconsistencyTests,
    PEInconsistencyTests,
)
from datetime import datetime, timezone
from typing import Any


class PEInconstistencyTestsExtractor(PEExtractor):
    """Collection of functions to perform features inconsistency tests

    A Test where the result is True means that there is an inconsistency.
    At the moments it runs a series of inconsistency tests on PE metadata from
    - spoof_check
    - pescanner
    - dotnetfile
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
        dotnet=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        self.dotnet = dotnet if dotnet else None
        self.pe_inconsistency_tests = None
        self.dotnet_inconsistency_tests = None
        self.elastic_index = self.index_prefix + "-pe_inconsistency_tests"

    def tag(self):
        return [Tag.PE_INCONSISTENCY_TESTS.value, Tag.DOTNET_INCONSISTENCY_TESTS.value]

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        tests_performed = False

        # Handle PE rich header tests
        try:
            rich_header = self.pe.parse_rich_header()
            if rich_header:
                self.pe_inconsistency_tests = PEInconsistencyTests(
                    test_rich_header_checksum=checksum_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_duplicate=duplicate_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_linker=linker_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_import_count=import_count_test(self.pe, rich_header) == Result.INVALID,
                )
                tests_performed = True
            else:
                self.pe_inconsistency_tests = PEInconsistencyTests(
                    test_rich_header_checksum=None,
                    test_rich_header_duplicate=None,
                    test_rich_header_linker=None,
                    test_rich_header_import_count=None,
                )
        except Exception as e:
            self.log.error(f"Error processing rich header tests for {self.hash.sha256}: {e}")
            self.pe_inconsistency_tests = None

            # self.export_to_elastic([self.pe_inconsistency_tests])

        # Handle .NET tests
        try:
            if self._check_dotnet():
                if not self.dotnet:
                    self.dotnet, self.error = self._generate_dotnetfile_object()
                if self.error:
                    self.log.error(f"Error generating .NET object {self.hash.sha256}: {self.error}")
                self.dotnet_inconsistency_tests = DotNetInconsistencyTests(
                    test_dotnet_data_dir_hidden=self.dotnet.AntiMetadataAnalysis.is_dotnet_data_directory_hidden,
                    test_dotnet_extra_data=self.dotnet.AntiMetadataAnalysis.has_metadata_table_extra_data,
                    test_dotnet_fake_types=self.dotnet.AntiMetadataAnalysis.has_self_referenced_typeref_entries,
                    test_dotnet_invalid_type_ref=self.dotnet.AntiMetadataAnalysis.has_invalid_typeref_entries,
                    test_dotnet_fake_datastreams=self.dotnet.AntiMetadataAnalysis.has_fake_data_streams,
                    test_dotnet_extra_module_table=self.dotnet.AntiMetadataAnalysis.module_table_has_multiple_rows,
                    test_dotnet_extra_assembly_table=self.dotnet.AntiMetadataAnalysis.assembly_table_has_multiple_rows,
                    test_dotnet_invalid_strings_stream=self.dotnet.AntiMetadataAnalysis.has_invalid_strings_stream_entries,
                    test_dotnet_streams_mixed_case=self.dotnet.AntiMetadataAnalysis.has_mixed_case_stream_names,
                    test_dotnet_method_def_invalid_table=self.dotnet.AntiMetadataAnalysis.has_invalid_methoddef_entries,
                    test_dotnet_max_len_exceeding_strings=self.dotnet.AntiMetadataAnalysis.has_max_len_exceeding_strings,
                )
                tests_performed = True
        except Exception as e:
            self.log.error(f"Error processing .NET tests for {self.hash.sha256}: {e}")
            self.dotnet_inconsistency_tests = None

        # self.export_to_elastic([self.dotnet_inconsistency_tests])

        # If no tests were performed, return False to skip database insertion
        if not tests_performed:
            self.log.info("No inconsistency tests were performed.")
            return False

        return True

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return [self.pe_inconsistency_tests, self.dotnet_inconsistency_tests]
        elif exporter_type == "ClickHouseExporter":
            current_time = datetime.now(timezone.utc)

            # For PE tests: if no rich header (all True), store NULL instead
            has_rich_header = any([
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_checksum'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_duplicate'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_linker'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_import_count')
            ])
            
            pe_tests = [
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_checksum,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_duplicate,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_linker,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_import_count,
            ]
            
            # For .NET tests: if not a .NET file, store NULL instead of False
            dotnet_tests = [
                self.dotnet_inconsistency_tests.test_dotnet_data_dir_hidden if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_data if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_fake_types if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_invalid_type_ref if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_fake_datastreams if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_module_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_assembly_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_invalid_strings_stream if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_streams_mixed_case if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_method_def_invalid_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_max_len_exceeding_strings if self.dotnet_inconsistency_tests else None,
            ]
            
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                *pe_tests,
                *dotnet_tests,
                current_time
            ]]

            column_names = [
                'sha256', 'md5', 'sha1',
                'test_rich_header_checksum', 'test_rich_header_duplicate', 'test_rich_header_linker', 'test_rich_header_import_count',
                'test_dotnet_data_dir_hidden', 'test_dotnet_extra_data',
                'test_dotnet_fake_types', 'test_dotnet_invalid_type_ref',
                'test_dotnet_fake_datastreams', 'test_dotnet_extra_module_table',
                'test_dotnet_extra_assembly_table', 'test_dotnet_invalid_strings_stream',
                'test_dotnet_streams_mixed_case', 'test_dotnet_method_def_invalid_table',
                'test_dotnet_max_len_exceeding_strings', 'analysis_date'
            ]
            
            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'DateTime64(3, \'UTC\')'
            ]

            if not data:
                return None

            return (data, column_names, column_type_names)

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