Haejoon Jung

181 papers B 17C 1Journal 114Unranked 48
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Wirel. Commun. Lett.
Ahmad Faisal Mirza, Ali Arshad Nasir, Haejoon Jung, Aamir Mahmood, Syed Ali Hassan, Mikael Gidlund
2026 J jnl
IEEE Commun. Surv. Tutorials
Syed Asad Ullah, Syed Ali Hassan, Hatem Abou-Zeid, Hassaan Khaliq Qureshi, Haejoon Jung, Aamir Mahmood, Mikael Gidlund, Muhammad Ali Imran, Ekram Hossain
2026 J jnl
IEEE Internet Things J.
Donghyeon Kim, Haejoon Jung, In-Ho Lee, Dusit Niyato
2026 J jnl
IEEE Wirel. Commun. Lett.
Muhammad Sufyan Haider, Muddassir Sadiq, Arooj Fatima, Neha Mazhar, Haejoon Jung, Syed Ali Hassan
2026 J jnl
IEEE Wirel. Commun. Lett.
Donghyeon Kim, Haejoon Jung, In-Ho Lee
2026 J jnl
IEEE Commun. Surv. Tutorials
Syed Asad Ullah, Mehwish Bibi, Syed Ali Hassan, Hatem Abou-Zeid, Hassaan Khaliq Qureshi, Haejoon Jung, Aamir Mahmood, Mikael Gidlund, Ekram Hossain
2026 J jnl
IEEE Trans. Netw. Sci. Eng.
Quynh-Anh Nguyen, Nguyen-Son Vo, Thuong C. Lam, Tan Do-Duy, Haejoon Jung, Trung Q. Duong
2026 J jnl
IEEE Wirel. Commun. Lett.
Jijun Hwang, Byungha You, Seok-Chul Sean Kwon, Haejoon Jung
2026 J jnl
IEEE Trans. Veh. Technol.
Jijun Hwang, Yeonwoong Kim, Minhyeok Yang, Sunghwan Cho, Haejoon Jung, Dusit Niyato
2026 J jnl
IEEE Internet Things J.
Sasinda C. Prabhashana, Dang Van Huynh, Haejoon Jung, Berk Canberk, Simon L. Cotton, Trung Q. Duong
2026 J jnl
CoRR
Abd Ullah Khan, Wali Ullah Khan, Haejoon Jung, Hyundong Shin
2026 J jnl
IEEE Internet Things J.
Neha Mazhar, Syed Asad Ullah, Shakila Basheer, Haejoon Jung, Muhammad Sohaib J. Solaija, Aamir Mahmood, Mikael Gidlund, Syed Ali Hassan
2025 J jnl
IEEE Wirel. Commun. Lett.
Jieun Han, Jung-Bin Kim, In-Ho Lee, Haejoon Jung
2025 conf
ICC Workshops
Syed Zain Abbas, Syed Asad Ullah, Mehwish Bibi, Haejoon Jung, Hatem Abou-Zeid, Aryan Kaushik, Syed Ali Hassan
2025 conf
ICC
Donghyeon Kim, Haejoon Jung, In-Ho Lee
2025 J jnl
IEEE Wirel. Commun. Lett.
Donghyeon Kim, Haejoon Jung, In-Ho Lee
2025 J jnl
IEEE Wirel. Commun. Lett.
Muhammad Abdullah Khan, Mahnoor Anjum, Deepak Mishra, Haejoon Jung, Trung Q. Duong
2025 J jnl
IEEE Trans. Veh. Technol.
Mehwish Bibi, Syed Asad Ullah, Haejoon Jung, Syed Ali Hassan
2025 conf
ICC
Saleha Ahmed, Muhammad Uzair, Syed Asad Ullah, Aamir Mahmood, Haejoon Jung, Mikael Gidlund, Syed Ali Hassan
2025 conf
ICC
Tayyib Ul Hassan, Aamina Binte Khurram, Attiya Waqar, Arsalan Ahmad, Syed Ali Hassan, Haejoon Jung
2025 J jnl
IEEE Commun. Stand. Mag.
Amara Umar, Anum Umer, Haejoon Jung, Hatem Abou-Zeid, Ali Arshad Nasir, Syed Ali Hassan
2025 J jnl
IEEE Internet Things J.
Tinh T. Bui, Dang Van Huynh, Long Dinh Nguyen, Haejoon Jung, Trung Q. Duong
2025 J jnl
IEEE Commun. Mag.
Hafiz Muhammad Ali Zeeshan, Muhammad Umer, Muhammad Akbar, Aryan Kaushik, Muhammad Ali Jamshed, Haejoon Jung, Syed Ali Hassan
2025 conf
ICC Workshops
Ahmad Faisal Mirza, Fatima Binte Tanveer, Muhammad Umer, Syed Asad Ullah, Haejoon Jung, Syed Ali Hassan
2025 J jnl
IEEE Internet Things J.
Donghyeon Kim, Haejoon Jung, In-Ho Lee, Dusit Niyato
2025 J jnl
CoRR
Abd Ullah Khan, Adnan Shahid, Haejoon Jung, Hyundong Shin
2025 conf
ICC
Muhammad Umer, Muhammad Ahmed Mohsin, Aamir Mahmood, Haejoon Jung, Haris Pervaiz, Mikael Gidlund, Syed Ali Hassan
2025 J jnl
IEEE Trans. Cogn. Commun. Netw.
Sutanu Ghosh, Keshav Singh, Haejoon Jung, Chih-Peng Li, Trung Q. Duong
2025 J jnl
IEEE Internet Things J.
Neha Mazhar, Syed Asad Ullah, Sajjad Hussain Chauhdary, Kapal Dev, Haejoon Jung, Syed Ali Hassan
2025 J jnl
IEEE Commun. Lett.
Usman Iqbal, Sunghwan Cho, Haejoon Jung, Mohsen Guizani
2025 J jnl
IEEE Trans. Commun.
Uman Khalid, Junaid ur Rehman, Haejoon Jung, Trung Q. Duong, Octavia A. Dobre, Hyundong Shin
2025 B conf
IWCMC
Usman Iqbal, Haejoon Jung, Mohsen Guizani
2025 J jnl
IEEE Trans. Commun.
Byungha You, In-Ho Lee, Haejoon Jung, Trung Q. Duong, Hyundong Shin
2025 conf
VTC2025-Spring
Mahnoor Anjum, Muhammad Abdullah Khan, Deepak Mishra, Haejoon Jung, Aruna Seneviratne
2025 J jnl
IEEE Trans. Veh. Technol.
Thuong C. Lam, Nguyen-Son Vo, Minh-Phung Bui, Chan Dai Truyen Thai, Haejoon Jung, Van Ca Phan
2025 J jnl
IEEE Open J. Commun. Soc.
Hafiz Muhammad Ali Zeeshan, Syed Asad Ullah, Muhammad Sohaib J. Solaija, Muhammad Ali Jamshed, Mohammad Mahdi Mojahedian, Haejoon Jung, Syed Ali Hassan
2025 B conf
GLOBECOM
Muhammad Danish Khattak, Muhammad Ayaan Qasmi, Yousuf Rehan, Syed Asad Ullah, Kapal Dev, Haejoon Jung, Syed Ali Hassan
2025 conf
ICC
Guhan Zheng, Zhengxin Yu, Haris Pervaiz, Luyao Zhang, Haejoon Jung, Syed Ali Hassan
2025 J jnl
IEEE Trans. Veh. Technol.
Byungha You, In-Ho Lee, Minseok Kim, Haejoon Jung, Mohsen Guizani
2024 conf
UNet
Latif U. Khan, Mohsen Guizani, Haejoon Jung, Mohamed Adel Serhani
2024 conf
ICTC
Donghyeon Kim, Haejoon Jung, Jung-Bin Kim, In-Ho Lee
2024 conf
ICTC
Usman Iqbal, Haejoon Jung, Hyundong Shin
2024 conf
ICEIC
Junggon Seo, Yeonwoong Kim, Donghyeon Kim, Haejoon Jung
2024 J jnl
IEEE Commun. Lett.
Muhammad Umer, Muhammad Ahmed Mohsin, Mikael Gidlund, Haejoon Jung, Syed Ali Hassan
2024 conf
ICTC
Shehbaz Tariq, Brian Estadimas Arfeto, Haejoon Jung, Hyundong Shin
2024 conf
ICTC
Junggon Seo, Byungha You, Haejoon Jung
2024 J jnl
ICT Express
Yeonwoong Kim, In-Ho Lee, Sunghwan Cho, Haejoon Jung
2024 conf
ICC
Amara Umar, Syed Ali Hassan, Haejoon Jung
2024 J jnl
Comput. Networks
Amara Umar, Syed Ali Hassan, Haejoon Jung, Sahil Garg, M. Shamim Hossain, Mohsen Guizani
2024 J jnl
ICT Express
Usman Iqbal, Yejin Lee, Sunghwan Cho, In-Ho Lee, Haejoon Jung
2024 J jnl
ICT Express
Donghyeon Kim, Jung-Bin Kim, Haejoon Jung, In-Ho Lee
2024 conf
GLOBECOM (Workshops)
Muhammad Usman, Mahnoor Anjum, Muhammad Abdullah Khan, Syed Ali Hassan, Haejoon Jung
2024 B conf
GLOBECOM
Muhammad Umer, Muhammad Ahmed Mohsin, Aamir Mahmood, Kapal Dev, Haejoon Jung, Mikael Gidlund, Syed Ali Hassan
2024 J jnl
IEEE Wirel. Commun. Lett.
Junggon Seo, In-Ho Lee, Haejoon Jung, Daniel Benevides da Costa, Hyundong Shin
2024 J jnl
IEEE Internet Things J.
Muhammad Ali Jamshed, Yazdan Ahmad Qadri, Ali Nauman, Haejoon Jung
2024 B conf
WCNC
Syed Muhammad Jameel, Aamer Khan Tareen, Haejoon Jung, Syed Ali Hassan
2024 conf
VTC Fall
Neha Mazhar, Syed Asad Ullah, Haejoon Jung, Qurrat-Ul-Ain Nadeem, Syed Ali Hassan
2024 J jnl
Comput. Networks
Amara Umar, Syed Ali Hassan, Haejoon Jung, Sahil Garg, Georges Kaddoum, M. Shamim Hossain
2024 J jnl
IEEE Commun. Lett.
Jung-Bin Kim, In-Ho Lee, Haejoon Jung
2024 conf
GLOBECOM (Workshops)
Neha Mazhar, Syed Asad Ullah, Haejoon Jung, Qurrat-Ul-Ain Nadeem, Syed Ali Hassan
2024 J jnl
IEEE Commun. Lett.
Ali Asgher Mohammed, Mirza Wasay Baig, Muhammad Abdullah Sohail, Syed Asad Ullah, Haejoon Jung, Syed Ali Hassan
2024 J jnl
IEEE Internet Things J.
Donghyeon Kim, Haejoon Jung, In-Ho Lee, Dusit Niyato
2024 B conf
WCNC
Muhammad Ibrahim, Wajih Hassan Raza, Muhammad Moiz, Syed Ali Hassan, Haejoon Jung, Mikael Gidlund
2024 J jnl
IEEE Trans. Wirel. Commun.
Sarah Basharat, Syed Ali Hassan, Haejoon Jung, Aamir Mahmood, Zhiguo Ding, Mikael Gidlund
2024 B conf
WCNC
Muhammad Taha Qaiser, Muhammad Sarmad Sohail, Minahil Shafqat, Syed Asad Ullah, Haejoon Jung, Syed Ali Hassan
2024 J jnl
IEEE Trans. Veh. Technol.
Muhammad Usman, Sarah Basharat, Syed Ali Hassan, Haris Pervaiz, Zhiguo Ding, Haejoon Jung
2024 J jnl
IEEE Trans. Veh. Technol.
Yejin Lee, Jijun Hwang, In-Ho Lee, Haejoon Jung, Trung Q. Duong
2024 J jnl
IEEE Netw.
Uman Khalid, Junaid ur Rehman, Saw Nang Paing, Haejoon Jung, Trung Q. Duong, Hyundong Shin
2024 conf
ICC Workshops
Khawaja Muhammad Hamza, Sarah Basharat, Haejoon Jung, Mikael Gidlund, Syed Ali Hassan
2024 B conf
WCNC
Muhammad Bilal, Syeda Fatima Zahra, Hassan Rizwan, Tariq Umar, Syed Ali Hassan, Haejoon Jung, Kapal Dev
2024 J jnl
IEEE Internet Things J.
Syed Asad Ullah, Muhammad Abdullah Sohail, Haejoon Jung, Muhammad Omer Bin Saeed, Syed Ali Hassan
2024 conf
ICTC
Hoondong Noh, Haejoon Jung, Junhwan Lee
2024 J jnl
IEEE Netw.
Yazdan Ahmad Qadri, Haejoon Jung, Dusit Niyato
2023 J jnl
IEEE Access
Rojeena Bajracharya, Rakesh Shrestha, Syed Ali Hassan, Haejoon Jung, Hyundong Shin
2023 conf
GLOBECOM (Workshops)
Mahnoor Anjum, Muhammad Abdullah Khan, Syed Ali Hassan, Haejoon Jung, Aamir Mahmood, Mikael Gidlund
2023 conf
ICTC
Byungha You, Donghyeon Kim, Haejoon Jung
2023 conf
ICTC
Donghyeon Kim, Haejoon Jung, In-Ho Lee
2023 conf
ICTC
Yeonwoong Kim, Junggon Seo, Byungha You, Haejoon Jung, In-Ho Lee, Jung-Bin Kim
2023 J jnl
Comput. Commun.
Qamar Abbas, Syed Ali Hassan, Hassaan Khaliq Qureshi, Kapal Dev, Haejoon Jung
2023 J jnl
IEEE Trans. Veh. Technol.
Rojeena Bajracharya, Rakesh Shrestha, Haejoon Jung
2023 J jnl
IEEE Access
Geunyeong Jang, Donghyeon Kim, In-Ho Lee, Haejoon Jung
2023 B conf
GLOBECOM
Hafiz Muhammad Ali Zeeshan, Syed Asad Ullah, Syed Ali Hassan, Zhiguo Ding, Haejoon Jung
2023 conf
VTC2023-Spring
Mahnoor Anjum, Muhammad Abdullah Khan, Sarah Basharat, Syed Ali Hassan, Haejoon Jung
2023 J jnl
IEEE Access
Donghyeon Kim, Seok-Chul Sean Kwon, Haejoon Jung, In-Ho Lee
2023 conf
GLOBECOM (Workshops)
Donghyeon Kim, Haejoon Jung, In-Ho Lee
2023 J jnl
IEEE Wirel. Commun. Lett.
Bowen Wang, Yanjing Sun, Haejoon Jung, Long Dinh Nguyen, Nguyen-Son Vo, Trung Q. Duong
2023 conf
ICC
Sarah Basharat, Syed Ali Hassan, Haejoon Jung, Aamir Mahmood, Mikael Gidlund
2023 B conf
GLOBECOM
Sarah Basharat, Syed Ali Hassan, Haejoon Jung, Kapal Dev, Aamir Mahmood, Mikael Gidlund
2023 B conf
GLOBECOM
Syed Asad Ullah, Shah Zeb, Syed Ali Hassan, Haejoon Jung, Kapal Dev
2023 B conf
GLOBECOM
Muhammad Abdullah Khan, Mahnoor Anjum, Syed Ali Hassan, Haejoon Jung
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Qamar Abbas, Syed Ali Hassan, Haejoon Jung, M. Shamim Hossain
2023 conf
ICC Workshops
Sarah Basharat, Syed Ali Hassan, Haejoon Jung
2023 conf
INFOCOM Workshops
Khawaja Muhammad Hamza, Sarah Basharat, Syed Ali Hassan, Haejoon Jung
2023 J jnl
IEEE Trans. Veh. Technol.
Muhammad Faraz Ul Abrar, Muhammad Talha, Rafay Iqbal Ansari, Syed Ali Hassan, Haejoon Jung
2023 conf
GLOBECOM (Workshops)
Muhammad Umer, Muhammad Ahmed Mohsin, Syed Ali Hassan, Haejoon Jung, Haris Pervaiz
2023 J jnl
IEEE Wirel. Commun.
Fakhar Zaman, Ahmad Farooq, Muhammad Asad Ullah, Haejoon Jung, Hyundong Shin, Moe Z. Win
2023 B conf
GLOBECOM
Byungha You, Haejoon Jung, In-Ho Lee
2023 J jnl
IEEE Commun. Lett.
Jijun Hwang, In-Ho Lee, Haejoon Jung
2023 J jnl
IEEE Trans. Veh. Technol.
Geunyeong Jang, Byungha You, In-Ho Lee, Haejoon Jung, Hyundong Shin
2023 J jnl
IEEE Trans. Veh. Technol.
Donghyeon Kim, Haejoon Jung, In-Ho Lee
2022 J jnl
IEEE Access
Rojeena Bajracharya, Rakesh Shrestha, Shiho Kim, Haejoon Jung
2022 J jnl
J. Commun. Networks
Een-Kee Hong, Inkyu Lee, Byonghyo Shim, Young-Chai Ko, Sang-Hyo Kim, Sangheon Pack, Kyunghan Lee, Sunwoo Kim, Jae-Hyun Kim, Yoan Shin, Younghan Kim, Haejoon Jung
2022 conf
ICTC
Geunyeong Jang, Byungha You, Haejoon Jung
2022 J jnl
Comput. Commun.
Mahnoor Anjum, Muhammad Abdullah Khan, Syed Ali Hassan, Haejoon Jung, Kapal Dev
2022 conf
VTC Spring
Fazal Muhammad Ali Khan, Syed Ali Hassan, Rafay Iqbal Ansari, Haejoon Jung
2022 J jnl
IEEE Trans. Wirel. Commun.
Seung-Woo Ko, Seong Jin Kim, Haejoon Jung, Sang Won Choi
2022 J jnl
Comput. Commun.
Noor Waqar, Syed Ali Hassan, Haris Pervaiz, Haejoon Jung, Kapal Dev
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Rojeena Bajracharya, Rakesh Shrestha, Syed Ali Hassan, Kostromitin Konstantin, Haejoon Jung
2022 J jnl
IEEE Wirel. Commun. Lett.
Byungha You, In-Ho Lee, Haejoon Jung
2022 J jnl
Phys. Commun.
Sarah Basharat, Haris Pervaiz, Syed Ali Hassan, Rafay Iqbal Ansari, Haejoon Jung, Kapal Dev, Gaojian Huang
2022 conf
ICC
Noor Waqar, Syed Ali Hassan, Ali Javed Hashmi, Haejoon Jung
2022 J jnl
IEEE Access
Rojeena Bajracharya, Rakesh Shrestha, Haejoon Jung, Hyundong Shin
2022 conf
ICDCS Workshops
Muhammad Usman, Sarah Basharat, Haris Pervaiz, Syed Ali Hassan, Haejoon Jung
2022 conf
DroneCom@MobiCom
Amara Umar, Sarah Basharat, Syed Ali Hassan, Haejoon Jung
2022 conf
VTC Spring
Muhammad Hassaan, Muhammad Bin Azhar, Kamran Naveed Syed, Syed Ali Hassan, Haris Pervaiz, Haejoon Jung
2022 J jnl
IEEE Wirel. Commun. Lett.
Haejoon Jung, Seung-Woo Ko
2022 J jnl
IEEE Trans. Ind. Informatics
Muhammad Waseem Akhtar, Syed Ali Hassan, Aamir Mahmood, Haejoon Jung, Hassaan Khaliq Qureshi, Mikael Gidlund
2022 J jnl
CoRR
Muhammad Faraz Ul Abrar, Muhammad Talha, Rafay Iqbal Ansari, Syed Ali Hassan, Haejoon Jung
2022 J jnl
IEEE Commun. Lett.
Byungha You, In-Ho Lee, Haejoon Jung
2022 J jnl
IEEE Trans. Veh. Technol.
Haejoon Jung, In-Ho Lee, Jingon Joung
2022 C conf
APCC
Byungha You, Haejoon Jung, In-Ho Lee
2022 J jnl
IEEE Trans. Ind. Electron.
Haejoon Jung, Byunghun Lee
2021 J jnl
IEEE Trans. Intell. Transp. Syst.
Muhammad Asaad Cheema, Muhammad Karam Shehzad, Hassaan Khaliq Qureshi, Syed Ali Hassan, Haejoon Jung
2021 J jnl
IEEE Trans. Green Commun. Netw.
Ahsan Waleed Nazar, Syed Ali Hassan, Haejoon Jung, Aamir Mahmood, Mikael Gidlund
2021 J jnl
IEEE Trans. Netw. Sci. Eng.
Muhammad Karam Shehzad, Arsalan Ahmad, Syed Ali Hassan, Haejoon Jung
2021 J jnl
IEEE Trans. Veh. Technol.
Ayesha Bint Saleem, Syed Ali Hassan, Haejoon Jung
2021 J jnl
IEEE Trans. Inf. Forensics Secur.
Haejoon Jung, In-Ho Lee
2021 conf
ICOIN
Rojeena Bajracharya, Haejoon Jung
2021 J jnl
IEEE Access
Donghyeon Kim, Haejoon Jung, In-Ho Lee
2021 J jnl
IEEE Syst. J.
Haejoon Jung, In-Ho Lee
2021 J jnl
IEEE Trans. Intell. Transp. Syst.
Sidra Tul Muntaha, Syed Ali Hassan, Haejoon Jung, M. Shamim Hossain
2021 J jnl
IEEE Commun. Lett.
Sachitha C. Bandara, Chamira U. S. Edussooriya, Haejoon Jung
2021 J jnl
IEEE Syst. J.
Byungha You, In-Ho Lee, Haejoon Jung
2021 J jnl
IEEE Netw.
Ayesha Bint Saleem, Syed Ali Hassan, Haejoon Jung, Sahil Garg, Georges Kaddoum, Mohsen Guizani
2021 conf
6G-ABS@MobiCom
Noor Waqar, Syed Ali Hassan, Aamir Mahmood, Mikael Gidlund, Haejoon Jung
2021 conf
ICC Workshops
Muhammad Waseem Akhtar, Syed Ali Hassan, Haejoon Jung, Haris Pervaiz
2021 J jnl
Sensors
Farhan Nawaz, Hemant Kumar, Syed Ali Hassan, Haejoon Jung
2021 J jnl
IEEE Wirel. Commun. Lett.
Byungha You, In-Ho Lee, Haejoon Jung
2021 J jnl
IEEE Trans. Veh. Technol.
Haejoon Jung, Seung-Woo Ko, In-Ho Lee
2021 J jnl
IEEE Netw.
Rojeena Bajracharya, Rakesh Shrestha, Syed Ali Hassan, Haejoon Jung, Rafay Iqbal Ansari, Mohsen Guizani
2021 conf
ICTC
Rojeena Bajracharya, Rakesh Shrestha, Haejoon Jung
2020 J jnl
Phys. Commun.
Sadaf Nawaz, Syed Ali Hassan, Haejoon Jung
2020 J jnl
Phys. Commun.
Sadaf Nawaz, Syed Ali Hassan, Haejoon Jung
2020 B conf
GLOBECOM
Ahsan Waleed Nazar, Syed Ali Hassan, Haejoon Jung
2020 J jnl
CoRR
Sidra Tul Muntaha, Syed Ali Hassan, Haejoon Jung, M. Shamim Hossain
2020 conf
DroneCom@MobiCom
Muhammad Karam Shehzad, Syed Ali Hassan, Miguel-Ángel Luque-Nieto, Javier Poncela, Haejoon Jung
2020 B conf
GLOBECOM
Muhammad Waseem Akhtar, Syed Ali Hassan, Haejoon Jung
2020 J jnl
Sensors
Rojeena Bajracharya, Rakesh Shrestha, Haejoon Jung
2020 J jnl
CoRR
Ahsan Waleed Nazar, Syed Ali Hassan, Haejoon Jung, Aamir Mahmood, Mikael Gidlund
2020 J jnl
Sensors
Haejoon Jung, In-Ho Lee
2020 J jnl
IEEE Trans. Veh. Technol.
Muhammad Waseem Akhtar, Syed Ali Hassan, Sajid Saleem, Haejoon Jung
2020 J jnl
Hum. centric Comput. Inf. Sci.
Muhammad Waseem Akhtar, Syed Ali Hassan, Rizwan Ghaffar, Haejoon Jung, Sahil Garg, M. Shamim Hossain
2020 conf
WCNC Workshops
Muhammad Sulaiman, Syed Ali Hassan, Haejoon Jung
2020 B conf
WCNC
Muhammad Usaid Akram, Usama Saeed, Syed Ali Hassan, Haejoon Jung
2020 J jnl
IEEE Wirel. Commun. Lett.
In-Ho Lee, Haejoon Jung
2019 J jnl
IEEE Access
Farhan Nawaz, Syed Ali Hassan, Ali Javed Hashmi, Haejoon Jung
2019 J jnl
Wirel. Commun. Mob. Comput.
In-Ho Lee, Jung-Bin Kim, Haejoon Jung, Seok-Chul Sean Kwon, Ernest Kurniawan
2019 J jnl
Sensors
Bushra Bashir Chaoudhry, Syed Ali Hassan, Joachim Speidel, Haejoon Jung
2019 B conf
GLOBECOM
Muhammad Asim Jan, Syed Ali Hassan, Haejoon Jung
2019 J jnl
IEEE Trans. Wirel. Commun.
Haejoon Jung, In-Ho Lee
2019 J jnl
IEEE Wirel. Commun. Lett.
Haejoon Jung, In-Ho Lee
2018 J jnl
IEEE Commun. Lett.
Haejoon Jung, In-Ho Lee
2018 J jnl
J. Sens. Actuator Networks
Muhammad Imran, Haejoon Jung
2018 J jnl
Sensors
Haejoon Jung, In-Ho Lee
2018 J jnl
IEEE Wirel. Commun. Lett.
Haejoon Jung, In-Ho Lee
2017 J jnl
Ad Hoc Networks
Haejoon Jung, Mary Ann Weitnauer
2017 J jnl
IEEE Wirel. Commun. Lett.
In-Ho Lee, Haejoon Jung
2017 J jnl
Sensors
Haejoon Jung, In-Ho Lee
2017 J jnl
Wirel. Commun. Mob. Comput.
Haejoon Jung, In-Ho Lee
2016 J jnl
IEEE Commun. Lett.
Haejoon Jung, In-Ho Lee
2015 J jnl
Ad Hoc Networks
Jian Lin, Haejoon Jung, Yong Jun Chang, Jin Woo Jung, Mary Ann Weitnauer
2014
Haejoon Jung
2014 J jnl
IEEE Trans. Wirel. Commun.
Haejoon Jung, Mary Ann Weitnauer
2014 B conf
WCNC
Yong Jun Chang, Haejoon Jung, Sunghwan Cho, Mary Ann Weitnauer
2013 conf
MILCOM
Haejoon Jung, Mary Ann Weitnauer
2013 J jnl
IEEE Trans. Wirel. Commun.
Haejoon Jung, Mary Ann Weitnauer
2013 conf
ICC
Haejoon Jung, Mary Ann Ingram
2012 conf
ICC
Haejoon Jung, Mary Ann Ingram
2011 conf
MILCOM
Haejoon Jung, Mary Ann Ingram
2011 conf
EW
Yong Jun Chang, Haejoon Jung, Mary Ann Ingram
2010 conf
HotEmNets
Yong Jun Chang, Haejoon Jung, Mary Ann Ingram
redb/extractors/pe_extractors/pe_signature.py
← Index redb/extractors/pe_extractors/pe_signature.py python
import inspect
import yara_x
from datetime import datetime, timezone
from signify.authenticode import SignedPEFile
from typing import Any, Dict, List, Tuple

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PECertificate, PESigner, PECodeSigningInfo


class PESignatureExtractor(PEExtractor):
    """
    RFC 3161 - Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)
    Section 2.4.2 defines the TSTInfo structure.
    https://tools.ietf.org/html/rfc3161#section-2.4.2

    Microsoft Authenticode Time Stamping Specification
    https://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        self.elastic_index = self.index_prefix + "-pe_signature"
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.code_signing_info = None

    def tag(self):
        return [Tag.PE_CERTIFICATE.value, Tag.PE_SIGNER.value, Tag.PE_SIGNATURE.value]

    def _extract_certificate_info(self, certificate):
        self.log.debug(inspect.currentframe().f_code.co_name)

        # YARA-X returns datetime objects directly, not Unix timestamps
        not_before = certificate["not_before"]
        not_after = certificate["not_after"]

        # Handle both datetime objects and Unix timestamps for compatibility
        if isinstance(not_before, datetime):
            valid_from = not_before.strftime("%Y-%m-%d %H:%M:%S")
        else:
            valid_from = datetime.fromtimestamp(int(not_before), timezone.utc).strftime("%Y-%m-%d %H:%M:%S")

        if isinstance(not_after, datetime):
            valid_to = not_after.strftime("%Y-%m-%d %H:%M:%S")
        else:
            valid_to = datetime.fromtimestamp(int(not_after), timezone.utc).strftime("%Y-%m-%d %H:%M:%S")

        return PECertificate(
            certificate_serial_number=certificate["serial"],
            certificate_subject=certificate["subject"],
            certificate_issuer=certificate["issuer"],
            certificate_valid_from=valid_from,
            certificate_valid_to=valid_to,
            certificate_thumbprint=certificate["thumbprint"].upper(),
            certificate_algorithm=certificate["algorithm"],
        )

    def _extract_signer_info(self, signer):
        self.log.debug(inspect.currentframe().f_code.co_name)

        # YARA-X returns datetime objects directly, not Unix timestamps
        not_before = signer["not_before"]
        not_after = signer["not_after"]

        # Handle both datetime objects and Unix timestamps for compatibility
        if isinstance(not_before, datetime):
            valid_from = not_before.strftime("%Y-%m-%d %H:%M:%S")
        else:
            valid_from = datetime.fromtimestamp(int(not_before), timezone.utc).strftime("%Y-%m-%d %H:%M:%S")

        if isinstance(not_after, datetime):
            valid_to = not_after.strftime("%Y-%m-%d %H:%M:%S")
        else:
            valid_to = datetime.fromtimestamp(int(not_after), timezone.utc).strftime("%Y-%m-%d %H:%M:%S")

        return PESigner(
            signer_serial_number=signer["serial"],
            signer_subject=signer["subject"],
            signer_issuer=signer["issuer"],
            signer_valid_from=valid_from,
            signer_valid_to=valid_to,
            signer_thumbprint=signer["thumbprint"].upper(),
            signer_algorithm=signer["algorithm"],
        )

    def _extract_signature_info(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        pe_rules = """
            import "pe"
            rule is_pe {
                condition: 
                    pe.is_pe
            }
        """
        rule = yara_x.compile(pe_rules)
        results = rule.scan(self.binary)
        yara_output = results.module_outputs

        signature_info = yara_output["pe"]["signatures"][0]
        number_of_certificates = signature_info["number_of_certificates"]
        signature_verified = signature_info["verified"]
        self.code_signing_info = PECodeSigningInfo(
            _id=self.sha256,
            signature_verified=signature_verified,
            number_of_certificates=int(number_of_certificates),
        )

        keys = signature_info.keys()
        if "certificates" in keys:
            self.log.debug("Extracting PE Signing Certificates")
            certificates = signature_info["certificates"]
            certificates_list = []
            for cert in certificates:
                cert_info = self._extract_certificate_info(cert)
                certificates_list.append(cert_info)
            self.code_signing_info.x509_certificates = certificates_list

        if "signer_info" in keys:
            self.log.debug("Extracting PE Signing Signer Info")
            signers = signature_info["signer_info"]["chain"]
            signers_list = []
            for signer in signers:
                sig = self._extract_signer_info(signer)
                signers_list.append(sig)
            self.code_signing_info.signers = signers_list

        if "countersignatures" in keys:
            self.log.debug("Extracting PE Signing Countersignatures")
            countersignatures = signature_info["countersignatures"][0]["chain"]
            countersigners_list = []
            for csigner in countersignatures:
                csig = self._extract_signer_info(csigner)
                countersigners_list.append(csig)
            self.code_signing_info.countersigners = countersigners_list

        with open(self.filepath, "rb") as f:
            self.log.debug("Extracting PE Signing spcSpOpusInfo")
            sig_pefile = SignedPEFile(f)
            try:
                spc_opusinfo = {}
                for signed_data in sig_pefile.signed_datas:
                    spc_opusinfo["ProgramName"] = signed_data.signer_info.program_name
                    spc_opusinfo["MoreInfo"] = signed_data.signer_info.more_info
                    self.code_signing_info.spcSpOpusInfo = spc_opusinfo

                    if signed_data.signer_info.countersigner is not None:
                        stime = signed_data.signer_info.countersigner.signing_time
                        self.code_signing_info.date_signed = stime.strftime(
                            "%Y-%m-%d %H:%M:%S"
                        )
            except Exception as e:
                self.log.error(
                    f"Error while extracting spcSpOpusInfo or signing date: {e}"
                )

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            if self._is_signed():
                self._extract_signature_info()
                # self.export_to_elastic([self.code_signing_info])
                return self.code_signing_info
            return None
        except Exception as e:
            self.log.error(f"Error extracting PE Signature: {e}")
            return None

    # def prepare_export_data(self, exporter_type: str) -> Any:
    #     self.log.debug(inspect.currentframe().f_code.co_name)
    #     if exporter_type == "ElasticsearchExporter":
    #         return self.extract()
    #     elif exporter_type == "ClickHouseExporter":
    #         signing_info = self.extract()
    #         if signing_info is None:
    #             return None
                
    #         current_time = datetime.now(timezone.utc)
            
    #         # Prepare data for redb_pe_signatures table
    #         signatures_data = [[
    #             self.sha256,                                    # sha256
    #             self.md5,                                       # md5
    #             self.sha1,                                      # sha1
    #             signing_info.signature_verified,                # signature_verified
    #             datetime.strptime(signing_info.date_signed, "%Y-%m-%d %H:%M:%S") if signing_info.date_signed else None,  # date_signed
    #             signing_info.number_of_certificates,            # number_of_certificates
    #             signing_info.spcSpOpusInfo.get('ProgramName', None) if signing_info.spcSpOpusInfo else None,  # program_name
    #             signing_info.spcSpOpusInfo.get('MoreInfo', None) if signing_info.spcSpOpusInfo else None,    # more_info
    #             current_time                                    # analysis_date
    #         ]]

    #         certificates_data = []
            
    #         # Process signers
    #         if signing_info.signers:
    #             for signer in signing_info.signers:
    #                 certificates_data.append(self._prepare_certificate_data(signer, 'signer', current_time))
            
    #         # Process countersigners
    #         if signing_info.countersigners:
    #             for csigner in signing_info.countersigners:
    #                 certificates_data.append(self._prepare_certificate_data(csigner, 'countersigner', current_time))
            
    #         # Process x509 certificates
    #         if signing_info.x509_certificates:
    #             for cert in signing_info.x509_certificates:
    #                 certificates_data.append(self._prepare_certificate_data(cert, 'chain', current_time))
            
    #         return {
    #             'multi_table': True,
    #             'signatures': {
    #                 'table': 'redb_pe_signatures',
    #                 'data': signatures_data,
    #                 'column_names': [
    #                     'sha256', 'md5', 'sha1', 'signature_verified', 'date_signed',
    #                     'number_of_certificates', 'spcSpOpusInfo_program_name', 'spcSpOpusInfo_more_info', 'analysis_date'
    #                 ],
    #                 'column_type_names': [
    #                     'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
    #                     'Boolean', 'DateTime64(3, \'UTC\')', 'UInt8',
    #                     'Nullable(String)', 'Nullable(String)', 'DateTime64(3, \'UTC\')'
    #                 ]
    #             },
    #             'certificates': {
    #                 'table': 'redb_pe_certificates',
    #                 'data': certificates_data,
    #                 'column_names': [
    #                     'sha256', 'md5', 'sha1', 'certificate_type', 'certificate_algorithm',
    #                     'certificate_issuer', 'certificate_subject', 'certificate_serial_number',
    #                     'certificate_thumbprint', 'certificate_valid_from', 'certificate_valid_to',
    #                     'analysis_date'
    #                 ],
    #                 'column_type_names': [
    #                     'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
    #                     'Enum(\'signer\', \'countersigner\', \'chain\')', 'LowCardinality(String)',
    #                     'LowCardinality(String)', 'LowCardinality(String)', 'String',
    #                     'String', 'DateTime64(3, \'UTC\')', 'DateTime64(3, \'UTC\')',
    #                     'DateTime64(3, \'UTC\')'
    #                 ]
    #             }
    #         }

    # def _prepare_certificate_data(self, cert, cert_type: str, analysis_time: datetime) -> List:
    #     """Helper method to prepare certificate data for ClickHouse"""
    #     self.log.debug(inspect.currentframe().f_code.co_name)
    #     prefix = "certificate_" if hasattr(cert, "certificate_algorithm") else "signer_"
        
    #     # Get serial number and clean it up
    #     serial_number = getattr(cert, f"{prefix}serial_number")
    #     if serial_number:
    #         serial_number = serial_number.replace(':', '')
        
    #     return [
    #         self.sha256,                          # sha256
    #         self.md5,                             # md5
    #         self.sha1,                            # sha1
    #         cert_type,                            # certificate_type
    #         getattr(cert, f"{prefix}algorithm"),   # certificate_algorithm
    #         getattr(cert, f"{prefix}issuer"),     # certificate_issuer
    #         getattr(cert, f"{prefix}subject"),    # certificate_subject
    #         serial_number,                        # certificate_serial_number
    #         getattr(cert, f"{prefix}thumbprint"),  # certificate_thumbprint
    #         datetime.strptime(getattr(cert, f"{prefix}valid_from"), "%Y-%m-%d %H:%M:%S"),  # certificate_valid_from
    #         datetime.strptime(getattr(cert, f"{prefix}valid_to"), "%Y-%m-%d %H:%M:%S"),    # certificate_valid_to
    #         analysis_time                         # analysis_date
    #     ]
    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            signing_info = self.extract()
            if signing_info is None:
                return None
                
            current_time = datetime.now(timezone.utc)
            
            # Prepare data for redb_pe_signatures table
            signatures_data = [[
                self.sha256,                                    # sha256
                self.md5,                                       # md5
                self.sha1,                                      # sha1
                signing_info.signature_verified,                # signature_verified
                datetime.strptime(signing_info.date_signed, "%Y-%m-%d %H:%M:%S") if signing_info.date_signed else None,  # date_signed
                signing_info.number_of_certificates,            # number_of_certificates
                signing_info.spcSpOpusInfo.get('ProgramName', None) if signing_info.spcSpOpusInfo else None,  # program_name
                signing_info.spcSpOpusInfo.get('MoreInfo', None) if signing_info.spcSpOpusInfo else None,    # more_info
                current_time                                    # analysis_date
            ]]

            # Prepare data for redb_pe_certificates table
            certificates_data = []
            
            # Process signers
            if signing_info.signers:
                for signer in signing_info.signers:
                    certificates_data.append(self._prepare_certificate_data(signer, 'signer', current_time))
            
            # Process countersigners
            if signing_info.countersigners:
                for csigner in signing_info.countersigners:
                    certificates_data.append(self._prepare_certificate_data(csigner, 'countersigner', current_time))
            
            # Process x509 certificates
            if signing_info.x509_certificates:
                for cert in signing_info.x509_certificates:
                    certificates_data.append(self._prepare_certificate_data(cert, 'chain', current_time))
            
            return {
                'multi_table': True,
                'signatures': {
                    'table': 'redb_pe_signatures',
                    'data': signatures_data,
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'signature_verified', 'date_signed',
                        'number_of_certificates', 'spcSpOpusInfo_program_name', 'spcSpOpusInfo_more_info', 'analysis_date'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'Boolean', 'DateTime64(3, \'UTC\')', 'UInt8',
                        'Nullable(String)', 'Nullable(String)', 'DateTime64(3, \'UTC\')'
                    ]
                },
                'certificates': {
                    'table': 'redb_pe_certificates',
                    'data': certificates_data,
                    'column_names': [
                        'sha256', 'md5', 'sha1', 'certificate_type', 'certificate_algorithm',
                        'certificate_issuer', 'certificate_subject', 'certificate_serial_number',
                        'certificate_thumbprint', 'certificate_valid_from', 'certificate_valid_to',
                        'analysis_date'
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                        'Enum8(\'signer\' = 1, \'countersigner\' = 2, \'chain\' = 3)', 'LowCardinality(String)',
                        'LowCardinality(String)', 'LowCardinality(String)', 'String',
                        'String', 'DateTime64(3, \'UTC\')', 'DateTime64(3, \'UTC\')',
                        'DateTime64(3, \'UTC\')'
                    ]
                }
            }

    # def _prepare_certificate_data(self, cert, cert_type: str, analysis_time: datetime) -> List:
    #     """Helper method to prepare certificate data for ClickHouse"""
    #     self.log.debug(inspect.currentframe().f_code.co_name)
    #     prefix = "certificate_" if hasattr(cert, "certificate_algorithm") else "signer_"
        
    #     # Get serial number and clean it up - with strict handling
    #     serial_number = getattr(cert, f"{prefix}serial_number", "UNKNOWN")
    #     if not serial_number or not str(serial_number).strip():
    #         serial_number = "UNKNOWN"
    #     else:
    #         serial_number = serial_number.replace(':', '')
    #         if not serial_number.strip():  # Double check after cleaning
    #             serial_number = "UNKNOWN"
        
    #     return [
    #         self.sha256,                          # sha256
    #         self.md5,                             # md5
    #         self.sha1,                            # sha1
    #         cert_type,                            # certificate_type
    #         getattr(cert, f"{prefix}algorithm"),   # certificate_algorithm
    #         getattr(cert, f"{prefix}issuer"),     # certificate_issuer
    #         getattr(cert, f"{prefix}subject"),    # certificate_subject
    #         serial_number,                        # certificate_serial_number
    #         getattr(cert, f"{prefix}thumbprint"),  # certificate_thumbprint
    #         datetime.strptime(getattr(cert, f"{prefix}valid_from"), "%Y-%m-%d %H:%M:%S"),  # certificate_valid_from
    #         datetime.strptime(getattr(cert, f"{prefix}valid_to"), "%Y-%m-%d %H:%M:%S"),    # certificate_valid_to
    #         analysis_time                         # analysis_date
    #     ]

    def _prepare_certificate_data(self, cert, cert_type: str, analysis_time: datetime) -> List:
        """Helper method to prepare certificate data for ClickHouse"""
        self.log.debug(inspect.currentframe().f_code.co_name)
        prefix = "certificate_" if hasattr(cert, "certificate_algorithm") else "signer_"
        
        def clean_string(value, field_name):
            if value is None or (isinstance(value, str) and not value.strip()):
                self.log.warning(f"Empty or None value found for {field_name}")
                return "UNKNOWN"
            return str(value).strip()
        
        try:
            serial_number = getattr(cert, f"{prefix}serial_number", "UNKNOWN")
            serial_number = clean_string(serial_number, "serial_number")
            if serial_number != "UNKNOWN":
                serial_number = serial_number.replace(':', '')
        
            return [
                clean_string(self.sha256, "sha256"),
                clean_string(self.md5, "md5"),
                clean_string(self.sha1, "sha1"),
                cert_type,
                clean_string(getattr(cert, f"{prefix}algorithm"), "algorithm"),
                clean_string(getattr(cert, f"{prefix}issuer"), "issuer"),
                clean_string(getattr(cert, f"{prefix}subject"), "subject"),
                serial_number,
                clean_string(getattr(cert, f"{prefix}thumbprint"), "thumbprint"),
                datetime.strptime(getattr(cert, f"{prefix}valid_from"), "%Y-%m-%d %H:%M:%S"),
                datetime.strptime(getattr(cert, f"{prefix}valid_to"), "%Y-%m-%d %H:%M:%S"),
                analysis_time
            ]
        except Exception as e:
            self.log.error(f"Error preparing certificate data: {str(e)}")
            self.log.error(f"Certificate data that caused error: {cert}")
            raise

    def get_clickhouse_table(self) -> str:
        """Required by PEExtractor abstract base class"""
        return "redb_pe_signatures"  # Return the primary table

    def get_clickhouse_tables(self) -> Dict[str, str]:
        """Additional method for multi-table support"""
        return {
            'signatures': 'redb_pe_signatures',
            'certificates': 'redb_pe_certificates'
        }