Hamid Alinejad-Rokny

100 papers A* 3B 2Misc 4Journal 76Unranked 14
YearRankTypeTitle / Venue / Authors
2026 J jnl
Inf. Sci.
Ali Foroutannia, Afshin Shoeibi, Amin Beheshti, Hamid Alinejad-Rokny, Sai Ho Ling, Hak-Keung Lam
2026 A* conf
AAAI
Shuaimin Li, Liyang Fan, Yufang Lin, Zeyang Li, Xian Wei, Shiwen Ni, Hamid Alinejad-Rokny, Min Yang
2026 J jnl
CoRR
Guhong Chen, Chenghao Sun, Cheng Fu, Qiyao Wang, Zhihong Huang, Chaopeng Wei, Guangxu Chen, Feiteng Fang, Ahmadreza Argha, Bing Zhao, Xander Xu, Qi Han, Hamid Alinejad-Rokny, Qiang Qu, Binhua Li, Shiwen Ni, Min Yang, Hu Wei, Yongbin Li
2026 J jnl
CoRR
Siyi Li, Jiajun Shi, Shiwen Ni, Ge Zhang, Shuaimin Li, Shijian Wang, Zhoufutu Wen, Yizhi Li, Hamid Alinejad-Rokny, Jiaheng Liu, Min Yang, Wenhao Huang
2026 J jnl
Bioinform.
Tohid Ghasemnejad, Yuheng Liang, Khadijeh Jahanian, Milad Eidi, Arash Salmaninejad, Seyedeh Sedigheh Abedini, Fabrizzio Horta, Nigel H. Lovell, Thantrira Porntaveetus, Mark Grosser, Mahmoud Aarabi, Hamid Alinejad-Rokny
2026 J jnl
CoRR
Qiyao Wang, Hongbo Wang, Longze Chen, Zhihao Yang, Guhong Chen, Hamid Alinejad-Rokny, Hui Li, Yuan Lin, Min Yang
2026 J jnl
CoRR
Yukun Chen, Jiaming Li, Longze Chen, Ze Gong, Jingpeng Li, Zhen Qin, Hengyu Chang, Ancheng Xu, Zhihao Yang, Hamid Alinejad-Rokny, Qiang Qu, Bo Zheng, Min Yang
2026 J jnl
CoRR
Jiahao Zhao, Feng Jiang, Shaowei Qin, Zhonghui Zhang, Junhao Liu, Guibing Guo, Hamid Alinejad-Rokny, Min Yang
2025 J jnl
IEEE Trans. Biomed. Eng.
Ahmadreza Argha, Hamid Alinejad-Rokny, Martin Baumgartner, Günter Schreier, Branko G. Celler, Stephen J. Redmond, Ken Butcher, Sze-Yuan Ooi, Nigel H. Lovell
2025 J jnl
Comput. Sci. Rev.
Mehdi Hosseinzadeh, Jawad Tanveer, Amir Masoud Rahmani, Abed Alanazi, Monji Mohamed Zaidi, Khursheed Aurangzeb, Hamid Alinejad-Rokny, Thantrira Porntaveetus, Sang-Woong Lee
2025 J jnl
npj Digit. Medicine
Zhen Yu, Ruiye Chen, Peng Gui, Wei Wang, Imran Razzak, Hamid Alinejad-Rokny, Xiaomin Zeng, Xianwen Shang, Lei Zhang, Xiaohong Yang, Honghua Yu, Wenyong Huang, Huimin Lu, Peter van Wijngaarden, Mingguang He, Zhuoting Zhu, Zongyuan Ge
2025 J jnl
Medical Biol. Eng. Comput.
Nazanin Ahmadi-Dastgerdi, Hossein Hosseini-Nejad, Hamid Alinejad-Rokny
2025 conf
ACL (Findings)
Guhong Chen, Liyang Fan, Zihan Gong, Nan Xie, Zixuan Li, Ziqiang Liu, Chengming Li, Qiang Qu, Hamid Alinejad-Rokny, Shiwen Ni, Min Yang
2025 J jnl
CoRR
Shuaimin Li, Liyang Fan, Yufang Lin, Zeyang Li, Xian Wei, Shiwen Ni, Hamid Alinejad-Rokny, Min Yang
2025 A* conf
AAAI
Bao Gia Doan, Afshar Shamsi, Xiao-Yu Guo, Arash Mohammadi, Hamid Alinejad-Rokny, Dino Sejdinovic, Damien Teney, Damith C. Ranasinghe, Ehsan Abbasnejad
2025 conf
ACL (1)
Longze Chen, Renke Shan, Huiming Wang, Lu Wang, Ziqiang Liu, Run Luo, Jiawei Wang, Hamid Alinejad-Rokny, Min Yang
2025 J jnl
CoRR
Longze Chen, Renke Shan, Huiming Wang, Lu Wang, Ziqiang Liu, Run Luo, Jiawei Wang, Hamid Alinejad-Rokny, Min Yang
2025 J jnl
CoRR
Feiteng Fang, Ting-En Lin, Yuchuan Wu, Xiong Liu, Xiang Huang, Dingwei Chen, Jing Ye, Haonan Zhang, Liang Zhu, Hamid Alinejad-Rokny, Min Yang, Fei Huang, Yongbin Li
2025 B conf
SMC
Afshar Shamsi, Rejisa Becirovic, Ahmadreza Argha, Ehsan Abbasnejad, Hamid Alinejad-Rokny, Arash Mohammadi
2025 J jnl
CoRR
Ancheng Xu, Zhihao Yang, Jingpeng Li, Guanghu Yuan, Longze Chen, Liang Yan, Jiehui Zhou, Zhen Qin, Hengyun Chang, Hamid Alinejad-Rokny, Bo Zheng, Min Yang
2025 J jnl
CoRR
Hamzeh Asgharnezhad, Afshar Shamsi, Roohallah Alizadehsani, Arash Mohammadi, Hamid Alinejad-Rokny
2025 A* conf
EMNLP
Dingwei Chen, Ziqiang Liu, Feiteng Fang, Chak Tou Leong, Shiwen Ni, Ahmadreza Argha, Hamid Alinejad-Rokny, Min Yang, Chengming Li
2025 J jnl
CoRR
Dingwei Chen, Ziqiang Liu, Feiteng Fang, Chak Tou Leong, Shiwen Ni, Ahmadreza Argha, Hamid Alinejad-Rokny, Min Yang, Chengming Li
2025 J jnl
Eng. Appl. Artif. Intell.
Afshar Shamsi Jokandan, Rejisa Becirovic, Hamid Alinejad-Rokny, Arash Mohammadi, Ahmadreza Argha
2025 J jnl
CoRR
Qiyao Wang, Guhong Chen, Hongbo Wang, Huaren Liu, Minghui Zhu, Zhifei Qin, Linwei Li, Yilin Yue, Shiqiang Wang, Jiayan Li, Yihang Wu, Ziqiang Liu, Longze Chen, Run Luo, Liyang Fan, Jiaming Li, Lei Zhang, Kan Xu, Hongfei Lin, Hamid Alinejad-Rokny, Shiwen Ni, Yuan Lin, Min Yang
2025 J jnl
CoRR
Alireza Sadeghi, Farshid Hajati, Ahmadreza Argha, Nigel H. Lovell, Min Yang, Hamid Alinejad-Rokny
2025 conf
ACL (Findings)
King Zhu, Qianbo Zang, Shian Jia, Siwei Wu, Feiteng Fang, Yizhi Li, Shuyue Guo, Tianyu Zheng, Jiawei Guo, Bo Li, Haoning Wu, Xingwei Qu, Jian Yang, Ruibo Liu, Xiang Yue, Jiaheng Liu, Chenghua Lin, Hamid Alinejad-Rokny, Min Yang, Shiwen Ni, Wenhao Huang, Ge Zhang
2025 conf
ACL (1)
Yang Sun, Guanrong Chen, Hamid Alinejad-Rokny, Jianzhu Bao, Yuqi Huang, Bin Liang, Kam-Fai Wong, Min Yang, Ruifeng Xu
2025 conf
ACL (Findings)
Run Luo, Haonan Zhang, Longze Chen, Ting-En Lin, Xiong Liu, Yuchuan Wu, Min Yang, Yongbin Li, Minzheng Wang, Pengpeng Zeng, Lianli Gao, Heng Tao Shen, Yunshui Li, Hamid Alinejad-Rokny, Xiaobo Xia, Jingkuan Song, Fei Huang
2025 J jnl
CoRR
Renhao Li, Jianhong Tu, Yang Su, Hamid Alinejad-Rokny, Derek F. Wong, Junyang Lin, Min Yang
2025 J jnl
CoRR
Run Luo, Ting-En Lin, Haonan Zhang, Yuchuan Wu, Xiong Liu, Min Yang, Yongbin Li, Longze Chen, Jiaming Li, Lei Zhang, Yangyi Chen, Hamid Alinejad-Rokny, Fei Huang
2025 J jnl
Int. J. Medical Informatics
Amirhosein Zobeiri, Alireza Rezaee, Farshid Hajati, Ahmadreza Argha, Hamid Alinejad-Rokny
2025 conf
ACL (1)
Sunbowen Lee, Junting Zhou, Chang Ao, Kaige Li, Xeron Du, Sirui He, Haihong Wu, Tianci Liu, Jiaheng Liu, Hamid Alinejad-Rokny, Min Yang, Yitao Liang, Zhoufutu Wen, Shiwen Ni
2025 conf
BIBM
Jiahao Zhao, Luxin Xu, Minghuan Tan, Lichao Zhang, Ahmadreza Argha, Hamid Alinejad-Rokny, Min Yang
2025 J jnl
CoRR
Jiahao Zhao, Luxin Xu, Minghuan Tan, Lichao Zhang, Ahmadreza Argha, Hamid Alinejad-Rokny, Min Yang
2025 J jnl
Inf. Fusion
Sang-Woong Lee, Jawad Tanveer, Amir Masoud Rahmani, Hamid Alinejad-Rokny, Parisa Khoshvaght, Gholamreza Zare, Pegah Malekpour Alamdari, Mehdi Hosseinzadeh
2025 conf
ACL (Findings)
Jiaming Li, Yukun Chen, Ziqiang Liu, Minghuan Tan, Lei Zhang, Yunshui Li, Run Luo, Longze Chen, Jing Luo, Ahmadreza Argha, Hamid Alinejad-Rokny, Wei Zhou, Min Yang
2025 J jnl
CoRR
Jiaming Li, Yukun Chen, Ziqiang Liu, Minghuan Tan, Lei Zhang, Yunshui Li, Run Luo, Longze Chen, Jing Luo, Ahmadreza Argha, Hamid Alinejad-Rokny, Wei Zhou, Min Yang
2025 J jnl
CoRR
Roxana Zahedi, Ahmadreza Argha, Nona Farbehi, Ivan Bakhshayeshi, Youqiong Ye, Nigel H. Lovell, Hamid Alinejad-Rokny
2025 J jnl
CoRR
Zhihao Yang, Ancheng Xu, Jingpeng Li, Liang Yan, Jiehui Zhou, Zhen Qin, Hengyun Chang, Ahmadreza Argha, Hamid Alinejad-Rokny, Minghuan Tan, Yujun Cai, Min Yang
2025 J jnl
CoRR
Jiaming Li, Haoran Ye, Yukun Chen, Xinyue Li, Lei Zhang, Hamid Alinejad-Rokny, Jimmy Chih-Hsien Peng, Min Yang
2025 J jnl
CoRR
Sunbowen Lee, Shiwen Ni, Chi Wei, Shuaimin Li, Liyang Fan, Ahmadreza Argha, Hamid Alinejad-Rokny, Ruifeng Xu, Yicheng Gong, Min Yang
2024 J jnl
Comput. Biol. Medicine
Alireza Sadeghi, Farshid Hajati, Alireza Rezaee, Mahdieh Sadeghi, Ahmadreza Argha, Hamid Alinejad-Rokny
2024 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Imran Razzak, Saeeda Naz, Hamid Alinejad-Rokny, Tu N. Nguyen, Fahmi Khalifa
2024 J jnl
Int. J. Neural Syst.
Nazanin Ahmadi-Dastgerdi, Hossein Hosseini-Nejad, Hamid Alinejad-Rokny
2024 J jnl
CoRR
Qiyao Wang, Shiwen Ni, Huaren Liu, Shule Lu, Guhong Chen, Xi Feng, Chi Wei, Qiang Qu, Hamid Alinejad-Rokny, Yuan Lin, Min Yang
2024 J jnl
CoRR
Bao Gia Doan, Afshar Shamsi, Xiao-Yu Guo, Arash Mohammadi, Hamid Alinejad-Rokny, Dino Sejdinovic, Damith C. Ranasinghe, Ehsan Abbasnejad
2024 J jnl
BMC Bioinform.
Zahra Rahaie, Hamid R. Rabiee, Hamid Alinejad-Rokny
2024 conf
ICSR + InnoBiz
Jingwei Zhu, Minghuan Tan, Min Yang, Ruixue Li, Hamid Alinejad-Rokny
2024 J jnl
CoRR
Jingwei Zhu, Minghuan Tan, Min Yang, Ruixue Li, Hamid Alinejad-Rokny
2024 J jnl
Briefings Bioinform.
Roxana Zahedi, Reza Ghamsari, Ahmadreza Argha, Callum Macphillamy, Amin Beheshti, Roohallah Alizadehsani, Nigel H. Lovell, Mohammad Lotfollahi, Hamid Alinejad-Rokny
2024 Misc conf
IWINAC
Afshin Shoeibi, Marjane Khodatars, Hamid Alinejad-Rokny, Jónathan Heras, Sara Bagherzadeh, Amin Beheshti, Juan Manuel Górriz
2024 J jnl
CoRR
Afshar Shamsi, Rejisa Becirovic, Ahmadreza Argha, Ehsan Abbasnejad, Hamid Alinejad-Rokny, Arash Mohammadi
2024 Misc conf
IWINAC
Afshin Shoeibi, Mahboobeh Jafari, Delaram Sadeghi, Roohallah Alizadehsani, Hamid Alinejad-Rokny, Amin Beheshti, Juan Manuel Górriz
2024 J jnl
Appl. Intell.
Mahboobeh Jafari, Delaram Sadeghi, Afshin Shoeibi, Hamid Alinejad-Rokny, Amin Beheshti, David López-García, Zhaolin Chen, U. Rajendra Acharya, Juan Manuel Górriz
2024 J jnl
CoRR
Amir Masoud Rahmani, Amir Haider, Mohammad Adeli, Olfa Mzoughi, Entesar Gemeay, Mokhtar Mohammadi, Hamid Alinejad-Rokny, Parisa Khoshvaght, Mehdi Hosseinzadeh
2024 Misc conf
IWINAC
Mohamad Roshanzamir, Roohallah Alizadehsani, Seyed Vahid Moravvej, Javad Hassannataj Joloudari, Hamid Alinejad-Rokny, Juan Manuel Górriz
2024 J jnl
Neural Comput. Appl.
Sadia Islam, Shafayat Bin Shabbir Mugdha, Shubhashis Roy Dipta, Md. Easin Arafat, Swakkhar Shatabda, Hamid Alinejad-Rokny, Iman Dehzangi
2024 J jnl
CoRR
Shiwen Ni, Haihong Wu, Di Yang, Qiang Qu, Hamid Alinejad-Rokny, Min Yang
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Pouria Parhami, Mansoor Fateh, Mohsen Rezvani, Hamid Alinejad-Rokny
2023 J jnl
Neural Comput. Appl.
Afshar Shamsi Jokandan, Hamzeh Asgharnezhad, Ziba Bouchani, Khadijeh Jahanian, Morteza Saberi, Xianzhi Wang, Imran Razzak, Roohallah Alizadehsani, Arash Mohammadi, Hamid Alinejad-Rokny
2023 J jnl
Comput. Biol. Medicine
Fahime Khozeimeh, Roohallah Alizadehsani, Milad Shirani, Mehrzad Tartibi, Afshin Shoeibi, Hamid Alinejad-Rokny, Chandrashekhar Harlapur, Sayed Javed Sultanzadeh, Abbas Khosravi, Saeid Nahavandi, Ru-San Tan, U. Rajendra Acharya
2023 conf
EMBC
Ahmadreza Argha, Joan Li, Joseph Magdy, Hamid Alinejad-Rokny, Branko G. Celler, Ken Butcher, Sze-Yuan Ooi, Nigel H. Lovell
2023 J jnl
Comput. Biol. Medicine
Mahboobeh Jafari, Afshin Shoeibi, Marjane Khodatars, Navid Ghassemi, Parisa Moridian, Roohallah Alizadehsani, Abbas Khosravi, Sai Ho Ling, Niloufar Delfan, Yudong Zhang, Shui-Hua Wang, Juan Manuel Górriz, Hamid Alinejad-Rokny, U. Rajendra Acharya
2023 J jnl
PLoS Comput. Biol.
Zahra Rahaie, Hamid R. Rabiee, Hamid Alinejad-Rokny
2023 J jnl
Inf. Fusion
Afshin Shoeibi, Marjane Khodatars, Mahboobeh Jafari, Navid Ghassemi, Parisa Moridian, Roohallah Alizadehsani, Sai Ho Ling, Abbas Khosravi, Hamid Alinejad-Rokny, Hak-Keung Lam, Matthew Fuller-Tyszkiewicz, U. Rajendra Acharya, Donovan Anderson, Yudong Zhang, Juan Manuel Górriz
2023 J jnl
CoRR
Mahboobeh Jafari, Delaram Sadeghi, Afshin Shoeibi, Hamid Alinejad-Rokny, Amin Beheshti, David López-García, Zhaolin Chen, U. Rajendra Acharya, Juan Manuel Górriz
2023 Misc conf
ICASSP
Mansooreh Montazerin, Elahe Rahimian, Farnoosh Naderkhani, Seyed Farokh Atashzar, Hamid Alinejad-Rokny, Arash Mohammadi
2023 conf
DSP
Hamzeh Asgharnezhad, Afshar Shamsi Jokandan, Ivan Bakhshayeshi, Roohallah Alizadehsani, Somayyeh Chamaani, Hamid Alinejad-Rokny
2023 J jnl
Algorithms
Shuang Wang, Amin Beheshti, Yufei Wang, Jianchao Lu, Quan Z. Sheng, Stephen Elbourn, Hamid Alinejad-Rokny
2023 conf
EMBC
Seng Hansun, Ahmadreza Argha, Hamid Alinejad-Rokny, Siaw-Teng Liaw, Branko G. Celler, Guy B. Marks
2023 J jnl
CoRR
Mohsen Karami, Roohallah Alizadehsani, Khadijeh Jahanian, Ahmadreza Argha, Iman Dehzangi, Hamid Alinejad-Rokny
2023 J jnl
Sensors
Roohallah Alizadehsani, Mohamad Roshanzamir, Navid Hoseini Izadi, Raffaele Gravina, Hussain Mohammed Dipu Kabir, Darius Nahavandi, Hamid Alinejad-Rokny, Abbas Khosravi, U. Rajendra Acharya, Saeid Nahavandi, Giancarlo Fortino
2022 J jnl
CoRR
Mahboobeh Jafari, Afshin Shoeibi, Marjane Khodatars, Navid Ghassemi, Parisa Moridian, Niloufar Delfan, Roohallah Alizadehsani, Abbas Khosravi, Sai Ho Ling, Yu-Dong Zhang, Shui-Hua Wang, Juan Manuel Górriz, Hamid Alinejad-Rokny, U. Rajendra Acharya
2022 J jnl
CoRR
Mahboobeh Jafari, Afshin Shoeibi, Navid Ghassemi, Jónathan Heras, Abbas Khosravi, Sai Ho Ling, Roohallah Alizadehsani, Amin Beheshti, Yu-Dong Zhang, Shui-Hua Wang, Juan Manuel Górriz, U. Rajendra Acharya, Hamid Alinejad-Rokny
2022 J jnl
IEEE Trans. Instrum. Meas.
Ahmadreza Argha, Branko G. Celler, Hamid Alinejad-Rokny, Nigel H. Lovell
2022 J jnl
PLoS Comput. Biol.
Hamid Alinejad-Rokny, Rassa Ghavami Modegh, Hamid R. Rabiee, Ehsan Ramezani Sarbandi, Narges Rezaie, Kin Tung Tam, Alistair R. R. Forrest
2022 J jnl
Comput. Biol. Medicine
Farshad Saberi-Movahed, Mahyar Mohammadifard, Adel Mehrpooya, Mohammad Rezaei-Ravari, Kamal Berahmand, Mehrdad Rostami, Saeed Karami, Mohammad Najafzadeh, Davood Hajinezhad, Mina Jamshidi, Farshid Abedi, Mahtab Mohammadifard, Elnaz Farbod, Farinaz Safavi, Mohammadreza Dorvash, Negar Mottaghi-Dastjerdi, Shahrzad Vahedi, Mahdi Eftekhari, Farid Saberi-Movahed, Hamid Alinejad-Rokny, Shahab S. Band, Iman Tavassoly
2022 B conf
DSAA
Maryam Shahabikargar, Amin Beheshti, Amin Khatami, Ricky Nguyen, Xuyun Zhang, Hamid Alinejad-Rokny
2022 J jnl
CoRR
Mansooreh Montazerin, Elahe Rahimian, Farnoosh Naderkhani, Seyed Farokh Atashzar, Hamid Alinejad-Rokny, Arash Mohammadi
2022 J jnl
BMC Bioinform.
Hamed Dashti, Iman Dehzangi, Masroor Bayati, James Breen, Amin Beheshti, Nigel H. Lovell, Hamid R. Rabiee, Hamid Alinejad-Rokny
2022 J jnl
PLoS Comput. Biol.
Hamid Alinejad-Rokny, Rassa Ghavami Modegh, Hamid R. Rabiee, Ehsan Ramezani Sarbandi, Narges Rezaie, Kin Tung Tam, Alistair R. R. Forrest
2022 J jnl
BMC Bioinform.
Amin Ghareyazi, Amirreza Kazemi, Kimia Hamidieh, Hamed Dashti, Maedeh-sadat Tahaei, Hamid R. Rabiee, Hamid Alinejad-Rokny, Iman Dehzangi
2022 conf
AIED (2)
Nasrin Shabani, Amin Beheshti, Helia Farhood, Matt Bower, Michael Garrett, Hamid Alinejad-Rokny
2021 J jnl
Soft Comput.
Kim-Hung Pho, Hamidreza Akbarzadeh, Hamid Parvin, Samad Nejatian, Hamid Alinejad-Rokny
2021 J jnl
J. Biomed. Informatics
Shahab Shamshirband, Mahdis Fathi, Abdollah Dehzangi, Anthony Theodore Chronopoulos, Hamid Alinejad-Rokny
2021 conf
AIED (2)
Shuang Wang, Amin Beheshti, Yufei Wang, Jianchao Lu, Quan Z. Sheng, Stephen Elbourn, Hamid Alinejad-Rokny, Elizabeth Galanis
2021 J jnl
Artif. Intell. Rev.
Mohammad Reza Mahmoudi, Hamidreza Akbarzadeh, Hamid Parvin, Samad Nejatian, Vahideh Rezaie, Hamid Alinejad-Rokny
2021 J jnl
Bioinform.
Kieran Walsh, Akira Gokool, Hamid Alinejad-Rokny, Irina Voineagu
2020 J jnl
Comput. Electr. Eng.
Huan Niu, Wei Xu, Hamidreza Akbarzadeh, Hamid Parvin, Amin Beheshti, Hamid Alinejad-Rokny
2020 J jnl
J. Intell. Fuzzy Syst.
Payam Bahrani, Behrouz Minaei-Bidgoli, Hamid Parvin, Mitra Mirzarezaee, Ahmad Keshavarz, Hamid Alinejad-Rokny
2019 ch.
Encyclopedia of Bioinformatics and Computational Biology (2)
Fatemeh Vafaee, Hamed Dashti, Hamid Alinejad-Rokny
2018 J jnl
Neurocomputing
Ali Kalantari, Amirrudin Kamsin, Shahaboddin Shamshirband, Abdullah Gani, Hamid Alinejad-Rokny, Anthony T. Chronopoulos
2018 J jnl
Neurocomputing
Hamid Alinejad-Rokny, Esmaeil Sadroddiny, Vinod Scaria
2015 J jnl
J. Biomed. Informatics
Hamid Alinejad-Rokny, Diako Ebrahimi
2015 J jnl
Eng. Appl. Artif. Intell.
Hamid Parvin, Miresmaeil Mirnabibaboli, Hamid Alinejad-Rokny
2014 J jnl
J. Networks
Mohammad Ahmadinia, Hamid Alinejad-Rokny, Hojjatollah Ahangarikiasari
2014 J jnl
Artif. Intell. Rev.
Behrouz Minaei-Bidgoli, Hamid Parvin, Hamid Alinejad-Rokny, Hosein Alizadeh, William F. Punch
2013 J jnl
J. Exp. Theor. Artif. Intell.
Hamid Parvin, Hamid Alinejad-Rokny, Behrouz Minaei-Bidgoli, Sajad Parvin
2013 J jnl
Comput. Electr. Eng.
Hamid Parvin, Behrouz Minaei-Bidgoli, Hamid Alinejad-Rokny, William F. Punch
redb/models/dataclasses.py
← Index redb/models/dataclasses.py python
from dataclasses import dataclass, field
from typing import Literal, List, Dict, Optional


@dataclass
class Hash:
    md5: str
    sha1: str
    sha256: str


@dataclass
class Hashes:
    md5: str
    sha1: str
    sha256: str
    ssdeep_hash: str
    tlsh_hash: str
    authentihash: Optional[str] = None  # PE
    imphash: Optional[str] = None  # PE
    impfuzzy: Optional[str] = None  # PE TODO: implement
    typerefhash: Optional[str] = None  # DotNet
    richhash: Optional[str] = None  # PE
    richpe_hash: Optional[str] = None  # PE
    richpv_hash: Optional[str] = None  # PE
    richpv_hash_sorted: Optional[str] = None  # PE
    import_hash: Optional[str] = None  # ELF
    export_hash: Optional[str] = None  # ELF
    section_hash: Optional[str] = None  # ELF
    symbol_hash: Optional[str] = None  # ELF (symhash)
    dynamic_hash: Optional[str] = None  # ELF
    # Mach-O similarity hashes
    macho_dylib_hash: Optional[str] = None  # Mach-O: MD5 of sorted dylib names
    macho_import_hash: Optional[str] = None  # Mach-O: MD5 of sorted imported function names
    macho_export_hash: Optional[str] = None  # Mach-O: MD5 of sorted exported symbol names
    macho_entitlement_hash: Optional[str] = None  # Mach-O: MD5 of sorted entitlement names/values
    macho_symhash: Optional[str] = None  # Mach-O: MD5 of external undefined symbols
    # APK similarity hashes
    permhash: Optional[str] = None  # APK: SHA-256 of sorted permissions (Mandiant/Google)

@dataclass
class BasicProperties:
    filename: str
    sample_name: str
    filesize: int
    filetype: str
    filetype_mime: str
    filetype_magika: str
    file_entropy: float
    is_packed: Optional[bool] = None
    is_fat: Optional[bool] = None  # True for FAT Mach-O containers only
    child_sha256: Optional[List[str]] = None  # SHA256 hashes of children (FAT slices, zip contents)
    child_architecture: Optional[List[str]] = None  # Architecture names for FAT Mach-O slices
    child_filetype: Optional[List[str]] = None  # Magika filetypes for children (useful for zip archives)
    first_seen: Optional[str] = None  # From catalog_samples, None for local files


@dataclass
class DIEinfo:
    die_full_dump: str  # TODO: fix the ES schema type to have the full object
    die_info: dict = field(default_factory=dict)


@dataclass
class CAPA:
    capa_dump: str
    capabilities: list
    namespaces: list
    attack_dump: str
    tactics: list
    techniques: list
    techniques_id: list
    mbc_dump: str
    mbc_objectives: list
    mbc_behaviors: list
    mbc_behaviors_id: list


@dataclass
class Malcontent:
    """Malcontent analysis results from chainguard-dev/malcontent tool."""
    malcontent_dump: str  # JSON dump of analysis results (unwrapped from Files)
    version: str  # Malcontent tool version
    risk_score: int  # Overall risk score (0-4)
    risk_level: str  # Risk level: LOW, MEDIUM, HIGH, CRITICAL


# @dataclass
# class Strings:
#     # strings_total_unique: int
#     # strings_stored_unique: int
#     # strings: list = field(default_factory=list)
#     # # strings_ranked: list = field(default_factory=list)
#     strings: dict[str, String]

@dataclass
class String:
    string: str # this is basically the key
    string_length: int
    string_entropy: float
    string_frequency: int
    md5: list[str] = field(default_factory=list)
    sha1: list[str] = field(default_factory=list)
    sha256: list[str] = field(default_factory=list)

@dataclass
class Decompiled:
    _id: str
    decompiled_function_name: str
    decompiled_function_address: str
    decompiled_function: str


@dataclass
class PE:
    dos_header: str
    nt_header: str
    optional_header: str
    file_header: str
    magic: str  # pe.OPTIONAL_HEADER.Magic
    entry_point: str  # pe.OPTIONAL_HEADER.AddressOfEntryPoint
    major_linker_version: int  # pe.OPTIONAL_HEADER.MajorLinkerVersion
    minor_linker_version: int  # pe.OPTIONAL_HEADER.MinorLinkerVersion
    target_machine: str  # pe.FILE_HEADER.Machine
    architecture: str
    compilation_time: int
    compilation_time_utc: str
    is_dotnet: bool
    is_signed: bool
    has_overlay: bool
    number_of_sections: int
    number_of_imports: int
    number_of_exports: int
    number_of_resources: int
    type: Literal["DLL", "EXE", "DRIVER"]
    dbg_struct: Optional[str] = None
    dbg_timestamp: Optional[int] = None
    dbg_timestamp_utc: Optional[str] = None
    dbg_pdb_info: Optional[str] = None
    dbg_pdb_info_raw: Optional[str] = None
    tls_struct: Optional[str] = None
    export_timestamp: Optional[int] = None
    rich_header_dump: Optional[dict] = None
    rich_header_parsed: Optional[list] = None
    version_info: Optional[list] = None
    export_library_name: Optional[str] = None
    export_library_name_raw: Optional[str] = None
    export_symbols_list: Optional[list] = None
    tls_callbacks: Optional[list] = None


@dataclass
class PEDotNet:
    dotnet: dict = field(default_factory=dict)


@dataclass
class PEImport:
    pe_imports_total: int
    pe_import_libraryName: Optional[list] = None
    pe_import_functions: Optional[list] = None


@dataclass
class PESection:
    _id: str
    section_entropy: float
    section_sha256: str
    section_md5: str
    section_name: str
    section_name_b64: str
    section_pointer_to_raw_data: str
    section_size: int
    section_v_addr: str
    section_v_addr_hex: str
    section_v_size: int


# @dataclass
# class PESections:
#     sections_total: int
#     sections: list = field(default_factory=list)
#     section: Dict[str, PESection] = field(default_factory=dict)


@dataclass
class PEResource:
    _id: str
    resource_type: str
    resource_entropy: float
    resource_sha256: str
    resource_filetype: str
    resource_magika: str
    resource_language: str
    resource_sub_lang: str
    resource_rva: str
    resource_size: int


# @dataclass
# class PEResources:
#     resources_total: int
#     resources: list = field(default_factory=list)
#     resource: Dict[str, PEResource] = field(default_factory=dict)


@dataclass
class PEOverlay:
    _id: str
    overlay_size: int
    overlay_entropy: float
    overlay_offset: str
    overlay_mimetype: str
    overlay_type: str
    overlay_magika: str
    overlay_sha256: str
    overlay_sha1: str
    overlay_md5: str


@dataclass
class PESigner:
    signer_serial_number: str
    signer_subject: str
    signer_issuer: str
    signer_valid_from: str
    signer_valid_to: str
    signer_thumbprint: str  # sha1
    signer_algorithm: str


@dataclass
class PECertificate:
    certificate_serial_number: str
    certificate_subject: str
    certificate_issuer: str
    certificate_valid_from: str
    certificate_valid_to: str
    certificate_thumbprint: str  # sha1
    certificate_algorithm: str


@dataclass
class PECodeSigningInfo:
    _id: str
    signature_verified: bool
    number_of_certificates: int
    x509_certificates: Optional[list] = None
    signers: Optional[list] = None
    countersigners: Optional[list] = None
    date_signed: Optional[str] = None
    spcSpOpusInfo: Optional[dict] = None


@dataclass
class PEExtraFinding:
    context: str
    finding: Optional[Dict] = None


# @dataclass
# class PECodeSigning:
#     certificates: list = field(default_factory=list)
#     signer_info: list = field(default_factory=list)


@dataclass
class DotNetInconsistencyTests:
    test_dotnet_data_dir_hidden: Optional[bool]
    test_dotnet_fake_types: Optional[bool]
    test_dotnet_extra_data: Optional[bool]
    test_dotnet_invalid_type_ref: Optional[bool]
    test_dotnet_fake_datastreams: Optional[bool]
    test_dotnet_extra_module_table: Optional[bool]
    test_dotnet_extra_assembly_table: Optional[bool]
    test_dotnet_invalid_strings_stream: Optional[bool]
    test_dotnet_streams_mixed_case: Optional[bool]
    test_dotnet_method_def_invalid_table: Optional[bool]
    test_dotnet_max_len_exceeding_strings: Optional[bool]


@dataclass
class PEInconsistencyTests:
    test_rich_header_checksum: Optional[bool]
    test_rich_header_duplicate: Optional[bool]
    test_rich_header_linker: Optional[bool]
    test_rich_header_import_count: Optional[bool]


@dataclass
class YaraRule:
    """
    YARA rule metadata (stored in yara_rules table).

    Fields added during export: rule_id, source_collection, ingested_at, rule_text
    """
    rule_name: str
    rule_tags: List[str]
    rule_meta: Dict[str, str]


@dataclass
class YaraMatch:
    """
    YARA rule match (stored in yara_matches table).

    Fields added during export: sha256, rule_id, scan_date
    """
    rule_name: str
    match_strings: List[str]
# ============================================================================
# ELF Dataclasses
# ============================================================================

@dataclass
class ELFFeatures:
    """Main ELF header and binary properties."""
    # ELF Header data
    ei_class: int  # 1=32-bit, 2=64-bit
    ei_data: int  # 1=Little-endian, 2=Big-endian
    ei_version: int
    ei_osabi: int  # 0=SYSV, 1=HPUX, 2=NETBSD, 3=LINUX, 6=SOLARIS, 9=FREEBSD
    ei_abiversion: int
    e_type: int  # 0=NONE, 1=REL, 2=EXEC, 3=DYN, 4=CORE
    e_machine: int
    e_version: int
    e_entry: int
    e_flags: int
    # Human readable values
    ei_class_str: str
    ei_data_str: str
    ei_osabi_str: str
    e_type_str: str
    e_machine_str: str
    # Binary properties
    is_64bit: int
    is_stripped: int
    is_pie: int
    has_canary: int
    has_nx: int
    has_relro: int
    has_fortify: int
    # Counts
    number_of_segments: int
    number_of_sections: int
    number_of_symbols: int
    number_of_dynamic_symbols: int
    number_of_relocations: int
    number_of_dependencies: int
    # Build information
    gnu_hash_present: int
    has_debug_info: int
    build_id: Optional[str] = None


@dataclass
class ELFDependency:
    """ELF dynamic dependency (DT_NEEDED, DT_SONAME, DT_RPATH, DT_RUNPATH)."""
    dependency_name: str
    dependency_type: int  # 1=NEEDED, 14=SONAME, 15=RPATH, 29=RUNPATH
    dependency_type_str: str  # NEEDED, SONAME, RPATH, RUNPATH


@dataclass
class ELFImport:
    """ELF import information (libraries and functions)."""
    elf_imports_total: int
    elf_import_libraries: List[str] = field(default_factory=list)
    elf_import_functions: List[str] = field(default_factory=list)


@dataclass
class ELFExport:
    """ELF export information (exported functions)."""
    elf_exports_total: int
    elf_export_functions: List[str] = field(default_factory=list)


@dataclass
class ELFSection:
    """ELF section information."""
    section_name: str
    section_type: int  # 0=NULL, 1=PROGBITS, 2=SYMTAB, 3=STRTAB, 4=RELA, 5=HASH, 6=DYNAMIC, 7=NOTE, 8=NOBITS, 9=REL, 11=DYNSYM
    section_type_str: str
    section_flags: int
    section_flags_str: List[str]  # WRITE, ALLOC, EXECINSTR, MERGE, STRINGS, etc.
    section_addr: int
    section_offset: int
    section_size: int
    section_link: int
    section_info: int
    section_addralign: int
    section_entsize: int
    section_entropy: float
    section_sha256: str
    section_md5: str


@dataclass
class ELFSegment:
    """ELF segment (program header) information."""
    segment_type: int  # 0=NULL, 1=LOAD, 2=DYNAMIC, 3=INTERP, 4=NOTE, 5=SHLIB, 6=PHDR, 7=TLS
    segment_type_str: str
    segment_flags: int
    segment_flags_str: List[str]  # READ, WRITE, EXECUTE
    segment_offset: int
    segment_vaddr: int
    segment_paddr: int
    segment_filesz: int
    segment_memsz: int
    segment_align: int
    segment_entropy: float
    segment_sha256: str
    segment_md5: str


@dataclass
class ELFSymbol:
    """ELF symbol information."""
    symbol_name: str
    symbol_value: int
    symbol_size: int
    symbol_type: int  # 0=NOTYPE, 1=OBJECT, 2=FUNC, 3=SECTION, 4=FILE, 5=COMMON, 6=TLS
    symbol_type_str: str
    symbol_bind: int  # 0=LOCAL, 1=GLOBAL, 2=WEAK
    symbol_bind_str: str
    symbol_visibility: int  # 0=DEFAULT, 1=INTERNAL, 2=HIDDEN, 3=PROTECTED
    symbol_visibility_str: str
    symbol_section_index: int  # 0=UNDEF, 65521=ABS, 65522=COMMON, or actual section index
    symbol_section_index_str: str  # UNDEF, ABS, COMMON, or section index as string
    is_dynamic: int  # 0=static (.symtab), 1=dynamic (.dynsym)


@dataclass
class ELFRelocation:
    """ELF relocation information."""
    relocation_offset: int
    relocation_type: int
    relocation_type_str: str
    relocation_symbol_index: int
    relocation_symbol_name: str
    relocation_section: str
    relocation_addend: Optional[int] = None  # Only present in RELA sections


@dataclass
class ELFNote:
    """ELF note information (e.g., build ID, ABI tag)."""
    note_name: str  # e.g., "GNU"
    note_type: int  # e.g., 3 for NT_GNU_BUILD_ID
    note_type_str: str  # e.g., "NT_GNU_BUILD_ID"
    note_desc: str  # Note description/content (hex encoded for binary data)
    note_section: str  # Section or segment where the note was found


# ============================================================================
# Mach-O Dataclasses
# ============================================================================

@dataclass
class MachO:
    """Main Mach-O header and binary properties."""
    # Raw values (for analytics/ML)
    magic: int
    cputype: int
    cpusubtype: int
    filetype: int
    ncmds: int
    sizeofcmds: int
    flags: int
    architecture: int
    architectures: List[int]
    # Human-readable values (for display)
    magic_str: str
    cputype_str: str
    cpusubtype_str: str
    filetype_str: str
    flags_str: List[str]
    architecture_str: str
    architectures_str: List[str]
    # Additional properties
    is_64bit: bool
    is_signed: bool
    number_of_load_commands: int = 0
    load_commands_set: Optional[List[str]] = None
    number_of_segments: int = 0
    number_of_dylibs: int = 0
    number_of_imports: int = 0
    number_of_exports: int = 0
    entry_point: Optional[int] = None
    uuid: Optional[str] = None
    version_info: Optional[dict] = None
    version_info_str: Optional[dict] = None


@dataclass
class MachOSegment:
    """Mach-O segment information."""
    segment_name: str
    segment_vaddr: int
    segment_vsize: int
    segment_offset: int
    segment_size: int
    segment_max_vm_protection: int
    segment_initial_vm_protection: int
    segment_nsects: int
    segment_flags: int
    segment_entropy: float
    segment_sha256: str


@dataclass
class MachOImport:
    """Mach-O import information."""
    macho_imports_total: int
    macho_import_libraryName: Optional[list] = None
    macho_import_functions: Optional[list] = None


@dataclass
class MachOExport:
    """Mach-O export information."""
    macho_exports_total: int
    macho_export_symbols: Optional[list] = None


@dataclass
class MachODylib:
    """Mach-O dynamic library dependency."""
    dylib_name: str
    dylib_timestamp: int
    dylib_current_version: int
    dylib_compat_version: int


@dataclass
class MachOLoadCommand:
    """Mach-O load command."""
    load_command: int
    load_command_str: str
    load_command_size: int


@dataclass
class MachOUniversal:
    """Mach-O Universal/FAT binary information."""
    is_fat: bool
    architecture_count: int
    architectures: List[str]
    architecture_info: List[dict]
    fat_hash: Optional[str] = None
    fat_md5: Optional[str] = None
    fat_sha1: Optional[str] = None


@dataclass
class MachOCertificate:
    """Certificate information extracted from MachO code signature (mirrors PECertificate)."""
    subject: str
    issuer: str
    serial_number: str
    not_before: str
    not_after: str
    thumbprint: str  # SHA-1 (industry standard)
    certificate_type: str  # 'leaf', 'intermediate', 'root'
    order: int
    algorithm: Optional[str] = None
    common_name: Optional[str] = None
    organizational_unit: Optional[str] = None
    organization: Optional[str] = None


@dataclass
class MachOCodeDirectory:
    """Code Directory information from LC_CODE_SIGNATURE (simplified for malware analysis)."""
    identifier: Optional[str] = None  # Bundle ID
    team_id: Optional[str] = None     # Developer team ID
    flags: Optional[int] = None       # CD flags (includes CS_RUNTIME for hardened runtime)
    cd_hash: Optional[str] = None     # SHA-256 hash of the CodeDirectory itself


@dataclass
class MachOCodeSigningInfo:
    """Complete code signing information (mirrors PECodeSigningInfo)."""
    _id: str  # sha256
    signing_type: str  # 'certificate', 'ad-hoc', 'unsigned'
    has_signature: bool  # True if CMS signature structure present (not cryptographic verification)
    number_of_certificates: int
    code_directories: Optional[List[MachOCodeDirectory]] = None
    entitlements: Optional[Dict] = None
    x509_certificates: Optional[List[MachOCertificate]] = None
    date_signed: Optional[str] = None
    arch_identifier: Optional[str] = None  # For FAT binaries
    has_hardened_runtime: bool = False
    has_library_validation: bool = False
    has_runtime_version: bool = False


@dataclass
class MachOEntitlement:
    """Single entitlement entry for database export."""
    key: str
    value_type: str  # 'boolean', 'string', 'array', 'dict'
    value_bool: Optional[bool] = None
    value_string: Optional[str] = None
    value_array: Optional[List[str]] = None


# ============================================================================
# APK Dataclasses
# ============================================================================

@dataclass
class APKFeatures:
    """Core APK metadata and properties."""
    package_name: Optional[str] = None
    app_name: Optional[str] = None
    version_code: Optional[int] = None
    version_name: Optional[str] = None
    min_sdk_version: Optional[int] = None
    target_sdk_version: Optional[int] = None
    compile_sdk_version: Optional[int] = None
    main_activity: Optional[str] = None
    is_debuggable: bool = False
    allow_backup: bool = True
    uses_cleartext_traffic: bool = False
    supported_abis: List[str] = field(default_factory=list)
    dex_count: int = 0
    total_dex_size: int = 0
    total_file_count: int = 0
    has_native_code: bool = False
    has_assets: bool = False
    uses_libraries: List[str] = field(default_factory=list)
    earliest_content_modification: Optional[str] = None  # ISO 8601
    latest_content_modification: Optional[str] = None    # ISO 8601
    contains_embedded_apk: bool = False


@dataclass
class APKManifestComponent:
    """Single Android component (activity, service, receiver, provider)."""
    component_type: str      # "activity", "service", "receiver", "provider"
    class_name: str
    is_exported: bool
    intent_actions: List[str] = field(default_factory=list)
    intent_categories: List[str] = field(default_factory=list)


@dataclass
class APKManifest:
    """Full AndroidManifest.xml analysis."""
    activity_count: int
    service_count: int
    receiver_count: int
    provider_count: int
    activities: List[str] = field(default_factory=list)
    services: List[str] = field(default_factory=list)
    receivers: List[str] = field(default_factory=list)
    providers: List[str] = field(default_factory=list)
    exported_components: List[str] = field(default_factory=list)
    intent_filters_by_action: List[str] = field(default_factory=list)
    intent_filters_by_category: List[str] = field(default_factory=list)
    uses_features: List[str] = field(default_factory=list)
    meta_data: Optional[Dict] = None
    manifest_xml: Optional[str] = None  # Full decompiled XML text


@dataclass
class APKPermission:
    """Single permission entry for ClickHouse export."""
    permission_name: str
    protection_level: str    # "normal", "dangerous", "signature", "signatureOrSystem", "unknown"
    is_custom: bool = False  # True if declared by the app itself


@dataclass
class APKPermissions:
    """APK permission summary."""
    total_permission_count: int
    dangerous_permission_count: int
    permissions: List[str] = field(default_factory=list)
    dangerous_permissions: List[str] = field(default_factory=list)
    custom_permissions: List[str] = field(default_factory=list)
    permission_details: List[APKPermission] = field(default_factory=list)
    permhash: Optional[str] = None


@dataclass
class APKCertificate:
    """X.509 certificate from APK signature."""
    subject: str
    issuer: str
    serial_number: str
    valid_from: str
    valid_to: str
    thumbprint_sha1: str
    thumbprint_sha256: str
    algorithm: Optional[str] = None
    key_size: Optional[int] = None
    is_self_signed: bool = False
    certificate_source_scheme: Optional[str] = None  # 'v1', 'v2', 'v3', or 'v1,v2' etc. when deduplicated


@dataclass
class APKCodeSigningInfo:
    """Complete APK signing information."""
    _id: str  # sha256
    is_signed: bool
    signature_scheme_versions: List[int] = field(default_factory=list)
    number_of_certificates: int = 0
    x509_certificates: Optional[List[APKCertificate]] = None
    apk_signer_subject: Optional[str] = None
    apk_signer_issuer: Optional[str] = None


@dataclass
class APKDexFile:
    """Analysis of a single DEX file."""
    filename: str
    sha256: str
    class_count: int
    method_count: int
    string_count: int
    tlsh: Optional[str] = None
    top_packages: Optional[List[Dict]] = None
    api_usage: Optional[Dict[str, List[str]]] = None
    obfuscation_indicators: Optional[Dict] = None


@dataclass
class APKResource:
    """Embedded resource file entry."""
    path: str
    size: int
    sha256: str
    filetype_magika: str
    entropy: float = 0.0
    is_suspicious: bool = False


@dataclass
class APKNativeLib:
    """Native .so library entry."""
    abi: str
    filename: str
    size: int
    sha256: str
    is_known_packer: bool = False


@dataclass
class APKInconsistencyTests:
    """APK anomaly and anti-analysis detection results."""
    test_zip_bomb: Optional[bool] = None
    test_zip_duplicate_entries: Optional[bool] = None
    test_zip_path_traversal: Optional[bool] = None
    test_zip_suspicious_timestamps: Optional[bool] = None
    test_hidden_dex_files: Optional[bool] = None
    test_manifest_component_mismatch: Optional[bool] = None
    test_debuggable_release: Optional[bool] = None
    test_emulator_detection_strings: Optional[bool] = None
    test_debugger_detection: Optional[bool] = None
    test_root_detection: Optional[bool] = None


# ============================================================================
# APK Code Analysis Dataclasses
# ============================================================================

@dataclass
class APKDecompiledMethodContent:
    """Decompiled Java source for a single method (content table — deduplicated by hash)."""
    decompiled_method_hash: str
    decompiled_method: str
    decompiled_method_type: str
    decompiled_has_string_encryption: bool = False
    decompiled_has_reflection_calls: bool = False
    decompiled_excessive_goto_count: bool = False


@dataclass
class APKDecompiledMethodReference:
    """Links a specific APK to one of its decompiled methods (reference table)."""
    sha256: str
    sha1: str
    md5: str
    decompiled_method_hash: str
    smali_method_hash: Optional[str] = None
    decompiled_class_name: str = ""
    decompiled_method_name: str = ""
    decompiled_method_signature: str = ""
    decompiled_method_prototype: str = ""
    functions_caller: List[str] = field(default_factory=list)
    functions_call: List[str] = field(default_factory=list)


@dataclass
class APKSmaliMethodContent:
    """Smali disassembly for a single method (content table — deduplicated by hash)."""
    smali_method_hash: str
    smali_method: str
    smali_method_type: str
    smali_instructions_count: int = 0
    smali_register_count: int = 0
    smali_has_string_encryption: bool = False
    smali_has_reflection_calls: bool = False
    smali_excessive_goto_count: bool = False
    smali_flattened_score: float = 0.0
    smali_mba_score: float = 0.0


@dataclass
class APKSmaliMethodReference:
    """Links a specific APK to one of its smali methods (reference table)."""
    sha256: str
    sha1: str
    md5: str
    smali_method_hash: str
    decompiled_method_hash: Optional[str] = None
    smali_class_name: str = ""
    smali_method_name: str = ""
    smali_method_signature: str = ""
    ssdeep_smali: Optional[str] = None
    tlsh_smali: Optional[str] = None


@dataclass
class APKMethodSimilarityMetrics:
    """Similarity hashes for method-level clustering (keyed by smali hash)."""
    smali_method_hash: str
    cyclomatic_complexity: Optional[int] = None
    block_count: Optional[int] = None
    edge_count: Optional[int] = None
    loop_count: Optional[int] = None
    max_depth: Optional[int] = None
    max_fan_out: Optional[int] = None
    ssdeep_smali: Optional[str] = None
    tlsh_smali: Optional[str] = None
    ssdeep_smali_normalized: Optional[str] = None
    tlsh_smali_normalized: Optional[str] = None
    minhash: Optional[List[int]] = field(default_factory=list)


@dataclass
class APKCodeAnalysisError:
    """Error encountered during method analysis."""
    sha256: str
    class_name: Optional[str] = None
    method_name: Optional[str] = None
    error_location: str = ""
    error_message: Optional[str] = None
    error_type: Optional[str] = None


# ============================================================================
# JavaScript Dataclasses
# ============================================================================

@dataclass
class JSFeatures:
    """Core JavaScript file metadata and obfuscation metrics."""
    line_count: int = 0
    char_count: int = 0
    text_entropy: float = 0.0
    max_line_length: int = 0
    avg_line_length: float = 0.0
    is_minified: bool = False
    is_likely_obfuscated: bool = False
    obfuscator_name: Optional[str] = None
    obfuscation_score: int = 0
    obfuscation_techniques: List[str] = field(default_factory=list)
    eval_count: int = 0
    function_constructor_count: int = 0
    settimeout_setinterval_count: int = 0
    document_write_count: int = 0
    innerhtml_count: int = 0
    unescape_count: int = 0
    fromcharcode_count: int = 0
    atob_count: int = 0
    decodeuri_count: int = 0
    total_function_count: int = 0
    total_variable_count: int = 0
    max_nesting_depth: int = 0
    avg_identifier_length: float = 0.0
    hex_string_count: int = 0
    unicode_escape_count: int = 0
    long_string_count: int = 0
    base64_string_count: int = 0
    comment_ratio: float = 0.0
    script_type: str = "unknown"
    detected_environment: str = "unknown"