Wei Chen

44 papers A* 7A 1B 5C 3Journal 6Unranked 22
YearRankTypeTitle / Venue / Authors
2024 A* conf
IJCAI
Weijun Chen, Shun Li, Xipu Yu, Heyuan Wang, Wei Chen, Tengjiao Wang
2022 A* conf
IJCAI
Heyuan Wang, Tengjiao Wang, Shun Li, Jiayi Zheng, Shijie Guan, Wei Chen
2022 A* conf
IJCAI
Heyuan Wang, Tengjiao Wang, Shun Li, Shijie Guan, Jiayi Zheng, Wei Chen
2020 conf
NLPCC (1)
Dechuan Yang, Qiyu Wu, Wei Chen, Tengjiao Wang, Zhen Qiu, Di Liu, Yingbao Cui
2019 A* conf
ICDE
Tengjiao Wang, Binyang Li, Wei Chen, Yuxiao Zhang, Ying Han, Jinzhong Niu, Kam-Fai Wong
2019 conf
APWeb/WAIM (2)
Zhenhui Xu, Qiang Li, Wei Chen, Yingbao Cui, Zhen Qiu, Tengjiao Wang
2019 conf
APWeb/WAIM (2)
Longlong Xu, Xiansheng Chen, Yue Xu, Wei Chen, Tengjiao Wang
2019 A* conf
AAAI
Yuxin Chen, Tengjiao Wang, Wei Chen, Qiang Li, Zhen Qiu
2018 conf
SemEval@NAACL-HLT
Jing Chen, Dechuan Yang, Xilian Li, Wei Chen, Tengjiao Wang
2017 conf
BigDataSecurity/HPSC/IDS
Xiao Zhang, Xiaorong Wang, Wei Chen, Jie Tao, Weijing Huang, Tengjiao Wang
2017 conf
DASFAA (1)
Weijing Huang, Tengjiao Wang, Wei Chen, Yazhou Wang
2017 conf
APWeb/WAIM (2)
Longlong Xu, Wutao Lin, Xiaorong Wang, Zhenhui Xu, Wei Chen, Tengjiao Wang
2017 B conf
ICTAI
Weijing Huang, Wei Chen, Tengjiao Wang, Shibo Tao
2017 conf
WWW (Companion Volume)
Shibo Tao, Xiaorong Wang, Weijing Huang, Wei Chen, Tengjiao Wang, Kai Lei
2017 A* conf
IJCAI
Wei Chen, Xiao Zhang, Tengjiao Wang, Bishan Yang, Yi Li
2017 conf
BigDataSecurity/HPSC/IDS
Linqing Yang, Shun Li, Wei Chen, Kai Lei, Tengjiao Wang
2017 conf
APWeb/WAIM (2)
Xilian Li, Wei Chen, Tengjiao Wang, Weijing Huang
2016 conf
APWeb (1)
Weijing Huang, Wei Chen, Lamei Zhang, Tengjiao Wang
2016 conf
PAKDD (2)
Yuxiao Zhang, Xiaorong Wang, Bingyang Li, Wei Chen, Tengjiao Wang, Kai Lei
2016 conf
PAKDD (2)
Biwei Liang, Tengjiao Wang, Shun Li, Wei Chen, Hongyan Li, Kai Lei
2016 J jnl
CoRR
Lei Gai, Wei Chen, Tengjiao Wang
2016 conf
WAIM (2)
Xinyu Huang, Tengjiao Wang, Shun Li, Wei Chen
2016 conf
SemEval@NAACL-HLT
Wan Wei, Xiao Zhang, Xuqin Liu, Wei Chen, Tengjiao Wang
2015 J jnl
CoRR
Lei Gai, Wei Chen, Tengjiao Wang
2015 A conf
CIKM
Ruhui Wang, Weijing Huang, Wei Chen, Tengjiao Wang, Kai Lei
2015 conf
WAIM
Changhe Qiu, Wei Chen, Tengjiao Wang, Kai Lei
2015 conf
WAIM
Zhichao Xu, Wei Chen, Lei Gai, Tengjiao Wang
2014 conf
DASFAA (1)
Gaoyan Ou, Wei Chen, Binyang Li, Tengjiao Wang, Dongqing Yang, Kam-Fai Wong
2014 A* conf
EMNLP
Gaoyan Ou, Wei Chen, Tengjiao Wang, Zhongyu Wei, Binyang Li, Dongqing Yang, Kam-Fai Wong
2014 conf
WAIM
Peng Liu, Wei Chen, Gaoyan Ou, Tengjiao Wang, Dongqing Yang, Kai Lei
2014 C conf
APWeb
Jiayi Wu, Wei Chen, Gaoyan Ou, Tengjiao Wang, Dongqing Yang, Kai Lei
2014 C conf
APWeb
Lei Gai, Wei Chen, Zhichao Xu, Changhe Qiu, Tengjiao Wang
2014 J jnl
CoRR
Lei Gai, Wei Chen, Zhichao Xu, Changhe Qiu, Tengjiao Wang
2013 conf
WAIM
Gaoyan Ou, Wei Chen, Peng Liu, Tengjiao Wang, Dongqing Yang, Kai Lei, Yueqin Liu
2013 B conf
IJCNN
Wei Chen, Tengjiao Wang, Dongqing Yang, Kai Lei, Yueqin Liu
2011 C conf
APWeb
Wei Chen, Lang Zong, Weijing Huang, Gaoyan Ou, Yue Wang, Dongqing Yang
2011 conf
WAIM
Yue Wang, Weijing Huang, Wei Chen, Tengjiao Wang, Dongqing Yang
2011 J jnl
Expert Syst. Appl.
Wei Chen, Shaohua Tan, Dongqing Yang
2010 conf
ICTAI (1)
Wei Chen, Shaohua Tan
2009 B conf
FUZZ-IEEE
Wei Chen, Shaohua Tan
2009 B conf
FUZZ-IEEE
Wei Chen, Shaohua Tan
2009 J jnl
J. Comput. Appl. Math.
Wei Chen, Shaohua Tan
2009 J jnl
J. Comput. Appl. Math.
Wei Chen, Shaohua Tan
2009 B conf
FUZZ-IEEE
Wei Chen, Shaohua Tan
tests/scripts/test_macho_extractors_local.py
← Index tests/scripts/test_macho_extractors_local.py python
#!/usr/bin/env python3
"""
Local MachO extractors test - test actual extractors without server connections
"""

import sys
import os
import logging
import hashlib
from datetime import datetime, timezone
from typing import Dict, Any, Optional
from unittest.mock import Mock, patch

# Add the redb directory to the path so we can import the extractors
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'redb'))

# Mock settings to avoid database connections
with patch.dict('os.environ', {'REDB_ENV': 'test'}):
    # Import the actual extractors
    from redb.extractors.macho_extractors.macho_features import MachOFeaturesExtractor
    from redb.extractors.macho_extractors.macho_segments import MachOSegmentExtractor
    from redb.extractors.macho_extractors.macho_imports import MachOImportExtractor
    from redb.extractors.macho_extractors.macho_exports import MachOExportExtractor
    from redb.extractors.macho_extractors.macho_dylibs import MachODylibExtractor
    from redb.extractors.macho_extractors.macho_signature import MachOSignatureExtractor
    from redb.extractors.macho_extractors.macho_universal import MachOUniversalExtractor

def setup_logging():
    """Setup basic logging configuration."""
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s'
    )
    return logging.getLogger(__name__)

class MockLogger:
    """Mock logger for testing without RedB dependencies."""
    def __init__(self):
        self.logger = logging.getLogger(__name__)
    
    def debug(self, msg):
        self.logger.debug(msg)
    
    def info(self, msg):
        self.logger.info(msg)
    
    def warning(self, msg):
        self.logger.warning(msg)
    
    def error(self, msg):
        self.logger.error(msg)

class MockExporter:
    """Mock exporter that does nothing."""
    def export(self, data):
        pass

def create_mock_extractor(extractor_class, filepath):
    """Create an extractor instance with mocked dependencies."""
    log = MockLogger()
    
    # Mock the exporters to avoid database connections
    mock_exporters = [MockExporter()]
    
    # Create the extractor with mocked dependencies
    extractor = extractor_class(
        filepath=filepath,
        log=log,
        exporters=mock_exporters,
        index_prefix="test",
        elastic_index="test_macho",
        known_benign=False,
        known_malicious=False
    )
    
    return extractor

def test_extractor(extractor_class, filepath, extractor_name):
    """Test a specific extractor."""
    log = setup_logging()
    log.info(f"Testing {extractor_name}...")
    
    try:
        # Create the extractor with mocked dependencies
        extractor = create_mock_extractor(extractor_class, filepath)
        
        if not extractor.macho:
            log.error(f"{extractor_name}: No MachO object created")
            return False

        # Test the actual extract method
        result = extractor.extract()
        
        if result:
            log.info(f"{extractor_name}: Successfully extracted data")
            print(f"\n{'='*60}")
            print(f"=== {extractor_name.upper()} RESULTS ===")
            print(f"{'='*60}")
            
            if isinstance(result, list):
                print(f"📊 Extracted {len(result)} items")
                print()
                for i, item in enumerate(result):
                    print(f"📦 Item {i+1}:")
                    print(f"   {'─'*40}")
                    # Handle dataclass objects in lists
                    if hasattr(item, '__dataclass_fields__'):
                        from dataclasses import asdict
                        item_dict = asdict(item)
                        for key, value in item_dict.items():
                            if isinstance(value, (list, dict)):
                                if isinstance(value, list):
                                    print(f"   🔹 {key}: List with {len(value)} items")
                                    print(f"      {value}")
                                elif isinstance(value, dict):
                                    print(f"   🔹 {key}: Dict with {len(value)} keys")
                                    for k, v in value.items():
                                        print(f"      {k}: {v}")
                            else:
                                print(f"   🔹 {key}: {value}")
                    else:
                        # Regular dict
                        for key, value in item.items():
                            if isinstance(value, (list, dict)):
                                if isinstance(value, list):
                                    print(f"   🔹 {key}: List with {len(value)} items")
                                    print(f"      {value}")
                                elif isinstance(value, dict):
                                    print(f"   🔹 {key}: Dict with {len(value)} keys")
                                    for k, v in value.items():
                                        print(f"      {k}: {v}")
                            else:
                                print(f"   🔹 {key}: {value}")
                    print()
            else:
                print("📊 Extracted data:")
                print()
                # Handle dataclass objects
                if hasattr(result, '__dataclass_fields__'):
                    # It's a dataclass, use dataclasses.asdict
                    from dataclasses import asdict
                    result_dict = asdict(result)
                    for key, value in result_dict.items():
                        if isinstance(value, (list, dict)):
                            if isinstance(value, list):
                                print(f"🔹 {key}: List with {len(value)} items")
                                print(f"   {value}")
                            elif isinstance(value, dict):
                                print(f"🔹 {key}: Dict with {len(value)} keys")
                                for k, v in value.items():
                                    print(f"   {k}: {v}")
                        else:
                            print(f"🔹 {key}: {value}")
                        print()
                else:
                    # It's a regular dict
                    for key, value in result.items():
                        if isinstance(value, (list, dict)):
                            if isinstance(value, list):
                                print(f"🔹 {key}: List with {len(value)} items")
                                print(f"   {value}")
                            elif isinstance(value, dict):
                                print(f"🔹 {key}: Dict with {len(value)} keys")
                                for k, v in value.items():
                                    print(f"   {k}: {v}")
                        else:
                            print(f"🔹 {key}: {value}")
                        print()
        else:
            log.warning(f"{extractor_name}: No data extracted")
            print(f"\n❌ {extractor_name}: No data extracted")
        
        return True
        
    except Exception as e:
        log.error(f"{extractor_name}: Error during extraction: {e}")
        import traceback
        traceback.print_exc()
        return False

def main():
    """Main function."""
    if len(sys.argv) < 2:
        print("Usage: python test_macho_extractors_local.py <macho_file> [extractor_name]")
        print("\nAvailable extractors:")
        print("  features    - Basic MachO header and metadata")
        print("  segments    - Segment information and analysis")
        print("  imports     - Imported functions and libraries")
        print("  exports     - Exported symbols")
        print("  dylibs      - Dynamic library dependencies")
        print("  signature   - Code signing information")
        print("  universal   - FAT/Universal binary information")
        print("  all         - Test all extractors")
        sys.exit(1)
    
    filepath = sys.argv[1]
    extractor_name = sys.argv[2] if len(sys.argv) > 2 else "all"
    
    if not os.path.exists(filepath):
        print(f"File not found: {filepath}")
        sys.exit(1)
    
    # Define extractors
    extractors = {
        'features': (MachOFeaturesExtractor, "MachO Features"),
        'segments': (MachOSegmentExtractor, "MachO Segments"),
        'imports': (MachOImportExtractor, "MachO Imports"),
        'exports': (MachOExportExtractor, "MachO Exports"),
        'dylibs': (MachODylibExtractor, "MachO Dylibs"),
        'signature': (MachOSignatureExtractor, "MachO Code Signature"),
        'universal': (MachOUniversalExtractor, "MachO Universal/FAT"),
    }
    
    if extractor_name == "all":
        print(f"Testing all extractors with file: {filepath}")
        success_count = 0
        for name, (extractor_class, display_name) in extractors.items():
            if test_extractor(extractor_class, filepath, display_name):
                success_count += 1
            print("-" * 50)
        
        print(f"\n✅ {success_count}/{len(extractors)} extractors completed successfully")
        
    elif extractor_name in extractors:
        extractor_class, display_name = extractors[extractor_name]
        success = test_extractor(extractor_class, filepath, display_name)
        
        if success:
            print(f"\n✅ {display_name} testing completed successfully")
        else:
            print(f"\n❌ {display_name} testing failed")
            sys.exit(1)
    else:
        print(f"Unknown extractor: {extractor_name}")
        print("Available extractors:", ", ".join(extractors.keys()) + ", all")
        sys.exit(1)

if __name__ == "__main__":
    main()