Haikun Qi

23 papers A* 1Journal 15Unranked 7
YearRankTypeTitle / Venue / Authors
2026 A* conf
AAAI
Jie Feng, Rui Luo, Tian Zeng, Xin Shen, Haikun Qi, Yuyao Zhang, Dong Liang, Hongjiang Wei
2025 J jnl
CoRR
Rui Luo, Hongzhang Huang, Qinfang Miao, Jian Xu, Peng Hu, Haikun Qi
2025 J jnl
Medical Image Anal.
Guoyan Lao, Ruimin Feng, Haikun Qi, Zhenfeng Lv, Qiangqiang Liu, Chunlei Liu, Yuyao Zhang, Hongjiang Wei
2025 J jnl
Int. J. Comput. Vis.
Yuze Li, Haikun Qi, Zhangxuan Hu, Haozhong Sun, Guangqi Li, Zhe Zhang, Yilong Liu, Hua Guo, Huijun Chen
2025 J jnl
Medical Image Anal.
Haozhong Sun, Yuze Li, Zhongsen Li, Runyu Yang, Ziming Xu, Jiaqi Dou, Haikun Qi, Huijun Chen
2025 J jnl
Comput. Electron. Agric.
Yukun Wang, Chenyu Xiao, Kexin Li, Lu Meng, Xinghu Song, Haikun Qi, Yao Wang, Zhenwang Zhang, Xinghua Yu, Fangjun Li, Sumei Wan, Guodong Chen, Dongyong Xu, Xin Du, Mingwei Du, Xiaoli Tian, Zhaohu Li
2025 J jnl
IEEE Trans. Biomed. Eng.
Yuxuan Liu, Kaicong Sun, Haikun Qi, Junwei Yang, Xiaopeng Zong, Yongsheng Pan, Yuning Gu, Sifan He, Han Zhang, Yu Zhang, Dinggang Shen
2024 conf
HNTS-MRG@MICCAI
Jing Ni, Qiulei Yao, Yanfei Liu, Haikun Qi
2024 conf
ISBI
Yang Liu, Jiameng Diao, Zijian Zhou, Haikun Qi, Peng Hu
2024 J jnl
CoRR
Guoyan Lao, Ruimin Feng, Haikun Qi, Zhenfeng Lv, Qiangqiang Liu, Chunlei Liu, Yuyao Zhang, Hongjiang Wei
2024 conf
ISBI
Jianing Geng, Zijian Zhou, Haikun Qi, Peng Hu
2024 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Yimin Luo, Qinyu Yang, Yuheng Fan, Haikun Qi, Menghan Xia
2024 conf
ISBI
Pengfang Qian, Zijian Zhou, Peng Hu, Haikun Qi
2023 J jnl
CoRR
Yuheng Fan, Hanxi Liao, Shiqi Huang, Yimin Luo, Huazhu Fu, Haikun Qi
2023 J jnl
IEEE Trans. Medical Imaging
Junwei Yang, Xiao-Xin Li, Feihong Liu, Dong Nie, Pietro Liò, Haikun Qi, Dinggang Shen
2022 conf
MIUA
Pengfang Qian, Junwei Yang, Pietro Lió, Peng Hu, Haikun Qi
2021 J jnl
CoRR
Junwei Yang, Xiao-Xin Li, Feihong Liu, Dong Nie, Pietro Liò, Haikun Qi, Dinggang Shen
2021 J jnl
IEEE Trans. Medical Imaging
Thomas Küstner, Jiazhen Pan, Haikun Qi, Gastão Cruz, Christopher Gilliam, Thierry Blu, Bin Yang, Sergios Gatidis, René M. Botnar, Claudia Prieto
2021 J jnl
CoRR
Thomas Küstner, Jiazhen Pan, Haikun Qi, Gastão Cruz, Christopher Gilliam, Thierry Blu, Bin Yang, Sergios Gatidis, René M. Botnar, Claudia Prieto
2021 J jnl
IEEE Trans. Medical Imaging
Haikun Qi, Niccolo Fuin, Gastão Cruz, Jiazhen Pan, Thomas Küstner, Aurélien Bustin, René M. Botnar, Claudia Prieto
2021 J jnl
IEEE Trans. Biomed. Eng.
Yimin Luo, Sophie Majoe, Kui Jiang, Haikun Qi, Kuberan Pushparajah, Kawal S. Rhode
2020 conf
MICCAI (6)
Haikun Qi, Niccolo Fuin, Thomas Küstner, René M. Botnar, Claudia Prieto
2020 conf
APSIPA
Thomas Küstner, Jiazhen Pan, Christopher Gilliam, Haikun Qi, Gastão Cruz, Kerstin Hammernik, Bin Yang, Thierry Blu, Daniel Rueckert, René M. Botnar, Claudia Prieto, Sergios Gatidis
redb/utils/sort_files_by_type.py
← Index redb/utils/sort_files_by_type.py python
import os
import sys
from collections import defaultdict
import tempfile
from magika import Magika
import py7zr
import pyzipper
import shutil

"""
This script is used to sort files by their type. 
It reads all the files in the provided directory and splits them into different 
directories based on their type. Mainly, it classifies the files into the following types:
- PE Binaries
- Mach-O Binaries
- ELF Binaries
- APK 
- Other Files

It outputs the count of files for each file extension and file type.

Command line example:
nohup python3 sort_files_by_type.py /mnt/samples/consilience/malware/vx-bazaar-expanded/Bazaar.2020.12 \
    /mnt/samples/consilience/malware/_sorted_samples/vx-bazaar/2020/ > \
    /mnt/samples/consilience/malware/ops-logs/20241014-SORT_FILES-bazaar_2020.12.output.log 2>&1 &
"""


def process_zip_file(filepath):
    print(f"[INFO] - Processing zip file: {filepath}")
    with tempfile.TemporaryDirectory() as temp_dir:
        try:
            with pyzipper.AESZipFile(filepath) as zf:
                zf.pwd = b"infected"
                filename = zf.namelist()[0]
                zf.extractall(temp_dir)
                extracted_zip_path = os.path.join(temp_dir, filename)
                return process_binary_file(extracted_zip_path)
        except Exception as e:
            print(f"[ERR] - Error processing zip file {filepath}: {str(e)}")
            return None


def process_7z_file(filepath):
    print(f"[INFO] - Processing 7z file: {filepath}")
    with tempfile.TemporaryDirectory() as temp_dir:
        try:
            with py7zr.SevenZipFile(filepath, mode="r", password="infected") as z:
                z.extractall(path=temp_dir)
                for root, _, files in os.walk(temp_dir):
                    for file in files:
                        extracted_file_path = os.path.join(root, file)
                        return process_binary_file(extracted_file_path)
        except Exception as e:
            print(f"[ERR] - Error processing 7z file {filepath}: {str(e)}")
            return None


def process_binary_file(filepath):
    print(f"[INFO] - Processing binary file: {filepath}")
    try:
        with open(filepath, "rb") as f:
            data = f.read(512 * 1024)  # 512KB
        return Magika().identify_bytes(data).output.ct_label
    except Exception as e:
        print(f"[ERR] - Error processing binary file {filepath}: {str(e)}")
        return "ERROR"


def count_file_extensions(path, dest_dir):
    # A defaultdict to store file extension counts
    extension_count = defaultdict(int)
    filetype_count = defaultdict(int)
    tot_files = 0

    # Walk through the directory
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.startswith("."):
                continue

            tot_files += 1
            # Split the file extension from the file name
            _, ext = os.path.splitext(file)
            ext = ext.lower()

            # Count the extensions
            extension_count[ext] += 1
            filepath = os.path.join(root, file)
            filetype = ""

            if ext == ".7z":
                filetype = process_7z_file(filepath)
            elif ext == ".zip":
                filetype = process_zip_file(filepath)
            else:
                filetype = process_binary_file(filepath)

            filetype_count[filetype] += 1

            if filetype == "pebin":
                dest = os.path.join(dest_dir, "pebin")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "macho":
                dest = os.path.join(dest_dir, "macho")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "elf":
                dest = os.path.join(dest_dir, "elf")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "apk":
                dest = os.path.join(dest_dir, "apk")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            else:
                dest = os.path.join(dest_dir, "other")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            print(f"[STATUS] - Progres: {tot_files}/{len(files)} files processed")

    # Print the results
    # print("- File Extension Statistics:")
    # for ext, count in extension_count.items():
    #     if ext:  # To exclude files with no extension
    #         print(f"\t{ext}: {count} files")

    # if "" in extension_count:
    #     print(f'\t{extension_count[""]} files with no extension')

    print(f"- Total Number of Files: {tot_files}")
    print("\n- File Type Statistics:")
    for filetype, count in sorted(filetype_count.items()):
        print(f"\t{filetype:<15}{count:>8}")


if __name__ == "__main__":
    # Check if the path was passed as a command-line argument
    if len(sys.argv) != 3:
        print("Usage: python3 script.py <input_path> <dest_dir>")
        sys.exit(1)

    # Get the path from the command-line arguments
    input_path = sys.argv[1]
    dest_dir = sys.argv[2]

    # Check if the provided path is valid
    if not os.path.isdir(input_path):
        print(f"The path '{input_path}' is not a valid directory.")
        sys.exit(1)

    # Call the function to count file extensions
    count_file_extensions(input_path, dest_dir)