Weimin Ju

42 papers C 4Journal 32Unranked 6
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Ziyi Suo, Yingcheng Lu, Lijian Shi, Bin Zou, Qing Wang, Ling Li, Jun Tang, Weimin Ju, Manchun Li
2025 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Zhihui Liu, Guang Zheng, Weimin Ju, Yubo Wang, Zengxin Yun
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Lifeng Wang, Yingcheng Lu, Mingxiu Wang, Hang Lv, Jun Tang, Qingjun Song, Yuntao Wang, Weimin Ju
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xuying Huang, Weimin Ju, Zhanghua Xu, Jing Li
2024 J jnl
Geo spatial Inf. Sci.
Ziyi Suo, Yingcheng Lu, Jianqiang Liu, Jing Ding, Qing Wang, Ling Li, Weimin Ju, Manchun Li
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Meihong Fang, Weimin Ju, Jing M. Chen, Weiliang Fan, Wei He, Feng Qiu, Xiangyan Hu, Jing Li
2023 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Nuo Cheng, Yanlian Zhou, Wei He, Weimin Ju, Tingting Zhu, Yibo Liu, Ping Song, Wenjun Bi, Xiaoyu Zhang, Xiaonan Wei
2023 J jnl
Remote. Sens.
Qiaoli Wu, Shaoyuan Chen, Yulong Zhang, Conghe Song, Weimin Ju, Li Wang, Jie Jiang
2023 J jnl
Remote. Sens.
Xiuli Xing, Mousong Wu, Marko Scholze, Thomas Kaminski, Michael Vossbeck, Zhengyao Lu, Songhan Wang, Wei He, Weimin Ju, Fei Jiang
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Mingzhu Xu, Ronggao Liu, Jing M. Chen, Yang Liu, Aleksandra Wolanin, Holly Croft, Liming He, Rong Shang, Weimin Ju, Yongguang Zhang, Yuhong He, Rong Wang
2022 J jnl
Remote. Sens.
Xuying Huang, Qi Zhang, Lu Hu, Tingting Zhu, Xin Zhou, Yiwei Zhang, Zhanghua Xu, Weimin Ju
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xiaobo Zhu, Yingcheng Lu, Jianqiang Liu, Weimin Ju, Jing Ding, Manchun Li, Ziyi Suo, Junnan Jiao, Lifeng Wang
2021 J jnl
Remote. Sens.
Xuying Huang, Zhanghua Xu, Xu Yang, Jingming Shi, Xinyu Hu, Weimin Ju
2021 J jnl
Remote. Sens.
Xiaozhen Xiong, Jane Liu, Liangfu Chen, Weimin Ju, Fred Moshary
2020 J jnl
Remote. Sens.
Yanlian Zhou, Xiaocui Wu, Weimin Ju, Leiming Zhang, Zhi Chen, Wei He, Yibo Liu, Yang Shen
2020 J jnl
Remote. Sens.
Yun Gao, Songhan Wang, Kaiyu Guan, Aleksandra Wolanin, Liangzhi You, Weimin Ju, Yongguang Zhang
2020 J jnl
Remote. Sens.
Bingxiao Wu, Guang Zheng, Weimin Ju
2019 C conf
IGARSS
Wei He, Fei Jiang, Weimin Ju, Tu Ngoc Nguyen, Meihong Fang, Qiaoning He, Chunhua Zhang
2019 J jnl
Remote. Sens.
Kuo Zeng, Guang Zheng, Lixia Ma, Weimin Ju, Yong Pang
2019 J jnl
Remote. Sens.
Feng Qiu, Jing M. Chen, Holly Croft, Jing Li, Qian Zhang, Yongqin Zhang, Weimin Ju
2018 J jnl
IEEE Trans. Geosci. Remote. Sens.
Feng Qiu, Jing M. Chen, Weimin Ju, Jun Wang, Qian Zhang, Meihong Fang
2017 J jnl
Remote. Sens.
Blowman J. Wang, Weimin Ju
2017 J jnl
Remote. Sens.
Blowman J. Wang, Jing M. Chen, Weimin Ju, Feng Qiu, Qian Zhang, Meihong Fang, Fenge Chen
2017 J jnl
IEEE Trans. Geosci. Remote. Sens.
Lun Gao, Wenfeng Zhan, Fan Huang, Jinling Quan, Xiaoman Lu, Fei Wang, Weimin Ju, Ji Zhou
2017 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yanlian Zhou, Thomas Hilker, Weimin Ju, Nicholas C. Coops, Thomas Andrew Black, Jing M. Chen, Xiaocui Wu
2016 C conf
IGARSS
Qian Zhang, Weimin Ju, Jing M. Chen, Fengting Yang
2015 J jnl
Remote. Sens.
Qian Zhang, Weimin Ju, Jing M. Chen, Huimin Wang, Fengting Yang, Weiliang Fan, Qing Huang, Ting Zheng, Yongkang Feng, Yanlian Zhou, Mingzhu He, Feng Qiu, Xiaojie Wang, Jun Wang, Fangmin Zhang, Shuren Chou
2015 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Yanlian Zhou, Bailing Xing, Weimin Ju
2015 J jnl
Remote. Sens.
Xiaocui Wu, Weimin Ju, Yanlian Zhou, Mingzhu He, Beverly E. Law, Thomas Andrew Black, Hank A. Margolis, Alessandro Cescatti, Lianhong Gu, Leonardo Montagnani, Asko Noormets, Timothy J. Griffis, Kim Pilegaard, Andrej Varlagin, Riccardo Valentini, Peter D. Blanken, Shaoqiang Wang, Huimin Wang, Shijie Han, Junhua Yan, Yingnian Li, Bingbing Zhou, Yibo Liu
2014 J jnl
IEEE Trans. Geosci. Remote. Sens.
Weiliang Fan, Jing M. Chen, Weimin Ju, Gaolong Zhu
2014 J jnl
IEEE Trans. Geosci. Remote. Sens.
Weiliang Fan, Jing M. Chen, Weimin Ju, Nadine Nesbitt
2012 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yang Liu, Ronggao Liu, Jing M. Chen, Weimin Ju
2012 J jnl
IEEE Trans. Geosci. Remote. Sens.
Gaolong Zhu, Weimin Ju, Jing M. Chen, Peng Gong, Bailing Xing, Jingfang Zhu
2012 conf
Geoinformatics
Jiahui Xu, Weimin Ju, Zhongwen Hu
2010 conf
Geoinformatics
Gaolong Zhu, Weimin Ju, Jing M. Chen, Yanlian Zhou, Xianfeng Li, Xiaochan Xu
2010 conf
Geoinformatics
Jingfang Zhu, Weimin Ju, Ying Ren
2010 J jnl
Environ. Model. Softw.
Jun Wang, Jingming Chen, Weimin Ju, Manchun Li
2010 conf
Geoinformatics
Yibo Liu, Qingrui Chang, Jing Liu, Weimin Ju, Gaolong Zhu, Zhengsong Duan
2010 conf
Geoinformatics
Bailing Xing, Weimin Ju, Gaolong Zhu, Xianfeng Li, Yibo Liu, Yanlian Zhou
2010 conf
Geoinformatics
Mingzhu He, Yanlian Zhou, Gaohuan Liu, Weimin Ju, Xianfeng Li, Gaolong Zhu
2007 C conf
IGARSS
Xinfang Chen, Jing M. Chen, Weimin Ju, Liliang Ren
2005 C conf
IGARSS
Xianfeng Feng, Gaohuan Liu, Wenzuo Zhou, Jingming Chen, Mingzhen Chen, Weimin Ju, Jane Liu, Rui Sun
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"