Wei Xue

245 papers A* 7A 13B 7C 3Misc 4Journal 154Unranked 56
YearRankTypeTitle / Venue / Authors
2026 J jnl
Signal Process.
Wenwen Zhou, Wei Xue, Dongxue Li, Peisong Jia, Sergey V. Volvenko
2026 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Mingyang Du, Junpeng Shi, Wei Xue, Zhihui Li, Zhiyuan Zhang, Daping Bi
2026 J jnl
Neural Comput. Appl.
Wei Xue, Hong He
2026 J jnl
Signal Image Video Process.
Yebin Chen, Jingjing Gui, Wei Xue, Jing Zhou, Xiao Zheng
2026 J jnl
CoRR
Hao Jing, Sa Xiao, Haoyu Li, Huadong Xiao, Wei Xue
2026 J jnl
IEEE Trans. Vis. Comput. Graph.
Junwen Duan, Wei Xue, Ziyao Kang, Shixia Liu, Jiazhi Xia
2026 J jnl
CoRR
Wei Xue, Mingcheng Li, Xuecheng Wu, Jingqun Tang, Dingkang Yang, Lihua Zhang
2025 J jnl
IEEE Trans. Fuzzy Syst.
Zhengxin Xia, Wei Xue, Jia Zhai, Ta Zhou, Chong Su
2025 J jnl
Appl. Soft Comput.
Wei Xue, Lilong Duan, Xudong Hong, Xiao Zheng
2025 J jnl
Int. J. Comput. Sci. Math.
Wei Xue, Peng Liu, Zhuan Xin, Jing Chen
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Dongxue Li, Dingfeng Yu, Yidong Xu, Peisong Jia, Wei Xue
2025 J jnl
CoRR
Honglu Sun, Hao Jing, Zhixiang Dai, Sa Xiao, Wei Xue, Jian Sun, Qifeng Lu
2025 B conf
IJCNN
Xiang Wang, Hui Xu, Jing Cai, Ta Zhou, Xibei Yang, Wei Xue
2025 J jnl
Signal Image Video Process.
Shengping Zhao, Wei Xue, Yidong Xu
2025 Misc conf
ICASSP
Siyuan Hou, Shansong Liu, Ruibin Yuan, Wei Xue, Ying Shan, Mangsuo Zhao, Chao Zhang
2025 J jnl
Neural Networks
Shulin He, Wei Xue, Yang Yang, Huaiwen Zhang, Jiahao Pan, Xueliang Zhang
2025 J jnl
CoRR
Feng Wang, Yiding Sun, Jiaxin Mao, Wei Xue, Danqing Xu
2025 conf
ACL (1)
Iuliia Zaitova, Badr M. Abdullah, Wei Xue, Dietrich Klakow, Bernd Möbius, Tania Avgustinova
2025 J jnl
CoRR
Iuliia Zaitova, Badr M. Abdullah, Wei Xue, Dietrich Klakow, Bernd Möbius, Tania Avgustinova
2025 J jnl
Proc. VLDB Endow.
Fengxin Li, Yi Li, Yue Liu, Chao Zhou, Yuan Wang, Xiaoxiang Deng, Wei Xue, Dapeng Liu, Lei Xiao, Haijie Gu, Jie Jiang, Hongyan Liu, Biao Qin, Jun He
2025 J jnl
CoRR
Junwen Duan, Wei Xue, Ziyao Kang, Shixia Liu, Jiazhi Xia
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Wei Xue, Yonghao Wang, Shaoquan Zhang, Xiao Zheng, Ping Zhong
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Wei Xue, Tiancheng Shao, Mingyang Du, Xiao Zheng, Ping Zhong
2025 J jnl
CoRR
Ziyun Qian, Runyu Xiao, Shuyuan Tu, Wei Xue, Dingkang Yang, Mingcheng Li, Dongliang Kou, Minghao Han, Zizhi Chen, Lihua Zhang
2025 conf
NoDaLiDa/Baltic-HLT
Maria Kunilovskaya, Iuliia Zaitova, Wei Xue, Irina Stenger, Tania Avgustinova
2025 J jnl
Digit. Signal Process.
Wenwen Zhou, Yanmin Zhang, Chunlong Huang, Sergey V. Volvenko, Wei Xue
2025 conf
RoboSoft
Joshua Knospler, Nicholas Pagliocca, Wei Xue, Mitja Trkov
2025 conf
ICIT
Yang Yang, Lei Shu Zhang, Wei Xue, Yao Xian Gu, Lin Zhang, Huan Wang
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Wei Xue, Hong He, Yanbing Wang, Ying Zhao
2025 J jnl
Qual. Reliab. Eng. Int.
Tianlong Li, Renyan Jiang, Wei Xue
2025 A conf
INTERSPEECH
Wei Xue, Iuliia Zaitova, Bernd Möbius
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yongfei Wang, Jianxin Liu, Rongwen Guo, Kejia Pan, Gangqiang Yang, Jian Li, Xiaokang Deng, Wei Xue
2024 conf
AIM
Joshua Knospler, Wei Xue, Mitja Trkov
2024 J jnl
CoRR
Junwei Pan, Wei Xue, Ximei Wang, Haibin Yu, Xun Liu, Shijie Quan, Xueming Qiu, Dapeng Liu, Lei Xiao, Jie Jiang
2024 A* conf
KDD
Junwei Pan, Wei Xue, Ximei Wang, Haibin Yu, Xun Liu, Shijie Quan, Xueming Qiu, Dapeng Liu, Lei Xiao, Jie Jiang
2024 J jnl
Comput. Biol. Medicine
Ningqi Wang, Yarong Li, Shuwen Han, Yaozhong Zhang, Jun Yang, Zheng Yin, Cong Deng, Zijing Liu, Yinhang Wu, Wei Wu, Wei Xue, Tianjie Yang, Yangchun Xu, Qirong Shen, Gaofei Jiang, Zhong Wei
2024 conf
IEEM
Renyan Jiang, Wei Xue, Yu Cao
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Xinzhe Ye, Wei Xue, Xiaolong Chen, Yanmin Zhang, Xinghai Wang, Jian Guan
2024 A conf
FAST
Yingjin Qian, Marc-André Vef, Patrick Farrell, Andreas Dilger, Xi Li, Shuichi Ihara, Yinjin Fu, Wei Xue, André Brinkmann
2024 A conf
INTERSPEECH
Iuliia Zaitova, Irina Stenger, Wei Xue, Tania Avgustinova, Bernd Möbius, Dietrich Klakow
2024 J jnl
Intell. Data Anal.
Jun Huang, Dian Wang, Xudong Hong, Xiwen Qu, Wei Xue
2024 J jnl
CoRR
Siyuan Hou, Shansong Liu, Ruibin Yuan, Wei Xue, Ying Shan, Mangsuo Zhao, Chao Zhang
2024 J jnl
Symmetry
Wenjing Shang, Ilya I. Lavrenyuk, Sergey B. Makarov, Anna Ovsyannikova, Sergey V. Zavjalov, Dingfeng Yu, Wei Xue
2024 A* conf
NeurIPS
Xiaoxia Cheng, Zeqi Tan, Wei Xue, Weiming Lu
2024 conf
ACL (1)
Wei Xue, Yongliang Shen, Wenqi Ren, Jietian Guo, Shiliang Pu, Weiming Lu
2024 J jnl
Remote. Sens.
Yunlong Dong, Weiqi Li, Dongxue Li, Chao Liu, Wei Xue
2024 conf
MetaCom
Lin Zhang, Huan Wang, Wei Xue, Cuijuan Yang, Xianyao Gu, Tingting Sun
2024 J jnl
CoRR
Fengxin Li, Yi Li, Yue Liu, Chao Zhou, Yuan Wang, Xiaoxiang Deng, Wei Xue, Dapeng Liu, Lei Xiao, Haijie Gu, Jie Jiang, Hongyan Liu, Biao Qin, Jun He
2024 conf
AIM
Joshua Knospler, Wei Xue, Mitja Trkov
2024 A* conf
KDD
Congyun Jin, Ming Zhang, Weixiao Ma, Yujiao Li, Yingbo Wang, Yabo Jia, Yuliang Du, Tao Sun, Haowen Wang, Cong Fan, Jinjie Gu, Chenfei Chi, Xiangguo Lv, Fangzhou Li, Wei Xue, Yiran Huang
2024 J jnl
CoRR
Congyun Jin, Ming Zhang, Xiaowei Ma, Yujiao Li, Yingbo Wang, Yabo Jia, Yuliang Du, Tao Sun, Haowen Wang, Cong Fan, Jinjie Gu, Chenfei Chi, Xiangguo Lv, Fangzhou Li, Wei Xue, Yiran Huang
2024 J jnl
Frontiers Big Data
Thong Vu, Tyler Petty, Kemal Yakut, Muhammad Usman, Wei Xue, Francis M. Haas, Robert A. Hirsh, Xinghui Zhao
2024 conf
KSEM (4)
Yang Yang, Wei Xue, Huan Wang, Lin Zhang, Xianyao Gu, Min Sun
2024 J jnl
Comput. Commun.
Long Jiao, Ling Gao, Jie Zheng, Peiqing Yang, Wei Xue
2024 A* conf
KDD
Lei Liu, Xiaoyan Yang, Fangzhou Li, Chenfei Chi, Yue Shen, Shiwei Lyu, Ming Zhang, Xiaowei Ma, Xiangguo Lv, Liya Ma, Zhiqiang Zhang, Wei Xue, Yiran Huang, Jinjie Gu
2024 J jnl
CoRR
Lei Liu, Xiaoyan Yang, Fangzhou Li, Chenfei Chi, Yue Shen, Shiwei Lyu, Ming Zhang, Xiaowei Ma, Xianguo Lyu, Liya Ma, Zhiqiang Zhang, Wei Xue, Yiran Huang, Jinjie Gu
2024 A conf
INTERSPEECH
Wei Xue, Ivan Yuen, Bernd Möbius
2023 conf
NaNA
Wei Wei, Feng Zang, Liben Huang, Wei Xue
2023 conf
ISSSR
Renyan Jiang, Fengping Li, Wei Xue, Xiao Li, Kunpeng Zhang
2023 J jnl
Knowl. Based Syst.
Wei Xue, Hong He
2023 J jnl
Reliab. Eng. Syst. Saf.
Renyan Jiang, Fengping Li, Wei Xue, Yu Cao, Kunpeng Zhang
2023 J jnl
Briefings Bioinform.
Gaofei Jiang, Jiaxuan Zhang, Yaozhong Zhang, Xinrun Yang, Tingting Li, Ningqi Wang, Xingjian Chen, Fang-Jie Zhao, Zhong Wei, Yangchun Xu, Qirong Shen, Wei Xue
2023 J jnl
IEEE Trans. Instrum. Meas.
Wei Xue, Jing Sun, Yan Yang, Tian Gao, Sen Yan, Xiaoming Chen
2023 J jnl
Remote. Sens.
Wei Xue, Kehui Chen, Ting Li, Li Liu, Jian Zhang
2023 conf
EMNLP (Findings)
Guiyang Hou, Yongliang Shen, Wenqi Zhang, Wei Xue, Weiming Lu
2023 J jnl
IEEE Trans. Intell. Veh.
Wei Xue, Zheng Wang, Rencheng Zheng, Xutao Mei, Bo Yang, Kimihiko Nakano
2023 conf
ISBI
Fei Chen, Jiacheng Wang, Baptiste Magnier, Wei Xue, Shaohui Huang, Liansheng Wang
2023 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Haoyuan Shi, Haisong Feng, Zhenxiao Lu, Wei Xue, Congshan Yang, Zhenyu Yue
2023 J jnl
Intell. Data Anal.
Lilong Duan, Wei Xue, Xiaolei Gu, Xiao Luo, Yongsheng He
2023 J jnl
Remote. Sens.
Wei Xue, Jonghan Ko, Ruyin Cao, Zhiguo Yu
2023 conf
ICMLSC
Xueyu Wei, Wei Xue, Wei Zhao, Yuanxia Shen, Gaohang Yu
2023 conf
EMOOCs
Wei Xue, Eric Bruillard
2023 J jnl
Speech Commun.
Wei Xue, Catia Cucchiarini, Roeland van Hout, Helmer Strik
2023 J jnl
IEEE Commun. Lett.
Mingxin Liu, Wei Xue, Jincheng Gao, Peisong Jia, Yidong Xu, Sergey V. Volvenko
2023 conf
ISBI
Lianyu Zhou, Dong Wei, Donghuan Lu, Wei Xue, Liansheng Wang, Yefeng Zheng
2023 J jnl
CoRR
Lianyu Zhou, Dong Wei, Donghuan Lu, Wei Xue, Liansheng Wang, Yefeng Zheng
2023 J jnl
CoRR
Shiwei Lyu, Chenfei Chi, Hongbo Cai, Lei Shi, Xiaoyan Yang, Lei Liu, Xiang Chen, Deng Zhao, Zhiqiang Zhang, Xianguo Lyu, Ming Zhang, Fangzhou Li, Xiaowei Ma, Yue Shen, Jinjie Gu, Wei Xue, Yiran Huang
2023 J jnl
IEEE Trans. Instrum. Meas.
Xuanhe Fan, Fangwu Liu, Zhijie Huang, Wei Xue, Tong Gao, Jia Fu, Jingjing Zhang
2023 J jnl
ISPRS Int. J. Geo Inf.
Zhihao Sun, Dezhi Kang, Hongzan Jiao, Ya Yang, Wei Xue, Hao Wu, Lingbo Liu, Yuwei Su, Zhenghong Peng
2023 J jnl
CoRR
Wei Xue, Yongliang Shen, Wenqi Ren, Jietian Guo, Shiliang Pu, Weiming Lu
2023 J jnl
Appl. Soft Comput.
Hui Xu, Hong He, Wei Xue, Zhuangzhuang Dai, Yong Hao
2022 J jnl
Remote. Sens.
Wei Xue, Zhiming Chen, Weiwei Tian, Yunhua Wu, Bing Hua
2022 conf
DSA
Renyan Jiang, Xiaowei Zhu, Wei Xue, Rangda Wu, Yu Cao
2022 conf
ICARM
Boyang Xue, Wei Xue, Qinghua Huang
2022 J jnl
Digit. Signal Process.
Qishuai Wu, Yingsong Li, Wei Xue
2022 ed.
ARC
Lin Gan, Yu Wang, Wei Xue, Thomas Chau
2022 J jnl
Speech Commun.
Wei Xue, Catia Cucchiarini, Roeland van Hout, Helmer Strik
2022 J jnl
IEEE Trans. Instrum. Meas.
Wei Xue, Xiaoming Chen, Yan Yang, Yi Huang
2022 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Tao Liang, Yingsong Li, Xiao Han, Wei Xue, Huawei Tu
2022 J jnl
CoRR
Xin Wang, Wei Xue, Yilun Han, Guangwen Yang
2022 conf
ICHI
Kemal Yakut, Muhammad Usman, Wei Xue, Francis M. Haas, Robert A. Hirsh, Joseph Boothby, Xinghui Zhao, Tyler Petty
2022 J jnl
Appl. Soft Comput.
Wei Xue, Ta Zhou, Jing Cai
2022 conf
IPMV
Xiaowen Wang, Xiaoyan Xia, Qiao Li, Wei Xue
2022 J jnl
BMC Bioinform.
Haisong Feng, Ying Xiang, Xiaosong Wang, Wei Xue, Zhenyu Yue
2022 J jnl
CoRR
Jiahao Qi, Zhiqiang Gong, Xingyue Liu, Kangcheng Bin, Chen Chen, Yongqian Li, Wei Xue, Yu Zhang, Ping Zhong
2022 J jnl
Sci. China Inf. Sci.
Xiaobo Liu, Wei Xue, Xiaoming Chen, Anxue Zhang, Qiang Cheng, Zongben Xu
2022 J jnl
Telecommun. Syst.
Mingxin Liu, Wei Xue, Jincheng Gao, Yidong Xu, Peisong Jia, Wenjian Chen
2022 conf
PRICAI (3)
Wei Xue, Haihong Zhang, Xueyu Wei, Tao Tao, Xue Li
2022 B conf
CLOUD
Guangwen Yang, Liana Wang, Wei Xue
2022 J jnl
IEEE Trans. Instrum. Meas.
Furong Li, Shan Huang, Wei Xue, Yuxin Ren, Xiaoming Chen
2022 J jnl
CoRR
Wei Xue, Xiaojiang Peng
2022 J jnl
IEEE Trans. Medical Imaging
Yun Gu, Yunze Xu, Xiaolin Huang, Jie Yang, Wei Xue, Guang-Zhong Yang
2022 J jnl
J. Electronic Imaging
Zhiming Chen, Wei Xue, Weiwei Tian, Yunhua Wu, Bing Hua
2022 J jnl
CoRR
Yu Zhang, Zhiqiang Gong, Yichuang Zhang, Yongqian Li, Kangcheng Bin, Jiahao Qi, Wei Xue, Ping Zhong
2022 J jnl
Inf. Technol. Manag.
Yinglu Sun, Wei Xue, Subir Bandyopadhyay, Dong Cheng
2021 J jnl
Symmetry
Sergey B. Makarov, Mingxin Liu, Anna S. Ovsyannikova, Sergey V. Zavjalov, Ilya I. Lavrenyuk, Wei Xue, Yidong Xu
2021 J jnl
Remote. Sens.
Jiahao Qi, Pengcheng Wan, Zhiqiang Gong, Wei Xue, Aihuan Yao, Xingyue Liu, Ping Zhong
2021 conf
ISICA
Shicheng Guo, Xueyu Wei, Yun Xu, Wei Xue, Xuangou Wu, Bo Wei
2021 J jnl
IEEE Trans. Instrum. Meas.
Wei Xue, Furong Li, Xiaoming Chen, Shitao Zhu, Anxue Zhang, Tommy Svensson
2021 J jnl
Comput. Biol. Medicine
Dingyi Liu, Xin Peng, Xiaoqing Liu, Yiming Li, Yiming Bao, Jianwei Xu, Xianzhang Bian, Wei Xue, Dahong Qian
2021 J jnl
Sensors
Jie Wang, Wei Xue, Xiaojun Shi, Yangchun Xu, Caixia Dong
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jiahao Qi, Zhiqiang Gong, Wei Xue, Xingyue Liu, Aihuan Yao, Ping Zhong
2021 J jnl
Signal Process.
Tao Liang, Yingsong Li, Yuriy V. Zakharov, Wei Xue, Junwei Qi
2021 J jnl
Remote. Sens.
Wei Xue, Seungtaek Jeong, Jonghan Ko, Jong-Min Yeom
2021 J jnl
IEEE Trans. Instrum. Meas.
Wei Xue, Furong Li, Xiaoming Chen
2021 J jnl
Expert Syst. Appl.
Laishui Lv, Kun Zhang, Ting Zhang, Xun Li, Qi Sun, Lilinqing Zhang, Wei Xue
2021 B conf
IJCNN
Pengcheng Wan, Yuechen Mu, Wei Xue, Qiao Li, Tao Tao, Wensheng Zhang
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Zixuan Xiao, Jiahao Qi, Wei Xue, Ping Zhong
2021 J jnl
Neurocomputing
Laishui Lv, Kun Zhang, Dalal Bardou, Xun Li, Ting Zhang, Wei Xue
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jiahao Qi, Wei Xue, Zhiqiang Gong, Shaoquan Zhang, Aihuan Yao, Ping Zhong
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Wei Xue, Jiahao Qi, Guoqing Shao, Zixuan Xiao, Yu Zhang, Ping Zhong
2021 J jnl
Traitement du Signal
Pan Li, Zhaojun Zhou, Qingjie Liu, Xiaoye Sun, Fuming Chen, Wei Xue
2021 J jnl
J. Theor. Appl. Electron. Commer. Res.
Wei Xue, Yinglu Sun, Subir Bandyopadhyay, Dong Cheng
2021 conf
NEW2AN/ruSMART
Ilya I. Lavrenyuk, Sergey B. Makarov, Wei Xue
2021 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Tao Liang, Yingsong Li, Wei Xue, Yibing Li, Tao Jiang
2021 J jnl
Signal Process.
Qishuai Wu, Yingsong Li, Yuriy V. Zakharov, Wei Xue
2021 J jnl
Adv. Intell. Syst.
Shengnan Chen, Heng Zhang, Xiangfei Yang, Xiaoguang Shao, Taihao Li, Na Chen, Zhenyi Chen, Wei Xue, Jiahua Pan, Shupeng Liu
2021 J jnl
J. Control. Sci. Eng.
Zhiming Chen, Zhouhuai Luo, Yunhua Wu, Wei Xue, Wenxing Li
2021 J jnl
Int. J. Mach. Learn. Cybern.
Wei Xue, Ping Zhong, Wensheng Zhang, Gaohang Yu, Yebin Chen
2021 A conf
Interspeech
Wei Xue, Roeland van Hout, Fleur Boogmans, Mario Ganzeboom, Catia Cucchiarini, Helmer Strik
2021 C conf
IGARSS
Jiahao Qi, Wei Xue, Aihuan Yao, Ping Zhong
2021 J jnl
IEEE J. Biomed. Health Informatics
Yueyue Shen, Youhua Zhang, Wei Xue, Zhenyu Yue
2020 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Qishuai Wu, Yingsong Li, Yuriy V. Zakharov, Wei Xue, Wanlu Shi
2020 J jnl
IEEE Trans. Circuits Syst.
Qishuai Wu, Yingsong Li, Wei Xue
2020 J jnl
J. Commun. Inf. Networks
Wei Xue, Xiaoming Chen, Xiaobo Liu, Xiangshuai Meng, Anxue Zhang, Wei E. I. Sha
2020 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Yong Lu, Yongming Huang, Jing Liu, Wei Xue, Guobao Zhang
2020 conf
NEW2AN/ruSMART
Valentin Salnikov, Andrey Rashich, Viet Them Nguyen, Wei Xue
2020 J jnl
BMC Medical Imaging
Xiaorong Wu, Chen Jiang, Guangyu Wu, Chao Shen, Qibo Fu, Yonghui Chen, Dongming Liu, Wei Xue
2020 C conf
BDCAT
Tyler Petty, Thong Vu, Xinghui Zhao, Robert A. Hirsh, Greggory Murray, Francis M. Haas, Wei Xue
2020 J jnl
CoRR
Zixuan Xiao, Ping Zhong, Yuan Quan, Xuping Yin, Wei Xue
2020 J jnl
CoRR
Zixuan Xiao, Wei Xue, Ping Zhong
2020 J jnl
Neurocomputing
Wei Xue, Hong Ai, Tianyu Sun, Chunfeng Song, Yan Huang, Liang Wang
2020 J jnl
J. Intell. Fuzzy Syst.
Wei Xue, Qi Wang, Xiaona Liu
2020 J jnl
IEEE Access
Wenjing Shang, Wei Xue, Yingsong Li, Yidong Xu
2020 J jnl
IEEE Access
Sergey B. Makarov, Mingxin Liu, Anna S. Ovsyannikova, Sergey V. Zavjalov, Ilya I. Lavrenyuk, Wei Xue, Junwei Qi
2020 J jnl
IEEE Access
Wei Xue, Xiangyang Dai, Li Liu
2020 J jnl
Symmetry
Mingxin Liu, Wei Xue, Peisong Jia, Sergey B. Makarov, Beiming Li
2020 J jnl
ISPRS Int. J. Geo Inf.
Yafeng Niu, Guorui Ma, Wei Xue, Chengqi Xue, Tianyu Zhou, Yue Gao, Hongrui Zuo, Tao Jin
2020 conf
NEW2AN/ruSMART
Anna S. Ovsyannikova, Sergey V. Zavjalov, Sergey B. Makarov, Ilya I. Lavrenyuk, Wei Xue
2020 A conf
INTERSPEECH
Vinay Kothapally, Wei Xia, Shahram Ghorbani, John H. L. Hansen, Wei Xue, Jing Huang
2020 J jnl
CoRR
Vinay Kothapally, Wei Xia, Shahram Ghorbani, John H. L. Hansen, Wei Xue, Jing Huang
2020 J jnl
IEEE Access
Wei Xue, Xiaoming Chen, Ming Zhang, Luyu Zhao, Anxue Zhang, Yi Huang
2020 A conf
INTERSPEECH
Wei Xue, Viviana Mendoza Ramos, Wieke Harmsen, Catia Cucchiarini, R. W. N. M. van Hout, Helmer Strik
2020 conf
FEMIB
Wei Xue, Victor Chang, Yijie Chen, Qianwen Xu
2020 J jnl
Pattern Anal. Appl.
Wei Xue
2020 conf
AACL/IJCNLP (System Demonstrations)
Ximing Liu, Wei Xue, Qi Su, Weiran Nie, Wei Peng
2019 J jnl
Symmetry
Qishuai Wu, Yingsong Li, Wei Xue
2019 J jnl
IEEE Geosci. Remote. Sens. Lett.
Wei Xue, Xiangyang Dai, Jichao Zhu, Yan Luo, Yue Yang
2019 J jnl
J. Comput. Phys.
Hao Jing, Yushu Chen, Jian Wang, Wei Xue
2019 conf
SLaTE
Wei Xue, Catia Cucchiarini, Roeland van Hout, Helmer Strik
2019 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Liang Xu, Songbo Zhao, Ningning Li, Qiang Gao, Tao Wang, Wei Xue
2019 J jnl
Pattern Anal. Appl.
Wei Xue
2019 J jnl
Ingénierie des Systèmes d Inf.
Caihong Zhang, Wei Xue, Ying Xin
2019 J jnl
IEEE Access
Laishui Lv, Kun Zhang, Ting Zhang, Xun Li, Jiahui Zhang, Wei Xue
2019 J jnl
J. Softw.
Ningning Li, Wei Xue, Xiang Guo, Liang Xu, Yuyang Wu, Yuan Yao
2019 J jnl
J. Frankl. Inst.
Wei Xue, Mei Zhang, Shilong Liu, Yongli Li, Shijian Cang
2019 J jnl
Sensors
Wei Xue, Yan Luo, Yue Yang, Yujin Huang
2019 conf
EMBC
Xin Peng, Dingyi Liu, Yiming Li, Wei Xue, Dahong Qian
2019 conf
BigCom
Xin Chen, Xuangou Wu, Xiujun Wang, Wei Zhao, Wei Xue
2019 J jnl
Symmetry
Junwei Qi, Sergey B. Makarov, Mingxin Liu, Beiming Li, Wei Xue
2019 J jnl
Clust. Comput.
Yong Lu, Yongming Huang, Wei Xue, Guobao Zhang
2019 J jnl
IEEE Access
Wenjing Shang, Wei Xue, Yidong Xu, Weizhi Geng
2018 conf
ACM Great Lakes Symposium on VLSI
Mingye Song, Zhezhao Xu, Wei Xue, Wenjian Yu
2018 B conf
Intelligent Vehicles Symposium
Wei Xue, Bo Yang, Tsutomu Kaizuka, Kimihiko Nakano
2018 J jnl
Sensors
Yuqing Zhou, Wei Xue
2018 J jnl
IEICE Trans. Inf. Syst.
Wei Xue, Junhong Ren, Xiao Zheng, Zhi Liu, Yueyong Liang
2018 J jnl
Sensors
Yidong Xu, Wenjing Shang, Lili Guo, Junwei Qi, Yingsong Li, Wei Xue
2018 conf
ACL (1)
Wei Xue, Tao Li
2018 J jnl
CoRR
Wei Xue, Tao Li
2018 J jnl
IEEE Access
Yankan Song, Ying Chen, Shaowei Huang, Yin Xu, Zhitong Yu, Wei Xue
2018 J jnl
Microelectron. Reliab.
Wei Yan, Zhinong Yu, Jian Guo, Dawei Shi, Jianshe Xue, Wei Xue
2018 conf
ISSPIT
Muhammad Usman, Shani Thapa, Adarsh K. Gupta, Wei Xue
2018 C conf
ISNN
Junbin Li, Qi Chen, Le Xie, Fan Feng, Wei Xue, Baijun Dong, Hesheng Wang, Yunhui Liu
2018 J jnl
Sensors
Jing Chen, Yi Zhang, Wei Xue
2018 conf
UPINLBS
Yi Zhang, Jing Chen, Wei Xue
2017 conf
ISPACS
Jing Tan, Jingqi Wang, Yurou Tian, Wei Xue, Wen Wu
2017 conf
BigDataService
Qifeng Zhou, Bin Xia, Wei Xue, Chunqiu Zeng, Ruyuan Han, Tao Li
2017 J jnl
World Wide Web
Wei Xue, Tao Li, Naphtali Rishe
2017 conf
ICNC-FSKD
Wei Xue, Wensheng Zhang
2017 J jnl
ACM Comput. Surv.
Tao Li, Ning Xie, Chunqiu Zeng, Wubai Zhou, Li Zheng, Yexi Jiang, Yimin Yang, Hsin-Yu Ha, Wei Xue, Yue Huang, Shu-Ching Chen, Jainendra K. Navlakha, S. Sitharama Iyengar
2017 conf
ICSAI
Wenjun Xu, Jian Zhang, Yifeng Chen, Wei Xue, Yu Cao
2017 J jnl
Knowl. Inf. Syst.
Tao Li, Chunqiu Zeng, Wubai Zhou, Wei Xue, Yue Huang, Zheng Liu, Qifeng Zhou, Bin Xia, Qing Wang, Wentao Wang, Xiaolong Zhu
2017 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Wei Xue, Wensheng Zhang
2017 conf
IJCNLP(2)
Wei Xue, Wubai Zhou, Tao Li, Qing Wang
2017 A conf
INTERSPEECH
Jia Dai, Wei Xue, Wenju Liu
2017 J jnl
Symmetry
Yidong Xu, Wei Xue, Yingsong Li, Lili Guo, Wenjing Shang
2017 conf
ISPACS
Wei Xue, Jingqi Wang, Yurou Tian, Jing Tan, Wen Wu
2017 J jnl
CoRR
Xun Liu, Wei Xue, Lei Xiao, Bo Zhang
2017 A* conf
KDD
Wubai Zhou, Wei Xue, Ramesh Baral, Qing Wang, Chunqiu Zeng, Tao Li, Jian Xu, Zheng Liu, Larisa Shwartz, Genady Ya. Grabarnik
2016 conf
CCPR (2)
Yan Liao, Jialin Hua, Wei Xue
2016 J jnl
EURASIP J. Adv. Signal Process.
Wei Xue, Wenjing Shang, Sergey B. Makarov, Yidong Xu
2016 J jnl
Commun. Stat. Simul. Comput.
Wei Xue, Jing Zhang
2016 conf
ISCSLP
Jia Dai, Shan Liang, Wei Xue, Chongjia Ni, Wenju Liu
2016 conf
ICONIP (2)
Wei Xue, Wensheng Zhang
2016 J jnl
Bioinform.
Bai-Han Zhu, Ying-Nan Song, Wei Xue, Gui-Cai Xu, Jun Xiao, Ming-Yuan Sun, Xiaowen Sun, Jiongtang Li
2016 conf
CCPR (2)
Jia Dai, Wenju Liu, Hao Zheng, Wei Xue, Chongjia Ni
2016 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Yue Yang, Wei Liu, Zuoxun Zeng, Wei Xue
2016 J jnl
J. Robotics Netw. Artif. Life
Wei Xue, Xue Li
2016 J jnl
计算机科学
Wei Xue, Wensheng Zhang, Junhong Ren
2015 conf
APSIPA
Jia Dai, Chongjia Ni, Wei Xue, Wenju Liu
2015 J jnl
IEEE Trans. Ind. Electron.
Xiaoyong Chang, Yongli Li, Weiya Zhang, Nan Wang, Wei Xue
2015 conf
WISE (2)
Wei Xue, Tao Li, Naphtali Rishe
2015 J jnl
J. Frankl. Inst.
Wei Xue, Yongli Li, Shijian Cang, Hongyan Jia, Zenghui Wang
2015 A conf
INTERSPEECH
Shuai Nie, Wei Xue, Shan Liang, Xueliang Zhang, Wenju Liu, Liwei Qiao, Jianping Li
2015 J jnl
IEEE J. Sel. Top. Signal Process.
Wei Xue, Wenju Liu, Shan Liang
2015 J jnl
Sensors
Catalina Maria Rivera, Hyuck-Jin Kwon, Ali Hashmi, Gan Yu, Jiheng Zhao, Jianlong Gao, Jie Xu, Wei Xue, Alexander G. Dimitrov
2015 A conf
INTERSPEECH
Shuai Nie, Shan Liang, Wei Xue, Xueliang Zhang, Wenju Liu, Like Dong, Hong Yang
2015 conf
NEW2AN
Sergey V. Zavjalov, Sergey B. Makarov, Sergey V. Volvenko, Wei Xue
2014 J jnl
Future Gener. Comput. Syst.
Yinlong Zou, Wei Xue, Shenshen Liu
2014 J jnl
Signal Process.
Gaohang Yu, Wei Xue, Yi Zhou
2014 A* conf
KDD
Li Zheng, Chunqiu Zeng, Lei Li, Yexi Jiang, Wei Xue, Jingxuan Li, Chao Shen, Wubai Zhou, Hongtai Li, Liang Tang, Tao Li, Bing Duan, Ming Lei, Pengnian Wang
2014 Misc conf
ICASSP
Wei Xue, Shan Liang, Wenju Liu
2014 J jnl
Int. J. Ad Hoc Ubiquitous Comput.
Lajiao Chen, Yan Ma, Peng Liu, Wei Xue
2014 J jnl
Speech Commun.
Shan Liang, Wenju Liu, Wei Jiang, Wei Xue
2014 A conf
INTERSPEECH
Wei Xue, Shan Liang, Wenju Liu
2013 A conf
INTERSPEECH
Wei Xue, Shan Liang, Wenju Liu
2013 A* conf
IJCAI
Yuhong Guo, Wei Xue
2013 J jnl
IBM J. Res. Dev.
Juwei Shi, Wei Xue, Wenjie Wang, Yuzhou Zhang, Bo Yang, Jian Li
2012 conf
IScIDE
Yuanying Qiu, Wei Xue, Gaohang Yu
2012 A conf
INTERSPEECH
Wei Xue, Wenju Liu
2011 J jnl
Commun. Stat. Simul. Comput.
Wei Xue, Peng Shen
2011 conf
ICPP Workshops
Kai Zhang, Kang Chen, Wei Xue
2011 J jnl
J. Softw.
Qing-Feng Hu, Xi-Min Cui, Guo Wang, Meng-Ru Wang, Yin-Xiao Ji, Wei Xue
2010 J jnl
Neural Networks
Liang Chen, Wei Xue, Naoyuki Tokuda
2010 conf
WCNIS
Wei Xue, Wei-qun Ma, Bing-cai Chen
2010 conf
WISM
Wei Xue, Xinshun Xu
2010 conf
IEEE SCC
Wei Xue, Juwei Shi, Bo Yang
2009 conf
FSKD (5)
Guang Lu, Wei Xue
2009 conf
ISPAN
Zhichao Cao, Shiming Xu, Wei Xue, Wenguang Chen
2007 Misc conf
International Conference on Computational Science (1)
Wei Xue, Shanxiang Qi
2007 B conf
GLOBECOM
Jia Zou, Wei Xue, Zhiyong Liang, Yixin Zhao, Bo Yang, Ling Shao
2006 Misc conf
International Conference on Computational Science (1)
Tao Li, Ximeng Guan, Zhiping Yu, Wei Xue
2006 B conf
e-Science
Jianxin Li, Jinpeng Huai, Jie Xu, Yanmin Zhu, Wei Xue
2006 conf
ECCV Workshop on HCI
Wei Xue, Sidan Du, Chengzhi Fang, Yingxian Ye
2005 B conf
e-Science
Wei Xue, Jinpeng Huai, Yunhao Liu
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