Wei Jiang

74 papers A* 7A 6B 5C 3Misc 1Journal 33Unranked 15
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Dependable Secur. Comput.
Alian Yu, Jian Kang, Wei Jiang, Dan Lin
2025 J jnl
Comput. Secur.
Ali A. Allami, Tyler Nicewarner, Ken Goss, Ashish Kundu, Wei Jiang, Dan Lin
2024 J jnl
CoRR
Tyler Nicewarner, Wei Jiang, Aniruddha Gokhale, Dan Lin
2023 conf
PerCom Workshops
Alian Yu, Jian Kang, Wei Jiang, Dan Lin
2023 conf
TPS-ISA
Tyler Nicewarner, Alian Yu, Wei Jiang, Dan Lin
2023 B conf
SSTD
Chaoquan Cai, Wei Jiang, Dan Lin
2022 A conf
AsiaCCS
Adam Bowers, Jize Du, Dan Lin, Wei Jiang
2022 A conf
ICDCS
Jian Kang, Alian Yu, Wei Jiang, Dan Lin
2021 J jnl
Concurr. Comput. Pract. Exp.
Ravi Santosh Arvapally, Xiaoqing Frank Liu, Fiona Fui-Hoon Nah, Wei Jiang
2021 J jnl
IEEE Trans. Dependable Secur. Comput.
Nitish M. Uplavikar, Bradley A. Malin, Wei Jiang
2020 Misc conf
ICISS
Nitish M. Uplavikar, Jaideep Vaidya, Dan Lin, Wei Jiang
2019 J jnl
CoRR
Wei Jiang, Adam Bowers, Dan Lin
2019 J jnl
IACR Cryptol. ePrint Arch.
Wei Jiang, Adam Bowers, Dan Lin
2018 J jnl
Pervasive Mob. Comput.
Jian Kang, Dan Lin, Wei Jiang, Elisa Bertino
2018 conf
CNS
Ali Ataeemh Allami, Mukesh K. Mohania, Wei Jiang
2018 J jnl
Comput. Secur.
Hu Chun, Kui Ren, Wei Jiang
2018 J jnl
Comput. Secur.
Dan Lin, Nicholas Hilbert, Christian Storer, Wei Jiang, Jianping Fan
2018 A conf
RTAS
Ying Zhang, Lingxiang Wang, Wei Jiang, Zhishan Guo
2017 A* conf
PerCom
Wei Jiang, Feng Li, Dan Lin, Elisa Bertino
2017 J jnl
Computing
Jingwei Li, Adam Bowers, Dan Lin, Peng Jiang, Wei Jiang
2017 C conf
SACMAT
Douglas Steiert, Dan Lin, Quincy Conduff, Wei Jiang
2017 J jnl
IACR Cryptol. ePrint Arch.
Nicholas Hilbert, Christian S. Jensen, Dan Lin, Wei Jiang
2016 J jnl
IEEE Trans. Dependable Secur. Comput.
Bharath K. Samanthula, Wei Jiang
2015 J jnl
Knowl. Inf. Syst.
Bharath K. Samanthula, Wei Jiang
2015 B conf
DBSec
Hu Chun, Kui Ren, Wei Jiang
2015 J jnl
Trans. Data Priv.
Bharath K. Samanthula, Lei Cen, Wei Jiang, Luo Si
2015 J jnl
IEEE Trans. Knowl. Data Eng.
Bharath K. Samanthula, Yousef Elmehdwi, Wei Jiang
2014 J jnl
CoRR
Bharath K. Samanthula, Wei Jiang, Elisa Bertino
2014 A conf
AsiaCCS
Hu Chun, Yousef Elmehdwi, Feng Li, Prabir Bhattacharya, Wei Jiang
2014 conf
ESORICS (1)
Bharath Kumar Samanthula, Wei Jiang, Elisa Bertino
2014 J jnl
IACR Cryptol. ePrint Arch.
Wei Jiang, Dan Lin, Feng Li, Elisa Bertino
2014 J jnl
Int. J. Parallel Emergent Distributed Syst.
Bharath K. Samanthula, Chun Hu, Wei Jiang, Bruce M. McMillin
2014 A* conf
ICDE
Yousef Elmehdwi, Bharath K. Samanthula, Wei Jiang
2014 J jnl
Adv. Comput.
Yousef Elmehdwi, Wei Jiang, Ali R. Hurson
2014 J jnl
ACM Trans. Intell. Syst. Technol.
Sashi Gurung, Dan Lin, Wei Jiang, Ali R. Hurson, Rui Zhang
2014 J jnl
CoRR
Bharath K. Samanthula, Yousef Elmehdwi, Wei Jiang
2013 conf
MDM (1)
Bharath K. Samanthula, Wei Jiang, Sanjay Madria
2013 A conf
AsiaCCS
Bharath K. Samanthula, Hu Chun, Wei Jiang
2013 conf
CTS
Feng Li, Nian Liu, Wei Jiang, Xiao-Qing Liu
2013 conf
IEEE CLOUD
Bharath K. Samanthula, Wei Jiang
2013 J jnl
IEEE Trans. Knowl. Data Eng.
Murat Kantarcioglu, Wei Jiang
2013 J jnl
CoRR
Yousef Elmehdwi, Bharath K. Samanthula, Wei Jiang
2012 conf
CTS
Ravi Santosh Arvapally, Xiaoqing (Frank) Liu, Wei Jiang
2012 conf
Critical Infrastructure Protection
Chun Hu, Wei Jiang, Bruce M. McMillin
2012 B conf
ASONAM
Bharath K. Samanthula, Wei Jiang
2012 J jnl
Trans. Data Priv.
Balamurugan Anandan, Chris Clifton, Wei Jiang, Mummoorthy Murugesan, Pedro Pastrana-Camacho, Luo Si
2011 conf
SocialCom/PASSAT
Wei Jiang, Bharath K. Samanthula
2011 B conf
DBSec
Wei Jiang, Bharath K. Samanthula
2011 J jnl
IEEE Trans. Dependable Secur. Comput.
Alberto Trombetta, Wei Jiang, Elisa Bertino, Lorenzo Bossi
2011 conf
CODASPY
Mummoorthy Murugesan, Wei Jiang, Ahmet Erhan Nergiz, Serkan Uzunbaz
2010 J jnl
VLDB J.
Mummoorthy Murugesan, Wei Jiang, Chris Clifton, Luo Si, Jaideep Vaidya
2010 conf
DASFAA (2)
Dan Lin, Sashi Gurung, Wei Jiang, Ali R. Hurson
2009 J jnl
Data Knowl. Eng.
Murat Kantarcioglu, Ali Inan, Wei Jiang, Bradley A. Malin
2009 ed.
PinKDD
Francesco Bonchi, Elena Ferrari, Wei Jiang, Bradley A. Malin
2009 conf
CSE (3)
Wei Jiang, Mummoorthy Murugesan, Chris Clifton, Luo Si
2008 J jnl
IEEE Trans. Inf. Technol. Biomed.
Murat Kantarcioglu, Wei Jiang, Ying Liu, Bradley A. Malin
2008 C conf
Privacy in Statistical Databases
Murat Kantarcioglu, Wei Jiang, Bradley A. Malin
2008 ch.
Privacy-Preserving Data Mining
Elisa Bertino, Dan Lin, Wei Jiang
2008 J jnl
Manuf. Serv. Oper. Manag.
Chris Clifton, Ananth V. Iyer, Richard Cho, Wei Jiang, Murat Kantarcioglu, Jaideep Vaidya
2008
Wei Jiang
2008 ch.
Next Generation of Data Mining
Chris Clifton, Wei Jiang, Mummoorthy Murugesan, Mehmet Ercan Nergiz
2008 J jnl
SIGKDD Explor.
Francesco Bonchi, Elena Ferrari, Wei Jiang, Bradley A. Malin
2008 A* conf
ICDE
Alberto Trombetta, Wei Jiang, Elisa Bertino, Lorenzo Bossi
2008 A* conf
ICDE
Wei Jiang, Mummoorthy Murugesan, Chris Clifton, Luo Si
2008 J jnl
Data Knowl. Eng.
Wei Jiang, Chris Clifton, Murat Kantarcioglu
2007 A conf
SDM
Wei Jiang, Chris Clifton
2007 C conf
DEXA
Mingwu Zhang, Wei Jiang, Chris Clifton, Sunil Prabhakar
2007 A* conf
SIGIR
Wei Jiang, Luo Si, Jing Li
2007 conf
ICDE Workshops
Mummoorthy Murugesan, Wei Jiang
2006 J jnl
VLDB J.
Wei Jiang, Chris Clifton
2006 A* conf
ICDM
Wei Jiang, Maurizio Atzori
2006 conf
ICDM Workshops
Wei Jiang, Chris Clifton
2005 A* conf
ICDE
Wei Jiang, Jaideep Vaidya, Zahir Balaporia, Chris Clifton, Brett Banich
2005 B conf
DBSec
Wei Jiang, Chris Clifton
redb/extractors/pe_extractors/pe_resources.py
← Index redb/extractors/pe_extractors/pe_resources.py python
from hashlib import sha256
import inspect
from datetime import datetime, timezone
from typing import Any

import magic
from magika import Magika
import pefile
from pefile import UnicodeStringWrapperPostProcessor

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEResource


class PEResourceExtractor(PEExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        self.elastic_index = self.index_prefix + "-pe_resources"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_resources(self):
        """
        Returns:
        resources: a list of dictionaries, one per each resources type found.
                    each dictionary the key represents the name of the content,
                    which is the value itself.
                    Empty list if no resources present.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        resources_list = []
        try:
            if hasattr(self.pe, "DIRECTORY_ENTRY_RESOURCE"):
                for resource_type in self.pe.DIRECTORY_ENTRY_RESOURCE.entries:
                    # if resource_type.name is not None:
                    #     name = resource_type.name
                    # else:
                    #     name = pefile.RESOURCE_TYPE.get(resource_type.struct.Id)
                    # if not name:
                    #     name = resource_type.struct.Id
                    name = (
                        resource_type.name
                        if resource_type.name is not None
                        else pefile.RESOURCE_TYPE.get(resource_type.struct.Id)
                    )
                    if isinstance(name, UnicodeStringWrapperPostProcessor):
                        name = name.decode()
                    try:
                        if hasattr(resource_type, "directory"):
                            for resource_id in resource_type.directory.entries:
                                if hasattr(resource_id, "directory"):
                                    for resource_lang in resource_id.directory.entries:
                                        rsrc_data = self.pe.get_data(
                                            resource_lang.data.struct.OffsetToData,
                                            resource_lang.data.struct.Size,
                                        )
                                        file_type = magic.from_buffer(rsrc_data)
                                        magik = Magika().identify_bytes(rsrc_data).output.label

                                        rsrc_entropy = (
                                            "%.2f"
                                            % pefile.SectionStructure.entropy_H(
                                                self.pe, rsrc_data
                                            )
                                        )
                                        rsrc_sha256 = sha256(rsrc_data).hexdigest()
                                        lang = pefile.LANG.get(
                                            resource_lang.data.lang, "*unknown*"
                                        )
                                        sublang = pefile.get_sublang_name_for_lang(
                                            resource_lang.data.lang,
                                            resource_lang.data.sublang,
                                        )
                                        pe_resource = PEResource(
                                            _id=rsrc_sha256,
                                            resource_type=name,
                                            resource_entropy=rsrc_entropy,
                                            resource_sha256=rsrc_sha256,
                                            resource_filetype=file_type,
                                            resource_magika=magik,
                                            resource_language=lang,
                                            resource_rva=resource_lang.data.struct.OffsetToData,
                                            resource_size=resource_lang.data.struct.Size,
                                            resource_sub_lang=sublang,
                                        )
                                        resources_list.append(pe_resource)
                    except Exception as e:
                        self.log.warning(
                            f"Continue after Error in {self.hash.sha256}: {resource_type.name} "
                            f"Exception: {e}",
                            stack_info=True,
                        )
                        # resources_list.append({f"{e} - {resource_type.name}"})
                        continue
        except Exception as e:
            self.log.exception(
                f"Extract exports error {self.hash.sha256} Exception: {e}"
            )
        self.log.debug(f"Resource list {resources_list}")
        return resources_list

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            resources = self._extract_resources()
            # self.export_to_elastic(resources)  # Let the exporters handle this
            return resources
        except Exception as e:
            self.log.error(f"Extract resources error {self.hash.sha256} Exception: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            resources = self.extract()
            if resources is None:
                return None
            
            data = []
            current_time = datetime.now(timezone.utc)
            
            for resource in resources:
                data.append([
                    self.sha256,                    # sha256
                    self.md5,                       # md5
                    self.sha1,                      # sha1
                    resource.resource_type,         # resource_type
                    resource.resource_entropy,      # resource_entropy
                    resource.resource_sha256,       # resource_sha256
                    resource.resource_filetype,     # resource_filetype
                    resource.resource_magika,       # resource_magika
                    resource.resource_language,     # resource_language
                    resource.resource_sub_lang,     # resource_sub_lang
                    resource.resource_size,         # resource_size
                    resource.resource_rva,          # resource_rva
                    current_time                    # analysis_date
                ])
            
            column_names = [
                'sha256', 'md5', 'sha1', 'resource_type', 'resource_entropy',
                'resource_sha256', 'resource_filetype', 'resource_magika',
                'resource_language', 'resource_sub_lang', 'resource_size',
                'resource_rva', 'analysis_date'
            ]
            
            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'LowCardinality(Nullable(String))', 'Float64',
                'FixedString(64)', 'LowCardinality(Nullable(String))', 'LowCardinality(Nullable(String))',
                'LowCardinality(Nullable(String))', 'LowCardinality(Nullable(String))', 'UInt64',
                'UInt64', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

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