Xiaohui Xie

271 papers A* 36A 27B 11C 2Journal 153Unranked 42
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Comput. Phys.
Ray Zirui Zhang, Christopher E. Miles, Xiaohui Xie, John S. Lowengrub
2026 J jnl
CoRR
Chuyi Wang, Xiaohui Xie, Tongze Wang, Yong Cui
2026 A* conf
AAAI
Shanlin Sun, Jiaqi Xu, Gabriel de Araujo, Shenghan Zhou, Hanwen Zhang, Ziheng Huang, Chenyu You, Xiaohui Xie
2026 A* conf
AAAI
Gong Chen, Chaokun Zhang, Pengcheng Lv, Xiaohui Xie
2026 J jnl
CoRR
Tongze Wang, Xiaohui Xie, Wenduo Wang, Chuyi Wang, Jinzhou Liu, Boyan Huang, Yannan Hu, Youjian Zhao, Yong Cui
2026 A* conf
AAAI
Yifeng Xiong, Xiaohui Xie
2026 J jnl
CoRR
Yuheng Liu, Xin Lin, Xinke Li, Baihan Yang, Chen Wang, Kalyan Sunkavalli, Yannick Hold-Geoffroy, Hao Tan, Kai Zhang, Xiaohui Xie, Zifan Shi, Yiwei Hu
2026 J jnl
CoRR
Jie Zhang, Lei Zhang, Ziyi Wang, Chenxiang Sun, Yuming Hu, Xiaohui Xie, Zeqi Lai, Yong Cui
2025 B conf
ICNP
Gang Yi, Tongze Wang, Liang Du, Xiaohui Xie, Ling Deng, Shixian Deng, Yong Cui
2025 J jnl
CoRR
Chenguang Du, Chuyi Wang, Yihan Chao, Xiaohui Xie, Yong Cui
2025 J jnl
Brain Connect.
Siyu Fan, Rui Qian, Nanxue Duan, Hongping Wang, Yue Yu, Yang Ji, Xiaohui Xie, Yue Wu, Yanghua Tian
2025 J jnl
CoRR
Yunze Wei, Kaiwen Wei, Shibo Du, Jianyu Wang, Zhangzhong Liu, Yawen Wang, Zhanyou Li, Congcong Miao, Xiaohui Xie, Yong Cui
2025 J jnl
CoRR
Ray Zirui Zhang, Christopher E. Miles, Xiaohui Xie, John S. Lowengrub
2025 J jnl
CoRR
Gong Chen, Chaokun Zhang, Pengcheng Lv, Xiaohui Xie
2025 A* conf
CCS
Xiaoyu He, Xiaohui Xie, Xin Wang, Lei Zhang, Kun Xie, Lin Chen, Yong Cui
2025 conf
ICCVW
Tuan Pham, Thanh-Tung Le, Xiaohui Xie, Stephan Mandt
2025 J jnl
CoRR
Tuan Pham, Thanh-Tung Le, Xiaohui Xie, Stephan Mandt
2025 B conf
ICNP
Yunze Wei, Xiaohui Xie, Tianshuo Hu, Yiwei Zuo, Xinyi Chen, Kaiwen Chi, Yong Cui
2025 conf
ANRW
Yunze Wei, Kaiwen Chi, Shibo Du, Xiaohui Xie, Ziyu Geng, Yuwei Han, Zhen Li, Zhanyou Li, Yong Cui
2025 J jnl
IEEE Netw.
Chang Liu, Xiaohui Xie, Xinggong Zhang, Yong Cui
2025 J jnl
CoRR
Yuelin Xin, Yuheng Liu, Xiaohui Xie, Xinke Li
2025 J jnl
CoRR
Yunze Wei, Xiaohui Xie, Yiwei Zuo, Tianshuo Hu, Xinyi Chen, Kaiwen Chi, Yong Cui
2025 J jnl
IEEE Access
Yifeng Xiong, Haoyu Ma, Shanlin Sun, Kun Han, Hao Tang, Xiaohui Xie
2025 J jnl
CoRR
Arghavan Rezvani, Xiangyi Yan, Anthony T. Wu, Kun Han, Pooya Khosravi, Xiaohui Xie
2025 B conf
ICNP
Sijiang Huang, Xiaohui Xie, Mowei Wang, Lingfeng Peng, Cong Li, Yong Zhang, Yingjie Qin, Liang Zhang, Yong Cui
2025 J jnl
CoRR
Yifeng Xiong, Xiaohui Xie
2025 J jnl
CoRR
Shanlin Sun, Yifan Wang, Hanwen Zhang, Yifeng Xiong, Qin Ren, Ruogu Fang, Xiaohui Xie, Chenyu You
2025 conf
NGNO@MM
Sijiang Huang, Xiaohui Xie, Rui Xu, Cong Li, Yong Zhang, Mowei Wang, Liang Zhang, Yong Cui
2025 J jnl
CoRR
Thanh-Tung Le, Tuan Pham, Tung Nguyen, Deying Kong, Xiaohui Xie, Stephan Mandt
2025 J jnl
CoRR
Pooya Khosravi, Kun Han, Anthony T. Wu, Arghavan Rezvani, Zexin Feng, Xiaohui Xie
2025 conf
MICCAI (4)
Pooya Khosravi, Kun Han, Anthony T. Wu, Arghavan Rezvani, Zexin Feng, Xiaohui Xie
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Xingwei Liu, Yiqiao Li, Langting Sizemore, Xiaohui Xie, Jun Wu
2024 A conf
WACV
Xiangyi Yan, Shanlin Sun, Kun Han, Thanh-Tung Le, Haoyu Ma, Chenyu You, Xiaohui Xie
2024 J jnl
CoRR
Ray Zirui Zhang, Xiaohui Xie, John S. Lowengrub
2024 A conf
WACV
Haoyu Ma, Tong Zhang, Shanlin Sun, Xiangyi Yan, Kun Han, Xiaohui Xie
2024 J jnl
CoRR
Shanlin Sun, Gabriel de Araujo, Jiaqi Xu, Shenghan Zhou, Hanwen Zhang, Ziheng Huang, Chenyu You, Xiaohui Xie
2024 J jnl
J. Assoc. Inf. Sci. Technol.
Shuqi Zhu, Xiaohui Xie, Ziyi Ye, Qingyao Ai, Yiqun Liu
2024 J jnl
CoRR
Zhizhen Zhang, Ruihong Qiu, Xiaohui Xie
2024 A* conf
ICLR
Thanh-Tung Le, Khai Nguyen, Shanlin Sun, Kun Han, Nhat Ho, Xiaohui Xie
2024 B conf
ICNP
Kaiwen Chi, Xiaohui Xie, Yannan Hu, Dongyang Zhao, Yuming Xie, Liang Zhang, Yong Cui
2024 conf
UbiComp Companion
Kaiyuan Zhang, Ziyi Ye, Qingyao Ai, Xiaohui Xie, Yiqun Liu
2024 conf
CPAL
Haoyu Ma, Chengming Zhang, Lizhi Xiang, Xiaolong Ma, Geng Yuan, Wenkai Zhang, Shiwei Liu, Tianlong Chen, Dingwen Tao, Yanzhi Wang, Zhangyang Wang, Xiaohui Xie
2024 B conf
IJCNN
Zhizhen Zhang, Xiaohui Xie, Yishuo Zhang, Lanshan Zhang, Yong Jiang
2024 A conf
WACV
Kun Han, Shanlin Sun, Thanh-Tung Le, Xiangyi Yan, Haoyu Ma, Chenyu You, Xiaohui Xie
2024 A conf
BMVC
Shanlin Sun, Tung Le, Pooya Khosravi, Chenyu You, Kun Han, Haoyu Ma, Deying Kong, Xiangyi Yan, Xiaohui Xie
2024 J jnl
CoRR
Ruizhe Zhang, Qingyao Ai, Ziyi Ye, Yueyue Wu, Xiaohui Xie, Yiqun Liu
2024 J jnl
CoRR
Tung Le, Khai Nguyen, Shanlin Sun, Nhat Ho, Xiaohui Xie
2024 A* conf
CVPR
Tung Le, Khai Nguyen, Shanlin Sun, Nhat Ho, Xiaohui Xie
2024 J jnl
CoRR
Chang Liu, Xiaohui Xie, Xinggong Zhang, Yong Cui
2024 A* conf
CVPR
Shanlin Sun, Bingbing Zhuang, Ziyu Jiang, Buyu Liu, Xiaohui Xie, Manmohan Chandraker
2024 J jnl
CoRR
Shanlin Sun, Bingbing Zhuang, Ziyu Jiang, Buyu Liu, Xiaohui Xie, Manmohan Chandraker
2024 A* conf
CVPR
Haoyu Ma, Shahin Mahdizadehaghdam, Bichen Wu, Zhipeng Fan, Yuchao Gu, Wenliang Zhao, Lior Shapira, Xiaohui Xie
2024 J jnl
Medical Image Anal.
Shanlin Sun, Kun Han, Chenyu You, Hao Tang, Deying Kong, Junayed Naushad, Xiangyi Yan, Haoyu Ma, Pooya Khosravi, James S. Duncan, Xiaohui Xie
2024 J jnl
CoRR
Tongze Wang, Xiaohui Xie, Wenduo Wang, Chuyi Wang, Youjian Zhao, Yong Cui
2024 B conf
ICNP
Tongze Wang, Xiaohui Xie, Wenduo Wang, Chuyi Wang, Youjian Zhao, Yong Cui
2024 conf
MICCAI (2)
Yuelin Xin, Yicheng Chen, Shengxiang Ji, Kun Han, Xiaohui Xie
2024 B conf
ICNP
Lingfeng Peng, Xiaohui Xie, Sijiang Huang, Ziyi Wang, Yong Cui
2024 J jnl
ACM Trans. Inf. Syst.
Ziyi Ye, Xiaohui Xie, Qingyao Ai, Yiqun Liu, Zhihong Wang, Weihang Su, Min Zhang
2024 B conf
SMC
Yishuo Zhang, Lanshan Zhang, Zhizhen Zhang, Ziyi Wang, Xiaohui Xie, Wendong Wang
2024 A conf
WACV
Tianang Leng, Yiming Zhang, Kun Han, Xiaohui Xie
2024 conf
APNet
Tongze Wang, Xiaohui Xie, Lei Zhang, Chuyi Wang, Liang Zhang, Yong Cui
2024 B conf
IWQoS
Jie Zhang, Xutong Zuo, Xiaohui Xie, Wei Wang, Yong Cui
2023 J jnl
CoRR
Gabriel de Araujo, Shanlin Sun, Xiaohui Xie
2023 J jnl
CoRR
Haoyu Ma, Tong Zhang, Shanlin Sun, Xiangyi Yan, Kun Han, Xiaohui Xie
2023 J jnl
CoRR
Tung Le, Khai Nguyen, Shanlin Sun, Kun Han, Nhat Ho, Xiaohui Xie
2023 A conf
WACV
Kun Han, Shanlin Sun, Xiangyi Yan, Chenyu You, Hao Tang, Junayed Naushad, Haoyu Ma, Deying Kong, Xiaohui Xie
2023 J jnl
CoRR
Kaiyuan Zhang, Ziyi Ye, Qingyao Ai, Xiaohui Xie, Yiqun Liu
2023 J jnl
CoRR
Zhizhen Zhang, Xiaohui Xie, Yishuo Zhang, Lanshan Zhang, Yong Jiang
2023 J jnl
CoRR
Kun Han, Shanlin Sun, Xiaohui Xie
2023 J jnl
CoRR
Shanlin Sun, Thanh-Tung Le, Chenyu You, Hao Tang, Kun Han, Haoyu Ma, Deying Kong, Xiangyi Yan, Xiaohui Xie
2023 J jnl
CoRR
Zhizhen Zhang, Xiaohui Xie, Mengyu Yang, Ye Tian, Yong Jiang, Yong Cui
2023 J jnl
CoRR
Yifeng Xiong, Haoyu Ma, Shanlin Sun, Kun Han, Xiaohui Xie
2023 J jnl
CoRR
Xiangyi Yan, Junayed Naushad, Chenyu You, Hao Tang, Shanlin Sun, Kun Han, Haoyu Ma, James Duncan, Xiaohui Xie
2023 conf
MICCAI (2)
Xiangyi Yan, Junayed Naushad, Chenyu You, Hao Tang, Shanlin Sun, Kun Han, Haoyu Ma, James S. Duncan, Xiaohui Xie
2023 J jnl
CoRR
Haoyu Ma, Shahin Mahdizadehaghdam, Bichen Wu, Zhipeng Fan, Yuchao Gu, Wenliang Zhao, Lior Shapira, Xiaohui Xie
2023 conf
MICCAI (1)
Kun Han, Yifeng Xiong, Chenyu You, Pooya Khosravi, Shanlin Sun, Xiangyi Yan, James S. Duncan, Xiaohui Xie
2023 J jnl
CoRR
Kun Han, Yifeng Xiong, Chenyu You, Pooya Khosravi, Shanlin Sun, Xiangyi Yan, James Duncan, Xiaohui Xie
2023 J jnl
Remote. Sens.
Qian Liu, Jian Cui, Xiaodong Shang, Xiaohui Xie, Xiangbai Wu, Junliang Gao, Huan Mei
2023 J jnl
CoRR
Yicheng Chen, Shengxiang Ji, Yuelin Xin, Kun Han, Xiaohui Xie
2023 A* conf
AAAI
Zhenglun Kong, Haoyu Ma, Geng Yuan, Mengshu Sun, Yanyue Xie, Peiyan Dong, Xin Meng, Xuan Shen, Hao Tang, Minghai Qin, Tianlong Chen, Xiaolong Ma, Xiaohui Xie, Zhangyang Wang, Yanzhi Wang
2023 J jnl
CoRR
Ziyi Ye, Xiaohui Xie, Qingyao Ai, Yiqun Liu, Zhihong Wang, Weihang Su, Min Zhang
2023 A conf
WACV
Xiangyi Yan, Junayed Naushad, Shanlin Sun, Kun Han, Hao Tang, Deying Kong, Haoyu Ma, Chenyu You, Xiaohui Xie
2023 J jnl
CoRR
Yiming Zhang, Tianang Leng, Kun Han, Xiaohui Xie
2023 A* conf
SIGIR
Xiaohui Xie, Qian Dong, Bingning Wang, Feiyang Lv, Ting Yao, Weinan Gan, Zhijing Wu, Xiangsheng Li, Haitao Li, Yiqun Liu, Jin Ma
2023 J jnl
CoRR
Xiaohui Xie, Qian Dong, Bingning Wang, Feiyang Lv, Ting Yao, Weinan Gan, Zhijing Wu, Xiangsheng Li, Haitao Li, Yiqun Liu, Jin Ma
2023 A conf
CIKM
Zhiyu He, Shaorun Zhang, Peijie Sun, Jiayu Li, Xiaohui Xie, Min Zhang, Yiqun Liu
2023 A* conf
ACM Multimedia
Ye Tian, Mengyu Yang, Lanshan Zhang, Zhizhen Zhang, Yang Liu, Xiaohui Xie, Xirong Que, Wendong Wang
2023 J jnl
CoRR
Ye Tian, Mengyu Yang, Lanshan Zhang, Zhizhen Zhang, Yang Liu, Xiaohui Xie, Xirong Que, Wendong Wang
2022 A conf
WACV
Xiangyi Yan, Hao Tang, Shanlin Sun, Haoyu Ma, Deying Kong, Xiaohui Xie
2022 A* conf
SIGIR
Jia Chen, Yiqun Liu, Yan Fang, Jiaxin Mao, Hui Fang, Shenghao Yang, Xiaohui Xie, Min Zhang, Shaoping Ma
2022 A* conf
ACM Multimedia
Ziyi Ye, Xiaohui Xie, Yiqun Liu, Zhihong Wang, Xuesong Chen, Min Zhang, Shaoping Ma
2022 J jnl
CoRR
Ziyi Ye, Xiaohui Xie, Yiqun Liu, Zhihong Wang, Xuesong Chen, Min Zhang, Shaoping Ma
2022 J jnl
CoRR
Jingtao Zhan, Qingyao Ai, Yiqun Liu, Jiaxin Mao, Xiaohui Xie, Min Zhang, Shaoping Ma
2022 A* conf
CVPR
Haoyu Ma, Handong Zhao, Zhe Lin, Ajinkya Kale, Zhangyang Wang, Tong Yu, Jiuxiang Gu, Sunav Choudhary, Xiaohui Xie
2022 conf
CCIR
Shenghao Yang, Yiqun Liu, Xiaohui Xie, Min Zhang, Shaoping Ma
2022 J jnl
CoRR
Jingtao Zhan, Xiaohui Xie, Jiaxin Mao, Yiqun Liu, Min Zhang, Shaoping Ma
2022 A conf
CIKM
Jingtao Zhan, Xiaohui Xie, Jiaxin Mao, Yiqun Liu, Jiafeng Guo, Min Zhang, Shaoping Ma
2022 A* conf
WWW
Junqi Zhang, Yiqun Liu, Jiaxin Mao, Xiaohui Xie, Min Zhang, Shaoping Ma, Qi Tian
2022 conf
ECCV (5)
Deying Kong, Linguang Zhang, Liangjian Chen, Haoyu Ma, Xiangyi Yan, Shanlin Sun, Xingwei Liu, Kun Han, Xiaohui Xie
2022 J jnl
CoRR
Deying Kong, Linguang Zhang, Liangjian Chen, Haoyu Ma, Xiangyi Yan, Shanlin Sun, Xingwei Liu, Kun Han, Xiaohui Xie
2022 J jnl
CoRR
Shanlin Sun, Kun Han, Deying Kong, Chenyu You, Xiaohui Xie
2022 conf
ECCV (5)
Haoyu Ma, Zhe Wang, Yifei Chen, Deying Kong, Liangjian Chen, Xingwei Liu, Xiangyi Yan, Hao Tang, Xiaohui Xie
2022 J jnl
CoRR
Haoyu Ma, Zhe Wang, Yifei Chen, Deying Kong, Liangjian Chen, Xingwei Liu, Xiangyi Yan, Hao Tang, Xiaohui Xie
2022 J jnl
CoRR
Zhenglun Kong, Haoyu Ma, Geng Yuan, Mengshu Sun, Yanyue Xie, Peiyan Dong, Xin Meng, Xuan Shen, Hao Tang, Minghai Qin, Tianlong Chen, Xiaolong Ma, Xiaohui Xie, Zhangyang Wang, Yanzhi Wang
2022 J jnl
Found. Trends Inf. Retr.
Yixing Fan, Xiaohui Xie, Yinqiong Cai, Jia Chen, Xinyu Ma, Xiangsheng Li, Ruqing Zhang, Jiafeng Guo
2022 A* conf
CVPR
Shanlin Sun, Kun Han, Deying Kong, Hao Tang, Xiangyi Yan, Xiaohui Xie
2022 J jnl
CoRR
Shanlin Sun, Kun Han, Deying Kong, Hao Tang, Xiangyi Yan, Xiaohui Xie
2022 A* conf
WWW
Ziyi Ye, Xiaohui Xie, Yiqun Liu, Zhihong Wang, Xuesong Chen, Min Zhang, Shaoping Ma
2022 A conf
WSDM
Xuesong Chen, Ziyi Ye, Xiaohui Xie, Yiqun Liu, Xiaorong Gao, Weihang Su, Shuqi Zhu, Yike Sun, Min Zhang, Shaoping Ma
2022 A* conf
SIGIR
Ziyi Ye, Xiaohui Xie, Yiqun Liu, Zhihong Wang, Xuancheng Li, Jiaji Li, Xuesong Chen, Min Zhang, Shaoping Ma
2021 J jnl
CoRR
Xiangyi Yan, Hao Tang, Shanlin Sun, Haoyu Ma, Deying Kong, Xiaohui Xie
2021 A* conf
WWW
Ruizhe Zhang, Xiaohui Xie, Jiaxin Mao, Yiqun Liu, Min Zhang, Shaoping Ma
2021 J jnl
CoRR
Haoyu Ma, Tianlong Chen, Ting-Kuei Hu, Chenyu You, Xiaohui Xie, Zhangyang Wang
2021 A* conf
ACM Multimedia
Pu Li, Xiaobai Liu, Xiaohui Xie
2021 A conf
WACV
Liangjian Chen, Shih-Yao Lin, Yusheng Xie, Yen-Yu Lin, Xiaohui Xie
2021 A* conf
KDD
Yifei Chen, Haoyu Ma, Jiangyuan Wang, Jianbao Wu, Xian Wu, Xiaohui Xie
2021 J jnl
CoRR
Yixing Fan, Xiaohui Xie, Yinqiong Cai, Jia Chen, Xinyu Ma, Xiangsheng Li, Ruqing Zhang, Jiafeng Guo, Yiqun Liu
2021 A* conf
ICCV
Hao Tang, Xingwei Liu, Shanlin Sun, Xiangyi Yan, Xiaohui Xie
2021 J jnl
CoRR
Hao Tang, Xingwei Liu, Shanlin Sun, Xiangyi Yan, Xiaohui Xie
2021 J jnl
Bioinform.
Yingxin Cao, Laiyi Fu, Jie Wu, Qinke Peng, Qing Nie, Jing Zhang, Xiaohui Xie
2021 A conf
WACV
Hao Tang, Xingwei Liu, Kun Han, Xiaohui Xie, Xuming Chen, Qian Huang, Yong Liu, Shanlin Sun, Narisu Bai
2021 A conf
WACV
Liangjian Chen, Shih-Yao Lin, Yusheng Xie, Yen-Yu Lin, Xiaohui Xie
2021 A* conf
ICRA
Wentao Zhu, Yufang Huang, Daguang Xu, Zhen Qian, Wei Fan, Xiaohui Xie
2021 J jnl
CoRR
Wentao Zhu, Yufang Huang, Daguang Xu, Zhen Qian, Wei Fan, Xiaohui Xie
2021 A conf
BMVC
Haoyu Ma, Liangjian Chen, Deying Kong, Zhe Wang, Xingwei Liu, Hao Tang, Xiangyi Yan, Yusheng Xie, Shih-Yao Lin, Xiaohui Xie
2021 J jnl
CoRR
Haoyu Ma, Liangjian Chen, Deying Kong, Zhe Wang, Xingwei Liu, Hao Tang, Xiangyi Yan, Yusheng Xie, Shih-Yao Lin, Xiaohui Xie
2021 J jnl
CoRR
Ziyi Ye, Xiaohui Xie, Yiqun Liu, Zhihong Wang, Xuesong Chen, Min Zhang, Shaoping Ma
2021 A* conf
ICLR
Haoyu Ma, Tianlong Chen, Ting-Kuei Hu, Chenyu You, Xiaohui Xie, Zhangyang Wang
2021 J jnl
CoRR
Haoyu Ma, Tianlong Chen, Ting-Kuei Hu, Chenyu You, Xiaohui Xie, Zhangyang Wang
2021 J jnl
CoRR
Xuesong Chen, Ziyi Ye, Xiaohui Xie, Yiqun Liu, Weihang Su, Shuqi Zhu, Min Zhang, Shaoping Ma
2021 J jnl
CoRR
Ziyi Ye, Xiaohui Xie, Yiqun Liu, Zhihong Wang, Xuancheng Li, Jiaji Li, Xuesong Chen, Min Zhang, Shaoping Ma
2020 J jnl
CoRR
Shanlin Sun, Yang Liu, Narisu Bai, Hao Tang, Xuming Chen, Qian Huang, Yong Liu, Xiaohui Xie
2020 conf
ISBI
Shanlin Sun, Yang Liu, Narisu Bai, Hao Tang, Xuming Chen, Qian Huang, Yong Liu, Xiaohui Xie
2020 J jnl
SIGIR Forum
Yiqun Liu, Jiaxin Mao, Xiaohui Xie, Min Zhang, Shaoping Ma
2020 A conf
WACV
Liangjian Chen, Shih-Yao Lin, Yusheng Xie, Yen-Yu Lin, Wei Fan, Xiaohui Xie
2020 J jnl
CoRR
Liangjian Chen, Shih-Yao Lin, Yusheng Xie, Yen-Yu Lin, Wei Fan, Xiaohui Xie
2020 A* conf
ICLR
Xiaoran Xu, Wei Feng, Yunsheng Jiang, Xiaohui Xie, Zhiqing Sun, Zhi-Hong Deng
2020 J jnl
Quant. Biol.
Jie Ren, Kai Song, Chao Deng, Nathan A. Ahlgren, Jed A. Fuhrman, Yi Li, Xiaohui Xie, Ryan Poplin, Fengzhu Sun
2020 conf
CCIR
Yukun Zheng, Jiaxin Mao, Yiqun Liu, Xiaohui Xie, Min Zhang, Shaoping Ma
2020 J jnl
CoRR
Liangjian Chen, Shih-Yao Lin, Yusheng Xie, Yen-Yu Lin, Xiaohui Xie
2020 A* conf
SIGIR
Xiaohui Xie, Jiaxin Mao, Yiqun Liu, Maarten de Rijke
2020 A* conf
SIGIR
Fan Zhang, Jiaxin Mao, Yiqun Liu, Xiaohui Xie, Weizhi Ma, Min Zhang, Shaoping Ma
2020 A conf
WACV
Yifei Chen, Haoyu Ma, Deying Kong, Xiangyi Yan, Jianbao Wu, Wei Fan, Xiaohui Xie
2020 J jnl
CoRR
Yifei Chen, Haoyu Ma, Deying Kong, Xiangyi Yan, Jianbao Wu, Wei Fan, Xiaohui Xie
2020 A* conf
SIGIR
Xiaohui Xie, Jiaxin Mao, Yiqun Liu, Maarten de Rijke, Haitian Chen, Min Zhang, Shaoping Ma
2020 A conf
WACV
Deying Kong, Haoyu Ma, Yifei Chen, Xiaohui Xie
2020 J jnl
CoRR
Deying Kong, Haoyu Ma, Yifei Chen, Xiaohui Xie
2020 J jnl
IEEE Trans. Emerg. Top. Comput.
Fu Xiao, Jing Chen, Xiaohui Xie, Linqing Gui, Lijuan Sun, Ruchuan Wang
2020 A conf
BMVC
Deying Kong, Haoyu Ma, Xiaohui Xie
2020 J jnl
CoRR
Deying Kong, Haoyu Ma, Xiaohui Xie
2020 J jnl
CoRR
Hao Tang, Xingwei Liu, Kun Han, Shanlin Sun, Narisu Bai, Xuming Chen, Qian Huang, Yong Liu, Xiaohui Xie
2020 conf
ISBI
Yeeleng Scott Vang, Yingxin Cao, Peter D. Chang, Daniel S. Chow, Alexander Ulrich Brandt, Friedemann Paul, Michael Scheel, Xiaohui Xie
2020 J jnl
CoRR
Liangjian Chen, Shih-Yao Lin, Yusheng Xie, Yen-Yu Lin, Xiaohui Xie
2019 conf
ABCD-NP@MICCAI
Yeeleng Scott Vang, Yingxin Cao, Xiaohui Xie
2019 J jnl
CoRR
Yeeleng Scott Vang, Yingxin Cao, Xiaohui Xie
2019 conf
ROBIO
Xiuan Zhang, Xiaohui Xie
2019 A conf
BMVC
Deying Kong, Yifei Chen, Haoyu Ma, Xiangyi Yan, Xiaohui Xie
2019 J jnl
CoRR
Deying Kong, Yifei Chen, Haoyu Ma, Xiangyi Yan, Xiaohui Xie
2019 conf
ISBI
Hao Tang, Xingwei Liu, Xiaohui Xie
2019 J jnl
CoRR
Hao Tang, Xingwei Liu, Xiaohui Xie
2019 J jnl
CoRR
Hao Tang, Daniel R. Kim, Xiaohui Xie
2019 conf
ISBI
Hao Tang, Chupeng Zhang, Xiaohui Xie
2019 J jnl
CoRR
Hao Tang, Chupeng Zhang, Xiaohui Xie
2019 J jnl
Nat. Mach. Intell.
Hao Tang, Xuming Chen, Yang Liu, Zhipeng Lu, Junhua You, Mingzhou Yang, Shengyu Yao, Guoqi Zhao, Yi Xu, Tingfeng Chen, Yong Liu, Xiaohui Xie
2019 J jnl
CoRR
Xiaoran Xu, Wei Feng, Yunsheng Jiang, Xiaohui Xie, Zhiqing Sun, Zhi-Hong Deng
2019 A* conf
WWW
Xiaohui Xie, Jiaxin Mao, Yiqun Liu, Maarten de Rijke, Yunqiu Shao, Zixin Ye, Min Zhang, Shaoping Ma
2019 A conf
CIKM
Xiaohui Xie, Jiaxin Mao, Yiqun Liu, Maarten de Rijke, Qingyao Ai, Yufei Huang, Min Zhang, Shaoping Ma
2019 J jnl
CoRR
Zhenhua Huang, Zhenyu Wang, Rui Zhang, Yangyang Zhao, Xiaohui Xie, Sharad Mehrotra
2019 conf
ICDM Workshops
Zhenhua Huang, Zhenyu Wang, Rui Zhang, Yangyang Zhao, Xiaohui Xie, Sharad Mehrotra
2019 J jnl
CoRR
Wentao Zhu, Yufang Huang, Mani A. Vannan, Shizhen Liu, Daguang Xu, Wei Fan, Zhen Qian, Xiaohui Xie
2019 conf
MICCAI (6)
Hao Tang, Chupeng Zhang, Xiaohui Xie
2019 J jnl
CoRR
Hao Tang, Chupeng Zhang, Xiaohui Xie
2019 J jnl
Remote. Sens.
Han Zhang, Xiaohui Liu, Renhao Wu, Fu Liu, Linghui Yu, Xiaodong Shang, Yongfeng Qi, Yuan Wang, Xunshu Song, Xiaohui Xie, Chenghao Yang, Di Tian, Wenyan Zhang
2019 A* conf
ACM Multimedia
Peng Wang, Yunsheng Jiang, Chunxu Xu, Xiaohui Xie
2019 J jnl
Bioinform.
Tiehang Duan, José P. Pinto, Xiaohui Xie
2019 conf
PAKDD (3)
Tiehang Duan, Qi Lou, Sargur N. Srihari, Xiaohui Xie
2019 A conf
BMVC
Liangjian Chen, Shih-Yao Lin, Yusheng Xie, Hui Tang, Yufan Xue, Yen-Yu Lin, Xiaohui Xie, Wei Fan
2019 A conf
WSDM
Xiaohui Xie
2019 A* conf
ICCV
Ruiyun Yu, Xiaoqi Wang, Xiaohui Xie
2018 conf
ISBI
Wentao Zhu, Xiang Xiang, Trac D. Tran, Gregory D. Hager, Xiaohui Xie
2018 J jnl
CoRR
Wentao Zhu, Yufang Huang, Hui Tang, Zhen Qian, Nan Du, Wei Fan, Xiaohui Xie
2018 J jnl
IEEE Netw.
Fu Xiao, Zhengxin Guo, Yingying Ni, Xiaohui Xie, Sabita Maharjan, Yan Zhang
2018 conf
ISBI
Hao Tang, Daniel R. Kim, Xiaohui Xie
2018 A* conf
SIGIR
Xiaohui Xie, Jiaxin Mao, Maarten de Rijke, Ruizhe Zhang, Min Zhang, Shaoping Ma
2018 J jnl
CoRR
Xiaohui Xie, Jiaxin Mao, Maarten de Rijke, Ruizhe Zhang, Min Zhang, Shaoping Ma
2018 J jnl
CoRR
Mengyi Liu, Xiaohui Xie, Hanning Zhou
2018 conf
ICIAR
Yeeleng Scott Vang, Zhen Chen, Xiaohui Xie
2018 J jnl
CoRR
Yeeleng Scott Vang, Zhen Chen, Xiaohui Xie
2018 J jnl
CoRR
Wentao Zhu, Yeeleng Scott Vang, Yufang Huang, Xiaohui Xie
2018 conf
MICCAI (2)
Wentao Zhu, Yeeleng Scott Vang, Yufang Huang, Xiaohui Xie
2018 A conf
WACV
Wentao Zhu, Chaochun Liu, Wei Fan, Xiaohui Xie
2018 J jnl
CoRR
Wentao Zhu, Chaochun Liu, Wei Fan, Xiaohui Xie
2018 J jnl
CoRR
Liangjian Chen, Shih-Yao Lin, Yusheng Xie, Hui Tang, Yufan Xue, Xiaohui Xie, Yen-Yu Lin, Wei Fan
2018 J jnl
IEEE Commun. Mag.
Fu Xiao, Qianwen Miao, Xiaohui Xie, Lijuan Sun, Ruchuan Wang
2018 J jnl
CoRR
Tiehang Duan, José P. Pinto, Xiaohui Xie
2018 J jnl
Comput. Networks
Fu Xiao, Qianwen Miao, Xiaohui Xie, Lijuan Sun, Ruchuan Wang
2018 J jnl
CoRR
Tiehang Duan, Qi Lou, Sargur N. Srihari, Xiaohui Xie
2018 A conf
WACV
Zhe Wang, Xiaoyi Liu, Limin Wang, Yu Qiao, Xiaohui Xie, Charless C. Fowlkes
2018 J jnl
CoRR
Zhe Wang, Xiaoyi Liu, Liangjian Chen, Limin Wang, Yu Qiao, Xiaohui Xie, Charless C. Fowlkes
2018 A conf
WSDM
Xiaohui Xie, Yiqun Liu, Maarten de Rijke, Jiyin He, Min Zhang, Shaoping Ma
2018 J jnl
IEEE Netw.
Fu Xiao, Xiaohui Xie, Zhetao Li, Qingyong Deng, Anfeng Liu, Lijuan Sun
2017 conf
CCIR
Zhijing Wu, Xiaohui Xie, Yiqun Liu, Min Zhang, Shaoping Ma
2017 J jnl
CoRR
Wentao Zhu, Xiang Xiang, Trac D. Tran, Gregory D. Hager, Xiaohui Xie
2017 conf
ICC
Fu Xiao, Zhengxin Guo, Hai Zhu, Xiaohui Xie, Ruchuan Wang
2017 J jnl
Peer-to-Peer Netw. Appl.
Fu Xiao, Zhifei Jiang, Xiaohui Xie, Lijuan Sun, Ruchuan Wang
2017 conf
MICCAI (3)
Wentao Zhu, Qi Lou, Yeeleng Scott Vang, Xiaohui Xie
2017 J jnl
CoRR
Wentao Zhu, Qi Lou, Yeeleng Scott Vang, Xiaohui Xie
2017 J jnl
CoRR
Wentao Zhu, Chaochun Liu, Wei Fan, Xiaohui Xie
2017 J jnl
Bioinform.
Yeeleng Scott Vang, Xiaohui Xie
2017 J jnl
CoRR
Yeeleng Scott Vang, Xiaohui Xie
2017 A* conf
SIGIR
Xiaohui Xie, Yiqun Liu, Xiaochuan Wang, Meng Wang, Zhijing Wu, Yingying Wu, Min Zhang, Shaoping Ma
2017 C conf
IPCCC
Hai Zhu, Fu Xiao, Lijuan Sun, Xiaohui Xie, Ruchuan Wang
2017 J jnl
ACM Trans. Inf. Syst.
Yiqun Liu, Xiaohui Xie, Chao Wang, Jian-Yun Nie, Min Zhang, Shaoping Ma
2017 conf
BCB
Yi Li, Daniel Quang, Xiaohui Xie
2017 J jnl
CoRR
Xiaohui Xie, Yiqun Liu, Maarten de Rijke, Jiyin He, Min Zhang, Shaoping Ma
2016 J jnl
CoRR
Wentao Zhu, Xiaohui Xie
2016 A* conf
AAAI
Wentao Zhu, Cuiling Lan, Junliang Xing, Wenjun Zeng, Yanghao Li, Li Shen, Xiaohui Xie
2016 J jnl
CoRR
Wentao Zhu, Cuiling Lan, Junliang Xing, Wenjun Zeng, Yanghao Li, Li Shen, Xiaohui Xie
2016 J jnl
CoRR
Wentao Zhu, Qi Lou, Yeeleng Scott Vang, Xiaohui Xie
2016 J jnl
Bioinform.
Yifei Chen, Yi Li, Rajiv Narayan, Aravind Subramanian, Xiaohui Xie
2016 A* conf
ICDE
Jongik Kim, Chen Li, Xiaohui Xie
2016 conf
MSN
Fu Xiao, Jing Chen, Xiaohui Xie, Lijuan Sun, Ruchuan Wang
2016 J jnl
Peer-to-Peer Netw. Appl.
Fu Xiao, Xiaohui Xie, Zhifei Jiang, Lijuan Sun, Ruchuan Wang
2015 J jnl
Bioinform.
Daniel Quang, Yifei Chen, Xiaohui Xie
2015 J jnl
Bioinform.
Yi Li, Xiaohui Xie
2015 J jnl
Int. J. Document Anal. Recognit.
In-Jung Kim, Xiaohui Xie
2015 conf
CSAR@SenSys
Fu Xiao, Xiaohui Xie, Hai Zhu, Lijuan Sun, Ruchuan Wang
2015 J jnl
BMC Genom.
Yi Li, Xiaohui Xie
2015 C conf
IPCCC
Hai Zhu, Fu Xiao, Lijuan Sun, Xiaohui Xie, Panlong Yang, Ruchuan Wang
2014 J jnl
Bioinform.
Yi Li, Xiaohui Xie
2014 J jnl
Bioinform.
Daniel Quang, Xiaohui Xie
2014 J jnl
BMC Bioinform.
Jongik Kim, Chen Li, Xiaohui Xie
2014 J jnl
BMC Syst. Biol.
Zhenzhen Zheng, Scott Christley, William T. Chiu, Ira L. Blitz, Xiaohui Xie, Ken W. Y. Cho, Qing Nie
2013 J jnl
Comput. Math. Methods Medicine
Yifei Chen, Zhenyu Jia, Dan Mercola, Xiaohui Xie
2013 J jnl
BMC Bioinform.
Yi Li, Xiaohui Xie
2013 J jnl
BMC Bioinform.
Jacob Biesinger, Yuanfeng Wang, Xiaohui Xie
2013 A* conf
ICDE
Xiaochun Yang, Bin Wang, Chen Li, Jiaying Wang, Xiaohui Xie
2013 conf
ICDIP
Chao Tang, Xiaohui Xie, Ruxu Du
2012 J jnl
Mach. Learn.
Gui-Bo Ye, Xiaohui Xie
2011 B conf
RECOMB
Daniel Newkirk, Jacob Biesinger, Alvin Chon, Kyoko Yokomori, Xiaohui Xie
2011 J jnl
J. Comput. Biol.
Daniel Newkirk, Jacob Biesinger, Alvin Chon, Kyoko Yokomori, Xiaohui Xie
2011 J jnl
CoRR
Gui-Bo Ye, Yuanfeng Wang, Yifei Chen, Xiaohui Xie
2011 A conf
AISTATS
Gui-Bo Ye, Yifei Chen, Xiaohui Xie
2011 B conf
ICMR
Xiao Zeng, Xiaohui Xie, Kongqiao Wang
2011 J jnl
BMC Bioinform.
Kenneth Daily, Vishal R. Patel, Paul Rigor, Xiaohui Xie, Pierre Baldi
2011 J jnl
BMC Bioinform.
Lingjie Weng, Fabio Macciardi, Aravind Subramanian, Guia Guffanti, Steven G. Potkin, Zhaoxia Yu, Xiaohui Xie
2011 J jnl
Comput. Stat. Data Anal.
Gui-Bo Ye, Xiaohui Xie
2010 J jnl
BMC Bioinform.
Kenny Daily, Paul Rigor, Scott Christley, Xiaohui Xie, Pierre Baldi
2010 J jnl
NeuroImage
Steven G. Potkin, Fabio Macciardi, Guia Guffanti, James H. Fallon, Qi Wang, Jessica A. Turner, Anita Lakatos, Michael F. Miles, Arthur Lander, Marquis P. Vawter, Xiaohui Xie
2010 J jnl
Bioinform.
Jiannan Wang, Inci Cetindil, Shengyue Ji, Chen Li, Xiaohui Xie, Guoliang Li, Jianhua Feng
2010 J jnl
BMC Syst. Biol.
Yuanfeng Wang, Scott Christley, Eric Mjolsness, Xiaohui Xie
2010 J jnl
CoRR
Gui-Bo Ye, Jian-Feng Cai, Xiaohui Xie
2010 J jnl
CoRR
Gui-Bo Ye, Xiaohui Xie
2010 J jnl
CoRR
Gui-Bo Ye, Xiaohui Xie
2009 J jnl
Int. J. Model. Identif. Control.
Xiaohui Xie, Qiang Sun, Ruxu Du
2009 J jnl
Int. J. Model. Identif. Control.
Xiaohui Xie, Ruxu Du, Qiang Sun
2009 J jnl
Bioinform.
Scott Christley, Yiming Lu, Chen Li, Xiaohui Xie
2009 J jnl
Bioinform.
Manuel Garber, Mitchell Guttman, Michele E. Clamp, Michael C. Zody, Nir Friedman, Xiaohui Xie
2009 J jnl
Bioinform.
Xiaohui Xie, Paul Rigor, Pierre Baldi
2007 conf
ICIP (6)
Gang Wu, Weijie Liu, Xiaohui Xie, Qiang Wei
2006 conf
ICB
Xiaohui Xie, Fei Su, Anni Cai
2005 J jnl
Neural Comput.
Justin Werfel, Xiaohui Xie, H. Sebastian Seung
2004 conf
ICBA
Xiaohui Xie, Fei Su, Anni Cai, Jingao Sun
2003 J jnl
Neural Comput.
Xiaohui Xie, H. Sebastian Seung
2003 conf
NIPS
Justin Werfel, Xiaohui Xie, H. Sebastian Seung
2002 J jnl
Neurocomputing
Martin A. Giese, Xiaohui Xie
2002 J jnl
Neural Comput.
Xiaohui Xie, Richard H. R. Hahnloser, H. Sebastian Seung
2001 conf
NIPS
Richard H. R. Hahnloser, Xiaohui Xie, H. Sebastian Seung
2001 conf
NIPS
Xiaohui Xie, Martin A. Giese
2000 conf
NIPS
Xiaohui Xie, Richard H. R. Hahnloser, H. Sebastian Seung
1999 conf
NIPS
Xiaohui Xie, H. Sebastian Seung
redb/extractors/hashes.py
← Index redb/extractors/hashes.py python
from dataclasses import asdict
from typing import Any
from datetime import datetime, timezone

import hashlib
import inspect
from struct import pack

from magika import Magika
from signify.fingerprinter import AuthenticodeFingerprinter
import ppdeep
import tlsh

import pefile
from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.models.dataclasses import Hashes
from redb.extractors.extractor import Extractor


class HashExtractor(Extractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix, elastic_index, known_benign, known_malicious
        )
        self.hashes = None
        self.elastic_index = self.index_prefix + "-hashes"
        self.filetype = Magika().identify_bytes(self.binary).output.label
        self.pe = None
        self.elf = None
        self.macho = macho
        if self.filetype == "pebin":  # else None
            try:
                self.pe = pefile.PE(self.filepath)
            except Exception as e:
                self.log.error(f"Failed to initialize PE file object: {e}")
                self.pe = None
        elif self.filetype == "elf":
            # ELF file will be created when needed in _extract_elf_hashes
            pass

    def _extract_hashes(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        
        # Initialize hash values with None
        md5 = None
        sha1 = None
        sha256 = None
        ssdeep_hash = None
        tlsh_hash = None
        
        # Calculate basic hashes with error handling
        try:
            md5 = hashlib.md5(self.binary).hexdigest()
        except Exception as e:
            self.log.error(f"Failed to calculate MD5 hash: {e}")
            
        try:
            sha1 = hashlib.sha1(self.binary).hexdigest()
        except Exception as e:
            self.log.error(f"Failed to calculate SHA1 hash: {e}")
            
        try:
            sha256 = hashlib.sha256(self.binary).hexdigest()
        except Exception as e:
            self.log.error(f"Failed to calculate SHA256 hash: {e}")
            
        try:
            ssdeep_hash = ppdeep.hash_from_file(self.filepath)
        except Exception as e:
            self.log.error(f"Failed to calculate ssdeep hash: {e}")
            
        try:
            tlsh_hash = tlsh.hash(self.binary)
        except Exception as e:
            self.log.error(f"Failed to calculate TLSH hash: {e}")
        
        # Create Hashes object with available values
        self.hashes = Hashes(
            md5 or "",
            sha1 or "",
            sha256 or "",
            ssdeep_hash or "",
            tlsh_hash or "",
        )

        if self.filetype == "pebin" and self.pe is not None:
            self.log.debug("Computing PEBIN related hash values")
            
            # Authentihash
            try:
                with open(self.filepath, 'rb') as f:
                    fingerprinter = AuthenticodeFingerprinter(f)
                    fingerprinter.add_authenticode_hashers(hashlib.sha256)
                    self.hashes.authentihash = fingerprinter.hash()['sha256'].hex()
            except Exception as e:
                self.log.error(f"Failed to calculate Authentihash: {e}")
                self.hashes.authentihash = None
                
            # Imphash
            try:
                self.hashes.imphash = self.pe.get_imphash()
            except Exception as e:
                self.log.error(f"Failed to calculate Imphash: {e}")
                self.hashes.imphash = None
                
            # Rich header hashes
            try:
                if self.pe.parse_rich_header():
                    self.log.debug("Computing RichHeader related hash values")
                    
                    richhash = self._compute_richhash()
                    if richhash:
                        self.hashes.richhash = richhash
                        
                    richpe_hash = self._compute_richpe_hash()
                    if richpe_hash:
                        self.hashes.richpe_hash = richpe_hash
                        
                    richpv_result = self._compute_richpv_hash()
                    if richpv_result:
                        self.hashes.richpv_hash, self.hashes.richpv_hash_sorted = richpv_result
            except Exception as e:
                self.log.error(f"Failed to calculate Rich header hashes: {e}")
        elif self.filetype == "pebin" and self.pe is None:
            self.log.warning("PE file type detected but PE object initialization failed - skipping PE-specific hashes")

        elif self.filetype == "elf":
            self.log.debug("Computing ELF related hash values")
            self._extract_elf_hashes()
        elif self.filetype == "macho":
            self.log.debug("Computing Mach-O related hash values")
            self._extract_macho_hashes()
        elif self.filetype == "apk":
            self.log.debug("Computing APK related hash values")
            self._extract_apk_hashes()
        else:
            pass
        self.log.debug(f"Hashes dump: {asdict(self.hashes)}")
        return self.hashes

    def _compute_richhash(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            rich_header = self.pe.parse_rich_header()
            if not rich_header:
                return ""
            data = rich_header["clear_data"]
            return hashlib.md5(data).hexdigest().lower()
        except:
            return ""

    def _compute_richpe_hash(self):
        """
        Computes the RichPE hash given a file path or PE object.

        RichPE hash is includes RichHeader CompID and count, as well as
        fields from IMAGE_FILE_HEADER and IMAGE_OPTIONAL_HEADER

        Parameters:
        input: it can be either a file path or a PE object

        Returns:
        richpe_hash: md5 hash of the RichPE value
        None: if no Rich Header present
        """
        try:
            # Attempt to parse Rich header
            self.log.debug(inspect.currentframe().f_code.co_name)
            rich_header = self.pe.parse_rich_header()
            if rich_header is None:
                return None

            # Get list of @Comp.IDs and counts from Rich header
            # Elements in rich_fields at even indices are @Comp.IDs
            # Elements in rich_fields at odd indices are counts
            rich_fields = rich_header.get("values", None)
            if not rich_fields or len(rich_fields) % 2 != 0:
                return None

            md5 = hashlib.md5()

            # Update hash using @Comp.IDs and masked counts from Rich header
            while len(rich_fields):
                compid = rich_fields.pop(0)
                count = rich_fields.pop(0)
                mask = 2 ** (count.bit_length() // 2 + 1) - 1
                count |= mask
                md5.update(pack("<L", compid))
                md5.update(pack("<L", count))

            # Update hash using metadata from the PE header
            md5.update(pack("<L", self.pe.FILE_HEADER.Machine))
            md5.update(pack("<L", self.pe.FILE_HEADER.Characteristics))
            md5.update(pack("<L", self.pe.OPTIONAL_HEADER.Subsystem))
            md5.update(pack("<B", self.pe.OPTIONAL_HEADER.MajorLinkerVersion))
            md5.update(pack("<B", self.pe.OPTIONAL_HEADER.MinorLinkerVersion))
            md5.update(pack("<L", self.pe.OPTIONAL_HEADER.MajorOperatingSystemVersion))
            md5.update(pack("<L", self.pe.OPTIONAL_HEADER.MinorOperatingSystemVersion))
            md5.update(pack("<L", self.pe.OPTIONAL_HEADER.MajorImageVersion))
            md5.update(pack("<L", self.pe.OPTIONAL_HEADER.MinorImageVersion))
            md5.update(pack("<L", self.pe.OPTIONAL_HEADER.MajorSubsystemVersion))
            md5.update(pack("<L", self.pe.OPTIONAL_HEADER.MinorSubsystemVersion))

            return md5.hexdigest()
        except Exception as e:
            self.log.error(f"Failed to compute RichPE hash: {e}")
            return None

    def _compute_richpv_hash(self):
        """
        Compute the RichPV hash values, sorted and unsorted.
        RichPV excludes the most volatile Rich Header field from the MD5 input data,
        the Product Count (pC) field.

        Returns:
        richpv_hash_unsorted: md5 hash of the RichPV value unsorted
        richpv_hash_sorted: md5 hash of the RichPV value sorted
        None: if no Rich Header present
        """
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            # Attempt to parse Rich header
            rich_header = self.pe.parse_rich_header()
            if rich_header is None:
                return None

            # Get list of @Comp.IDs and counts from Rich header
            # Elements in rich_fields at even indices are @Comp.IDs
            # Elements in rich_fields at odd indices are counts
            rich_fields = rich_header.get("values", None)
            if not rich_fields or len(rich_fields) % 2 != 0:
                return None

            md5 = hashlib.md5()
            md5_sorted = hashlib.md5()
            sorted_vector = []

            # Update hash using @Comp.IDs only
            for i in range(0, len(rich_fields), 2):
                compid = rich_fields[i]
                md5.update(pack("<L", compid))
                sorted_vector.append(compid)

            sorted_vector.sort()
            for compid in sorted_vector:
                md5_sorted.update(pack("<L", compid))

            return md5.hexdigest(), md5_sorted.hexdigest()
        except Exception as e:
            self.log.error(f"Failed to compute RichPV hash: {e}")
            return None

    def _extract_elf_hashes(self):
        """Extract ELF specific similarity hashes."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        try:
            with open(self.filepath, 'rb') as f:
                elf = ELFFile(f)
                if not elf:
                    return

                # Generate all similarity hashes
                import_hash = self._generate_elf_import_hash(elf)
                export_hash = self._generate_elf_export_hash(elf)
                section_hash = self._generate_elf_section_hash(elf)
                symbol_hash = self._generate_elf_symbol_hash(elf)
                dynamic_hash = self._generate_elf_dynamic_hash(elf)

                # Only set hashes if they have meaningful values
                if import_hash:
                    self.hashes.import_hash = import_hash
                if export_hash:
                    self.hashes.export_hash = export_hash
                if section_hash:
                    self.hashes.section_hash = section_hash
                if symbol_hash:
                    self.hashes.symhash = symbol_hash
                if dynamic_hash:
                    self.hashes.dynamic_hash = dynamic_hash

        except Exception as e:
            self.log.error(f"Failed to extract ELF hashes: {e}")

    def _generate_elf_import_hash(self, elf) -> str:
        """Generate MD5 hash of sorted, deduplicated imported symbol names."""
        try:
            imported_symbols = set()

            # Get dynamic symbol table
            dynsym_section = elf.get_section_by_name('.dynsym')
            if dynsym_section and hasattr(dynsym_section, 'iter_symbols'):
                for symbol in dynsym_section.iter_symbols():
                    # Look for undefined symbols (imports)
                    if (symbol.entry.get('st_shndx', 0) == 'SHN_UNDEF' and
                        symbol.name and
                        symbol.entry.get('st_info', {}).get('bind') in ['STB_GLOBAL', 'STB_WEAK']):
                        imported_symbols.add(symbol.name)

            # Also check relocations for additional imports
            for section in elf.iter_sections():
                if hasattr(section, 'iter_relocations'):
                    try:
                        for relocation in section.iter_relocations():
                            if hasattr(relocation, 'symbol') and relocation.symbol and relocation.symbol.name:
                                imported_symbols.add(relocation.symbol.name)
                    except:
                        pass

            # Sort and concatenate
            sorted_imports = sorted(list(imported_symbols))

            # Return None if no imports found
            if not sorted_imports:
                return None

            imports_string = '|'.join(sorted_imports)

            # Generate MD5 hash
            return hashlib.md5(imports_string.encode('utf-8')).hexdigest()

        except Exception as e:
            self.log.error(f"Error generating ELF import hash: {e}")
            return None

    def _generate_elf_export_hash(self, elf) -> str:
        """Generate MD5 hash of sorted, deduplicated exported symbol names."""
        try:
            exported_symbols = set()

            # Check both static and dynamic symbol tables
            symbol_sections = ['.symtab', '.dynsym']

            for section_name in symbol_sections:
                section = elf.get_section_by_name(section_name)
                if not section or not hasattr(section, 'iter_symbols'):
                    continue

                for symbol in section.iter_symbols():
                    # Check if symbol is exported (defined and globally visible)
                    if (symbol.name and
                        symbol.entry.get('st_shndx', 0) != 'SHN_UNDEF' and
                        symbol.entry.get('st_info', {}).get('bind') in ['STB_GLOBAL', 'STB_WEAK'] and
                        symbol.entry.get('st_info', {}).get('type') in ['STT_FUNC', 'STT_OBJECT']):
                        exported_symbols.add(symbol.name)

            # Sort and concatenate
            sorted_exports = sorted(list(exported_symbols))

            # Return None if no exports found
            if not sorted_exports:
                return None

            exports_string = '|'.join(sorted_exports)

            # Generate MD5 hash
            return hashlib.md5(exports_string.encode('utf-8')).hexdigest()

        except Exception as e:
            self.log.error(f"Error generating ELF export hash: {e}")
            return None

    def _generate_elf_section_hash(self, elf) -> str:
        """Generate MD5 hash of section layout (names, types, flags sequence)."""
        try:
            section_info = []

            for section in elf.iter_sections():
                header = section.header
                section_name = section.name or "<unnamed>"
                section_type = header.get('sh_type', 'SHT_NULL')
                section_flags = header.get('sh_flags', 0)

                # Create a consistent representation
                section_repr = f"{section_name}:{section_type}:{section_flags}"
                section_info.append(section_repr)

            # Return None if no meaningful sections found
            if not section_info:
                return None

            # Join all section info
            sections_string = '|'.join(section_info)

            # Generate MD5 hash
            return hashlib.md5(sections_string.encode('utf-8')).hexdigest()

        except Exception as e:
            self.log.error(f"Error generating ELF section hash: {e}")
            return None

    def _generate_elf_symbol_hash(self, elf) -> str:
        """Generate MD5 hash of sorted symbol names and types."""
        try:
            symbol_info = set()

            # Check both static and dynamic symbol tables
            symbol_sections = ['.symtab', '.dynsym']

            for section_name in symbol_sections:
                section = elf.get_section_by_name(section_name)
                if not section or not hasattr(section, 'iter_symbols'):
                    continue

                for symbol in section.iter_symbols():
                    if symbol.name:
                        symbol_type = symbol.entry.get('st_info', {}).get('type', 'STT_NOTYPE')
                        symbol_bind = symbol.entry.get('st_info', {}).get('bind', 'STB_LOCAL')

                        # Create a consistent representation
                        symbol_repr = f"{symbol.name}:{symbol_type}:{symbol_bind}"
                        symbol_info.add(symbol_repr)

            # Sort and concatenate
            sorted_symbols = sorted(list(symbol_info))

            # Return None if no symbols found
            if not sorted_symbols:
                return None

            symbols_string = '|'.join(sorted_symbols)

            # Generate MD5 hash
            return hashlib.md5(symbols_string.encode('utf-8')).hexdigest()

        except Exception as e:
            self.log.error(f"Error generating ELF symbol hash: {e}")
            return None

    def _generate_elf_dynamic_hash(self, elf) -> str:
        """Generate MD5 hash of dynamic section entries (DT_* tags)."""
        try:
            dynamic_info = []

            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                return None

            # Extract dynamic tags and their values
            for tag in dynamic_section.iter_tags():
                dt_tag = tag.entry.d_tag

                # Create a representation based on tag type
                if dt_tag == 'DT_NEEDED':
                    dynamic_info.append(f"DT_NEEDED:{tag.needed}")
                elif dt_tag == 'DT_SONAME':
                    dynamic_info.append(f"DT_SONAME:{tag.soname}")
                elif dt_tag == 'DT_RPATH':
                    dynamic_info.append(f"DT_RPATH:{tag.rpath}")
                elif dt_tag == 'DT_RUNPATH':
                    dynamic_info.append(f"DT_RUNPATH:{tag.runpath}")
                else:
                    # For other tags, use the tag name and value
                    dt_value = tag.entry.d_val if hasattr(tag.entry, 'd_val') else 0
                    dynamic_info.append(f"{dt_tag}:{dt_value}")

            # Sort to ensure consistent ordering
            dynamic_info.sort()
            dynamics_string = '|'.join(dynamic_info)

            # Generate MD5 hash
            return hashlib.md5(dynamics_string.encode('utf-8')).hexdigest()

        except Exception as e:
            self.log.error(f"Error generating ELF dynamic hash: {e}")
            return None

    def _extract_macho_hashes(self):
        """Extract Mach-O specific similarity hashes using machofile API.

        For FAT binaries, this extracts hashes for the current file being processed
        (either the FAT container or an individual slice). The machofile library
        handles the architecture-specific extraction when an arch parameter is provided.

        For slices: We parse the slice file directly since it's a standalone Mach-O.
        For FAT container: We use the provided macho object with combined/fat hashes.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)

        try:
            # If we have a pre-parsed macho object (FAT container or single-arch with passed object)
            if self.macho:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1

                if is_fat:
                    # For FAT container, get combined hashes (key may be 'fat' or 'combined')
                    all_hashes = self.macho.get_similarity_hashes()
                    if all_hashes:
                        # Try 'fat' first, then 'combined' for backwards compatibility
                        similarity_hashes = all_hashes.get('fat', all_hashes.get('combined', {}))
                    else:
                        similarity_hashes = {}
                else:
                    # Single-arch with pre-parsed object
                    similarity_hashes = self.macho.get_similarity_hashes(arch=architectures[0]) if architectures else {}
            else:
                # No pre-parsed object - parse the file (slice case)
                import machofile
                macho = machofile.UniversalMachO(self.filepath)
                macho.parse()

                architectures = macho.get_architectures()
                if architectures:
                    # For a slice, there's only one architecture
                    similarity_hashes = macho.get_similarity_hashes(arch=architectures[0]) or {}
                else:
                    similarity_hashes = {}

            # Set the hash values on the Hashes object
            if similarity_hashes:
                if similarity_hashes.get('dylib_hash'):
                    self.hashes.macho_dylib_hash = similarity_hashes['dylib_hash']
                if similarity_hashes.get('import_hash'):
                    self.hashes.macho_import_hash = similarity_hashes['import_hash']
                if similarity_hashes.get('export_hash'):
                    self.hashes.macho_export_hash = similarity_hashes['export_hash']
                if similarity_hashes.get('entitlement_hash'):
                    self.hashes.macho_entitlement_hash = similarity_hashes['entitlement_hash']
                if similarity_hashes.get('symhash'):
                    self.hashes.macho_symhash = similarity_hashes['symhash']

        except Exception as e:
            self.log.error(f"Failed to extract Mach-O hashes: {e}")

    def _extract_apk_hashes(self):
        """Extract APK specific similarity hashes (permhash)."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            from permhash.functions import permhash_apk
            ph = permhash_apk(self.filepath)
            if ph:
                self.hashes.permhash = ph
        except Exception as e:
            self.log.error(f"Failed to extract APK hashes: {e}")

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            self._extract_hashes()
            return self.hashes
        except Exception as e:
            self.log.error(f"Error extracting hashes: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.hashes
        elif exporter_type == "ClickHouseExporter":
            # Safely get hash values with fallbacks for None values
            sha256 = getattr(self.hashes, 'sha256', None) or ""
            md5 = getattr(self.hashes, 'md5', None) or ""
            sha1 = getattr(self.hashes, 'sha1', None) or ""
            ssdeep_hash = getattr(self.hashes, 'ssdeep_hash', None) or ""
            tlsh_hash = getattr(self.hashes, 'tlsh_hash', None) or ""
            authentihash = getattr(self.hashes, 'authentihash', None)
            imphash = getattr(self.hashes, 'imphash', None)
            impfuzzy = getattr(self.hashes, 'impfuzzy', None)
            typerefhash = getattr(self.hashes, 'typerefhash', None)
            richhash = getattr(self.hashes, 'richhash', None)
            richpe_hash = getattr(self.hashes, 'richpe_hash', None)
            richpv_hash = getattr(self.hashes, 'richpv_hash', None)
            richpv_hash_sorted = getattr(self.hashes, 'richpv_hash_sorted', None)
            # ELF hashes
            import_hash = getattr(self.hashes, 'import_hash', None)
            export_hash = getattr(self.hashes, 'export_hash', None)
            section_hash = getattr(self.hashes, 'section_hash', None)
            symbol_hash = getattr(self.hashes, 'symhash', None)
            dynamic_hash = getattr(self.hashes, 'dynamic_hash', None)
            # Mach-O hashes
            macho_dylib_hash = getattr(self.hashes, 'macho_dylib_hash', None)
            macho_import_hash = getattr(self.hashes, 'macho_import_hash', None)
            macho_export_hash = getattr(self.hashes, 'macho_export_hash', None)
            macho_entitlement_hash = getattr(self.hashes, 'macho_entitlement_hash', None)
            macho_symhash = getattr(self.hashes, 'macho_symhash', None)
            # APK hashes
            permhash = getattr(self.hashes, 'permhash', None)

            data = [[
                sha256,
                md5,
                sha1,
                ssdeep_hash,
                tlsh_hash,
                authentihash,
                imphash,
                impfuzzy,
                typerefhash,
                richhash,
                richpe_hash,
                richpv_hash,
                richpv_hash_sorted,
                import_hash,
                export_hash,
                section_hash,
                symbol_hash,
                dynamic_hash,
                macho_dylib_hash,
                macho_import_hash,
                macho_export_hash,
                macho_entitlement_hash,
                macho_symhash,
                permhash,
                datetime.now(timezone.utc)
            ]]

            column_names = [
                'sha256', 'md5', 'sha1', 'ssdeep_hash', 'tlsh_hash',
                'authentihash', 'imphash', 'impfuzzy', 'typerefhash',
                'richhash', 'richpe_hash', 'richpv_hash', 'richpv_hash_sorted',
                'import_hash', 'export_hash', 'section_hash', 'symbol_hash', 'dynamic_hash',
                'macho_dylib_hash', 'macho_import_hash', 'macho_export_hash',
                'macho_entitlement_hash', 'macho_symhash',
                'permhash',
                'analysis_date'
            ]

            column_type_names = [
                # sha256, md5, sha1
                'String', 'String', 'String',
                # ssdeep_hash, tlsh_hash
                'Nullable(String)', 'Nullable(String)',
                # authentihash, imphash, impfuzzy, typerefhash
                'Nullable(String)', 'Nullable(String)',
                'Nullable(String)', 'Nullable(String)',
                # richhash, richpe_hash, richpv_hash, richpv_hash_sorted
                'Nullable(String)', 'Nullable(String)',
                'Nullable(String)', 'Nullable(String)',
                # import_hash, export_hash, section_hash, symbol_hash, dynamic_hash
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'Nullable(FixedString(32))',
                # macho_dylib_hash, macho_import_hash, macho_export_hash, macho_entitlement_hash, macho_symhash
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'Nullable(FixedString(32))',
                # permhash (APK)
                'Nullable(FixedString(64))',
                # analysis_date
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

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

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