Rajat Subhra Chakraborty

164 papers A* 1A 11B 1C 12Misc 9Journal 79Unranked 42
YearRankTypeTitle / Venue / Authors
2026 J jnl
Digit. Signal Process.
Debjit Das, Ruchira Naskar, Rajat Subhra Chakraborty
2026 J jnl
IEEE Trans. Netw. Serv. Manag.
Anurag Dutta, Sangita Roy, Rajat Subhra Chakraborty
2025 J jnl
IET Circuits Devices Syst.
Gisha Chittattukara Girijan, Ananda Sankar Chakraborty, Rajat Subhra Chakraborty, Bijoy Antony Jose, Jimson Mathew
2025 J jnl
Found. Trends Electron. Des. Autom.
Imed Ben Dhaou, Syhem Larguech, Sree Ranjani Rajendran, Rajat Subhra Chakraborty, Hannu Tenhunen, Ahmed Abdelgawad
2025 J jnl
Found. Trends Electron. Des. Autom.
Sneha Swaroopa, Rijoy Mukherjee, Anushka Debnath, Rajat Subhra Chakraborty
2025 J jnl
Pattern Recognit. Lett.
Arnab Kumar Das, Aritra Bose, Priya Manohar, Anurag Dutta, Ruchira Naskar, Rajat Subhra Chakraborty
2025 J jnl
IEEE Embed. Syst. Lett.
Anurag Dutta, Satya Prakash Nayak, Ruchira Naskar, Rajat Subhra Chakraborty
2025 J jnl
Comput. Electr. Eng.
Sangita Roy, Rajat Subhra Chakraborty
2025 J jnl
IACR Cryptol. ePrint Arch.
Akashdeep Saha, Siddhartha Chowdhury, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2025 J jnl
CoRR
Sneha Swaroopa, Venkata Sreekanth Balijabudda, Rajat Subhra Chakraborty, Indrajit Chakrabarti
2025 J jnl
IEEE Trans. Reliab.
Anindya Bhattacharyya, Anurag Dutta, Rajendra Prasad Behera, Arup Dasgupta, Rajat Subhra Chakraborty
2025 conf
BRAINS
Sumitava Biswas, Sandip Chakraborty, Rajat Subhra Chakraborty
2025 conf
CVPR Workshops
Anurag Dutta, Arnab Kumar Das, Ruchira Naskar, Rajat Subhra Chakraborty
2024 J jnl
IEEE Embed. Syst. Lett.
Sneha Swaroopa, Sivappriya Manivannan, Rajat Subhra Chakraborty, Indrajit Chakrabarti
2024 conf
ACM Great Lakes Symposium on VLSI
Kuheli Pratihar, Soumi Chatterjee, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2024 J jnl
Integr.
Mahabub Hasan Mahalat, Shyam Subba, Anindan Mondal, Biplab K. Sikdar, Rajat Subhra Chakraborty, Bibhash Sen
2024 conf
ATS
Venkata Sreekanth Balijabudda, Indrajit Chakrabarti, Rajat Subhra Chakraborty
2024 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kuheli Pratihar, Soumi Chatterjee, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2024 J jnl
CoRR
Sneha Swaroopa, Rijoy Mukherjee, Anushka Debnath, Rajat Subhra Chakraborty
2024 J jnl
ACM Trans. Design Autom. Electr. Syst.
Rijoy Mukherjee, Archisman Ghosh, Rajat Subhra Chakraborty
2024 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Kuheli Pratihar, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2024 J jnl
IEEE Embed. Syst. Lett.
Sivappriya Manivannan, Rajat Subhra Chakraborty, Indrajit Chakrabarti, Jothi Rangasamy
2024 conf
ATS
Rijoy Mukherjee, Sneha Swaroopa, Rajat Subhra Chakraborty
2023 J jnl
J. Hardw. Syst. Secur.
Gisha C. G., Ananda Sankar Chakraborty, Rajat Subhra Chakraborty, Bijoy Antony Jose, Jimson Mathew
2023 J jnl
Multim. Tools Appl.
Divakar Singh, Priyanka Singh, Riyanka Jena, Rajat Subhra Chakraborty
2023 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Rijoy Mukherjee, Rajat Subhra Chakraborty
2023 J jnl
IEEE Trans. Computers
Kuheli Pratihar, Urbi Chatterjee, Manaar Alam, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2023 book
Pranesh Santikellur, Rajat Subhra Chakraborty
2023 conf
MWSCAS
Gisha C. G., Ananda Sankar Chakraborty, Rajat Subhra Chakraborty, Bijoy Antony Jose, Jimson Mathew
2023 J jnl
Multim. Tools Appl.
Debjit Das, Ruchira Naskar, Rajat Subhra Chakraborty
2023 Misc conf
ICISS
Venkata Sreekanth Balijabudda, Kamalesh Acharya, Rajat Subhra Chakraborty, Indrajit Chakrabarti
2022 J jnl
J. Cryptogr. Eng.
Rijoy Mukherjee, Sree Ranjani Rajendran, Rajat Subhra Chakraborty
2022 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Pranesh Santikellur, Rajat Subhra Chakraborty
2022 A conf
DATE
Akashdeep Saha, Urbi Chatterjee, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2022 ch.
Behavioral Synthesis for Hardware Security
Pranesh Santikellur, Rajat Subhra Chakraborty, Swarup Bhunia
2022 J jnl
ACM Trans. Design Autom. Electr. Syst.
Mahabub Hasan Mahalat, Suraj Mandal, Anindan Mondal, Bibhash Sen, Rajat Subhra Chakraborty
2022 conf
CVIP (1)
Debjit Das, Banalata Bhunia, Ruchira Naskar, Rajat Subhra Chakraborty
2022 J jnl
IEEE Embed. Syst. Lett.
Rijoy Mukherjee, Rajat Subhra Chakraborty
2022 conf
ASCAT
Akashdeep Saha, Hrivu Banerjee, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2021 J jnl
IEEE Trans. Inf. Forensics Secur.
Urbi Chatterjee, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2021 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Pranesh Santikellur, Rajat Subhra Chakraborty
2021 J jnl
ACM Trans. Design Autom. Electr. Syst.
Saranyu Chattopadhyay, Pranesh Santikellur, Rajat Subhra Chakraborty, Jimson Mathew, Marco Ottavi
2021 J jnl
IACR Cryptol. ePrint Arch.
Kuheli Pratihar, Urbi Chatterjee, Manaar Alam, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2021 conf
ACM Great Lakes Symposium on VLSI
Pranesh Santikellur, Rijoy Mukherjee, Rajat Subhra Chakraborty
2021 J jnl
IET Comput. Digit. Tech.
Anindita Chakraborty, Vivek Maurya, Sneha Prasad, Suryansh Gupta, Rajat Subhra Chakraborty, Hafizur Rahaman
2021 C conf
VLSI-SoC
Akashdeep Saha, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2021 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Akashdeep Saha, Hrivu Banerjee, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2021 J jnl
IACR Cryptol. ePrint Arch.
Akashdeep Saha, Urbi Chatterjee, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2020 J jnl
IEEE Des. Test
Tamzidul Hoque, Rajat Subhra Chakraborty, Swarup Bhunia
2020 J jnl
ACM Trans. Design Autom. Electr. Syst.
Urbi Chatterjee, Soumi Chatterjee, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2020 conf
AsianHOST
Diangarti Bhalang Tariang, Sri Charan Birudaraju, Ruchira Naskar, Vijeta Khare, Rajat Subhra Chakraborty
2020 J jnl
J. Hardw. Syst. Secur.
Rijoy Mukherjee, Vidya Govindan, Sandhya Koteshwara, Amitabh Das, Keshab K. Parhi, Rajat Subhra Chakraborty
2020 conf
ASHES@CCS
Sree Ranjani Rajendran, Rijoy Mukherjee, Rajat Subhra Chakraborty
2020 conf
WWW (Companion Volume)
Urbi Chatterjee, Rajat Sadhukhan, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty, Debashis Mahata, Mukesh M. Prabhu
2020 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Aniket Roy, Rajat Subhra Chakraborty
2019 conf
AsianHOST
Pranesh Santikellur, Lakshya, Shashi Ranjan Prakash, Rajat Subhra Chakraborty
2019 J jnl
IEEE Signal Process. Lett.
Diangarti Bhalang Tariang, Rajat Subhra Chakraborty, Ruchira Naskar
2019 J jnl
J. Hardw. Syst. Secur.
Pallabi Ghosh, Aritra Bhattacharya, Domenic Forte, Rajat Subhra Chakraborty
2019 J jnl
IEEE Trans. Dependable Secur. Comput.
Urbi Chatterjee, Vidya Govindan, Rajat Sadhukhan, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty, Debashis Mahata, Mukesh M. Prabhu
2019 conf
CVPR Workshops
Diangarti Bhalang Tariang, Prithviraj Senguptab, Aniket Roy, Rajat Subhra Chakraborty, Ruchira Naskar
2019 C conf
ICCD
Saranyu Chattopadhyay, Rajat Subhra Chakraborty
2019 J jnl
IACR Cryptol. ePrint Arch.
Pranesh Santikellur, Aritra Bhattacharyay, Rajat Subhra Chakraborty
2019 conf
AsianHOST
Venkata Sreekanth Balijabudda, Dhruv Thapar, Pranesh Santikellur, Rajat Subhra Chakraborty, Indrajit Chakrabarti
2019 ch.
Security and Fault Tolerance in Internet of Things
Durga Prasad Sahoo, Arnab Bag, Sikhar Patranabis, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2019 conf
ATS
Saranyu Chattopadhyay, Preeti Kumari, Biswajit Ray, Rajat Subhra Chakraborty
2019 conf
SPACE
Vidya Govindan, Sandhya Koteshwara, Amitabh Das, Keshab K. Parhi, Rajat Subhra Chakraborty
2019 J jnl
IEEE Trans. Ind. Informatics
Pallabi Ghosh, Rajat Subhra Chakraborty
2019 conf
SPACE
Krishna Bagadia, Urbi Chatterjee, Debapriya Basu Roy, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2019 book
Security and Fault Tolerance in Internet of Things
Rajat Subhra Chakraborty, Jimson Mathew, Athanasios V. Vasilakos
2019 A* conf
DAC
Urbi Chatterjee, Pranesh Santikellur, Rajat Sadhukhan, Vidya Govindan, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2018 J jnl
J. Hardw. Syst. Secur.
Vidya Govindan, Rajat Subhra Chakraborty, Pranesh Santikellur, Aditya Kumar Chaudhary
2018 J jnl
IEEE Trans. Computers
Durga Prasad Sahoo, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty, Phuong Ha Nguyen
2018 J jnl
IEEE Embed. Syst. Lett.
Debapriya Basu Roy, Manaar Alam, Sarani Bhattacharya, Vidya Govindan, Francesco Regazzoni, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2018 A conf
DATE
Mustafa Khairallah, Rajat Sadhukhan, Radhamanjari Samanta, Jakub Breier, Shivam Bhasin, Rajat Subhra Chakraborty, Anupam Chattopadhyay, Debdeep Mukhopadhyay
2018 conf
CVPR Workshops
Aniket Roy, Diangarti Bhalang Tariang, Rajat Subhra Chakraborty, Ruchira Naskar
2018 conf
DSP
Urbi Chatterjee, Rajat Sadhukhan, Vidya Govindan, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty, Sweta Pati, Debashis Mahata, Mukesh M. Prabhu
2018 A conf
DATE
Urbi Chatterjee, Durga Prasad Sahoo, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2017 J jnl
IEEE Trans. Emerg. Top. Comput.
Rajat Subhra Chakraborty, Samuel Pagliarini, Jimson Mathew, Sree Ranjani Rajendran, M. Nirmala Devi
2017 J jnl
ACM Trans. Embed. Comput. Syst.
Urbi Chatterjee, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2017 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Anju P. Johnson, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2017 conf
ICME Workshops
Diangarti Bhalang Tariang, Aniket Roy, Rajat Subhra Chakraborty, Ruchira Naskar
2017 J jnl
IEEE Trans. Computers
Rajat Subhra Chakraborty, Ratan Rahul Jeldi, Indrasish Saha, Jimson Mathew
2017 conf
CVPR Workshops
Aniket Roy, Rajat Subhra Chakraborty, Venkata Udaya Sameer, Ruchira Naskar
2017 B conf
ICIP
Aniket Roy, Akhil Konda, Rajat Subhra Chakraborty
2017 C conf
DSD
Pallabi Ghosh, Rajat Subhra Chakraborty
2017 conf
HOST
Krishna Bagadia, Urbi Chatterjee, Debapriya Basu Roy, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2017 J jnl
ACM Trans. Embed. Comput. Syst.
Jimson Mathew, Rajat Subhra Chakraborty, Dhiraj K. Pradhan
2017 J jnl
IACR Cryptol. ePrint Arch.
Urbi Chatterjee, Vidya Govindan, Rajat Sadhukhan, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty, Debashis Mahata, Mukesh M. Prabhu
2017 J jnl
Microprocess. Microsystems
Anju P. Johnson, Sikhar Patranabis, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2017 J jnl
IACR Cryptol. ePrint Arch.
Phuong Ha Nguyen, Durga Prasad Sahoo, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2017 J jnl
ACM Trans. Design Autom. Electr. Syst.
Phuong Ha Nguyen, Durga Prasad Sahoo, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2017 C conf
DSD
Durga Prasad Sahoo, Phuong Ha Nguyen, Debapriya Basu Roy, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2016 J jnl
IACR Cryptol. ePrint Arch.
Durga Prasad Sahoo, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty, Phuong Ha Nguyen
2016 J jnl
IACR Cryptol. ePrint Arch.
Urbi Chatterjee, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2016 J jnl
J. Signal Process. Syst.
Ruchira Naskar, Rajat Subhra Chakraborty
2016 J jnl
IACR Cryptol. ePrint Arch.
Durga Prasad Sahoo, Phuong Ha Nguyen, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2016 J jnl
IACR Cryptol. ePrint Arch.
Krishna Bagadia, Urbi Chatterjee, Debapriya Basu Roy, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2016 C conf
FDTC
Durga Prasad Sahoo, Sikhar Patranabis, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2016 J jnl
IACR Cryptol. ePrint Arch.
Durga Prasad Sahoo, Sikhar Patranabis, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2016 Misc conf
VLSID
Urbi Chatterjee, Rajat Subhra Chakraborty, Jimson Mathew, Dhiraj K. Pradhan
2016 C conf
IWDW
Aniket Roy, Rajat Subhra Chakraborty
2016 C conf
DSD
Anju P. Johnson, Sikhar Patranabis, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2016 J jnl
IACR Cryptol. ePrint Arch.
Souvik Sonar, Debapriya Basu Roy, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2016 C conf
MEMOCODE
Manaar Alam, Debapriya Basu Roy, Sarani Bhattacharya, Vidya Govindan, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2016 C conf
DSD
Sayandeep Saha, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2016 J jnl
ACM Trans. Embed. Comput. Syst.
Urbi Chatterjee, Rajat Subhra Chakraborty, Hitesh Kapoor, Debdeep Mukhopadhyay
2015 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Durga Prasad Sahoo, Phuong Ha Nguyen, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2015 ch.
Computational Intelligence in Digital and Network Designs and Applications
Ayan Palchaudhuri, Rajat Subhra Chakraborty
2015 conf
WESS
Anju P. Johnson, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2015 J jnl
ACM Trans. Embed. Comput. Syst.
Jimson Mathew, Rajat Subhra Chakraborty, Durga Prasad Sahoo, Yuanfan Yang, Dhiraj K. Pradhan
2015 J jnl
IEEE Trans. Multi Scale Comput. Syst.
Anju P. Johnson, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2015 J jnl
Integr.
Jimson Mathew, Rajat Subhra Chakraborty, Durga Prasad Sahoo, Yuanfan Yang, Dhiraj K. Pradhan
2015 C conf
DSD
Ayan Palchaudhuri, Rajat Subhra Chakraborty, Durga Prasad Sahoo
2015 A conf
DATE
Phuong Ha Nguyen, Durga Prasad Sahoo, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2015 A conf
CHES
Sayandeep Saha, Rajat Subhra Chakraborty, Srinivasa Shashank Nuthakki, Anshul, Debdeep Mukhopadhyay
2015 J jnl
IACR Cryptol. ePrint Arch.
Sayandeep Saha, Rajat Subhra Chakraborty, Srinivasa Shashank Nuthakki, Anshul, Debdeep Mukhopadhyay
2015 Misc conf
ICISS
Aniket Roy, Rajat Subhra Chakraborty, Ruchira Naskar
2015 ed.
SPACE
Rajat Subhra Chakraborty, Peter Schwabe, Jon A. Solworth
2015 C conf
DSD
Durga Prasad Sahoo, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2015 Misc conf
VLSID
Debdeep Mukhopadhyay, Rajat Subhra Chakraborty, Phuong Ha Nguyen, Durga Prasad Sahoo
2014 conf
HOST
Durga Prasad Sahoo, Sayandeep Saha, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty, Hitesh Kapoor
2014 conf
VDAT
Phuong Ha Nguyen, Durga Prasad Sahoo, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2014 conf
WESS
Anju P. Johnson, Sayandeep Saha, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay, Sezer Gören
2014 book
Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2014 conf
ACRI
Ayan Palchaudhuri, Rajat Subhra Chakraborty, Mohammad Salman, Sreemukh Kardas, Debdeep Mukhopadhyay
2014 book
Reversible Digital Watermarking
Ruchira Naskar, Rajat Subhra Chakraborty
2014 ed.
SPACE
Rajat Subhra Chakraborty, Vashek Matyas, Patrick Schaumont
2013 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Ruchira Naskar, Rajat Subhra Chakraborty
2013 conf
ReConFig
Durga Prasad Sahoo, Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2013 J jnl
IEEE Trans. Computers
Seetharam Narasimhan, Dongdong Du, Rajat Subhra Chakraborty, Somnath Paul, Francis G. Wolff, Christos A. Papachristou, Kaushik Roy, Swarup Bhunia
2013 J jnl
IEEE Des. Test
Rajat Subhra Chakraborty, Indrasish Saha, Ayan Palchaudhuri, Gowtham Kumar Naik
2013 J jnl
IET Image Process.
Ruchira Naskar, Rajat Subhra Chakraborty
2013 conf
HOST
Indrasish Saha, Ratan Rahul Jeldi, Rajat Subhra Chakraborty
2013 J jnl
Comput. Electr. Eng.
Sezer Gören, Ozgur Ozkurt, Abdullah Yildiz, H. Fatih Ugurdag, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay
2012 conf
VDAT
Sanjay Burman, Ayan Palchaudhuri, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay, Pranav Singh
2012 Misc conf
ICISS
Ruchira Naskar, Rajat Subhra Chakraborty
2012 J jnl
IEEE Des. Test Comput.
Seetharam Narasimhan, Rajat Subhra Chakraborty, Swarup Chakraborty
2012 conf
RACS
Ruchira Naskar, Rajat Subhra Chakraborty
2011 conf
InfoSecHiComNet
Rajat Subhra Chakraborty, Seetharam Narasimhan, Swarup Bhunia
2011 A conf
DATE
Subidh Ali, Rajat Subhra Chakraborty, Debdeep Mukhopadhyay, Swarup Bhunia
2011 Misc conf
ICISS
Ruchira Naskar, Rajat Subhra Chakraborty
2011 conf
InfoSecHiComNet
Sambaran Bandyopadhyay, Ruchira Naskar, Rajat Subhra Chakraborty
2011 J jnl
J. Electron. Test.
Rajat Subhra Chakraborty, Swarup Bhunia
2011 conf
HOST
Seetharam Narasimhan, Xinmu Wang, Dongdong Du, Rajat Subhra Chakraborty, Swarup Bhunia
2011 conf
Asian Test Symposium
Debdeep Mukhopadhyay, Rajat Subhra Chakraborty
2010 conf
HOST
Seetharam Narasimhan, Rajat Subhra Chakraborty, Dongdong Du, Somnath Paul, Francis G. Wolff, Christos A. Papachristou, Kaushik Roy, Swarup Bhunia
2010 Misc conf
VLSI Design
Rajat Subhra Chakraborty, Swarup Bhunia
2010 A conf
CHES
Dongdong Du, Seetharam Narasimhan, Rajat Subhra Chakraborty, Swarup Bhunia
2010 conf
AHS
Seetharam Narasimhan, Somnath Paul, Rajat Subhra Chakraborty, Francis G. Wolff, Christos A. Papachristou, Daniel J. Weyer, Swarup Bhunia
2009 J jnl
ACM J. Emerg. Technol. Comput. Syst.
Rajat Subhra Chakraborty, Swarup Bhunia
2009 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Rajat Subhra Chakraborty, Swarup Bhunia
2009 conf
HLDVT
Rajat Subhra Chakraborty, Seetharam Narasimhan, Swarup Bhunia
2009 J jnl
IET Comput. Digit. Tech.
Rajat Subhra Chakraborty, Somnath Paul, Yu Zhou, Swarup Bhunia
2009 A conf
CHES
Rajat Subhra Chakraborty, Francis G. Wolff, Somnath Paul, Christos A. Papachristou, Swarup Bhunia
2009 conf
HOST
Rajat Subhra Chakraborty, Swarup Bhunia
2009 A conf
ICCAD
Rajat Subhra Chakraborty, Swarup Bhunia
2008 Misc conf
VLSI Design
Rajat Subhra Chakraborty, Somnath Paul, Swarup Bhunia
2008 A conf
ICCAD
Rajat Subhra Chakraborty, Swarup Bhunia
2008 conf
ISQED
Rajat Subhra Chakraborty, Swarup Bhunia
2008 conf
HOST
Rajat Subhra Chakraborty, Somnath Paul, Swarup Bhunia
2008 A conf
DATE
Francis G. Wolff, Christos A. Papachristou, Swarup Bhunia, Rajat Subhra Chakraborty
2007 C conf
IOLTS
Somnath Paul, Rajat Subhra Chakraborty, Swarup Bhunia
2007 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Rajat Subhra Chakraborty, Seetharam Narasimhan, Swarup Bhunia
2007 Misc conf
VTS
Somnath Paul, Rajat Subhra Chakraborty, Swarup Bhunia
redb/extractors/pe_extractors/pe_features.py
← Index redb/extractors/pe_extractors/pe_features.py python
import base64
import inspect
import json
from pprint import pprint
import re

import pefile

from redb.ext.rich_header import get_rich_idVersion
from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor
from redb.models.dataclasses import PE
from datetime import datetime, timezone
from typing import Any


class PEFeaturesExtractor(PEExtractor):

    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.pe_features = None
        self.elastic_index = self.index_prefix + "-pe_features"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _extract_type(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if self.pe.is_dll():
            return "DLL"
        elif self.pe.is_driver():
            return "DRIVER"
        elif self.pe.is_exe():
            return "EXE"

    def _extract_architecture(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        mt = {"0x14c": "x86", "0x0200": "Itanium", "0x8664": "x64"}
        machine_value = self.pe.FILE_HEADER.Machine
        if isinstance(machine_value, int):
            return mt.get(str(hex(machine_value)), "")
        return str(machine_value) + " => Not x86/64 or Itanium"

    def _extract_rich_header(self):
        """Extract the Rich header from the PE file

        to decode it back from base64, use:
        rh_tmp = json.loads(rh_b64_string)
        rh_decoded = {}
        for k in rh_tmp:
            if isinstance(rh_tmp[k], str):
                rh_decoded[k] = base64.b64decode(rh_tmp[k])
            else:
                rh_decoded[k] = rh_tmp[k]
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        rh = self.pe.parse_rich_header()
        rich_header_b64 = {}
        rich_header_infos = []
        if rh:
            for key in rh:
                if isinstance(rh[key], bytes):
                    rich_header_b64[key] = base64.b64encode(rh[key]).decode("utf-8")
                else:
                    rich_header_b64[key] = rh[key]
            rich_header_infos = self._get_rich_header_infos(rh)
        return json.dumps(rich_header_b64) if rich_header_b64 else None, "\n".join(
            item for item in rich_header_infos
        ) if rich_header_infos else None

    def _get_rich_header_infos(self, rh):
        """Parse Rich header information from the PE Rich Header dump"""
        self.log.debug(inspect.currentframe().f_code.co_name)

        rich_header_infos = []
        try:
            # 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
            # example:                  'values': [8681481,
            #                             1,
            #                             9795593,
            #                             1]
            rich_fields = rh.get("values", [])
            if len(rich_fields) % 2 != 0:
                self.log.info(f"rich header extraction stopped for {self.hash.sha256}")
                return None

            comp_id = None
            for i in rich_fields:
                if rich_fields.index(i) % 2 == 0:
                    # even -> save value
                    comp_id = get_rich_idVersion(i)
                else:
                    # odd -> add to list
                    if comp_id:
                        rich_header_infos.append(f"{comp_id} count={i}")
                        comp_id = None
        except Exception as e:
            self.log.error(
                f"Extract rich header error {self.hash.sha256} Exception: {e}"
            )
        return rich_header_infos

    def _extract_version_info(self):
        """Extract the VS_VERSIONINFO field in a PE file

        Returns:
        vsinfo: a list of "key:value" strings from VS_INFORMATION content.
               None if no VS_INFORMATION content is present.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        version_info = []
        try:
            if hasattr(self.pe, "VS_VERSIONINFO") and hasattr(self.pe, "FileInfo"):
                for finfo in self.pe.FileInfo:
                    for entry in finfo:
                        if hasattr(entry, "StringTable"):
                            for st_entry in entry.StringTable:
                                for key, str_entry in list(st_entry.entries.items()):
                                    version_info.append(f"{key.decode()}:{str_entry.decode()}")
        except Exception as e:
            self.log.error(
                f"Extract VersionInfo error {self.hash.sha256}  Exception: {e}"
            )
        return version_info if version_info else None

    def _extract_exports(self):
        """
        Returns:
        export_library_name: a str representing the name of the export library.
                            An empty string if no export library is present.
        exp_symbols_list: a list of function names exported as per DIRECTORY_ENTRY_EXPORT.symbols
                            An empty list if no export library is present.
        export_timestamp: a timestamp representing the time of the export.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        export_symbols_list = []
        export_library_name = ""
        export_library_name_raw = ""
        export_timestamp = None
        try:
            if hasattr(self.pe, "DIRECTORY_ENTRY_EXPORT"):
                export_timestamp = self.pe.DIRECTORY_ENTRY_EXPORT.struct.TimeDateStamp
                export_directory = self.pe.DIRECTORY_ENTRY_EXPORT
                export_library_name_rva = export_directory.struct.Name
                try:
                    export_library_name = self.remove_non_utf8(
                        self.pe.get_string_at_rva(export_library_name_rva)
                    ).decode()
                    export_library_name_raw = self.pe.get_string_at_rva(
                        export_library_name_rva
                    ).__str__()
                except Exception as e:
                    self.log.error(
                        f"Error while getting export library name {self.pe.get_string_at_rva(export_library_name_rva)} for file: {self.hash.sha256} {e}"
                    )
                    export_library_name = "REDB_ERROR"
                if hasattr(self.pe.DIRECTORY_ENTRY_EXPORT, "symbols"):
                    for exp in self.pe.DIRECTORY_ENTRY_EXPORT.symbols:
                        export_symbols_list.append(
                            exp.name.decode() if exp.name else None
                        )
        except Exception as e:
            self.log.error(f"Extract exports error {self.hash.sha256} Exception: {e}")

        return (
            export_library_name if export_library_name else None,
            export_library_name_raw if export_library_name_raw else None,
            export_symbols_list if export_symbols_list else None,
            export_timestamp if export_timestamp else None,
        )

    def _extract_dbg_info(self):
        """Extract debug information from PE if present

        At the moment this function parses only the DEBUG_ENTRY Structure where Type
        field == 1, i.e. IMAGE_DEBUG_TYPE_CODEVIEW, where the pdb is eventually present.

        Returns:
        debug_entry: the dump of pe.DIRECTORY_ENTRY_DEBUG.struct only for the type 1
                    "IMAGE_DEBUG_TYPE_CODEVIEW". "None" if not present.
        debug_time: a int representing the epoch timestamp as present in the
                    DIRECTORY_ENTRY_DEBUG. "None" if not present.
        pdb_info: a str with the pdb path. "None" if not present.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        dbg_timestamp = None
        dbg_timestamp_utc = ""
        dbg_pdb_info = ""
        dbg_pdb_info_raw = ""
        dbg_struct = ""
        try:
            if hasattr(self.pe, "DIRECTORY_ENTRY_DEBUG"):
                for debug_entry in self.pe.DIRECTORY_ENTRY_DEBUG:
                    if (
                        debug_entry.struct.Type
                        == pefile.DEBUG_TYPE["IMAGE_DEBUG_TYPE_CODEVIEW"]
                    ):
                        dbg_timestamp = debug_entry.struct.TimeDateStamp
                        dbg_timestamp_utc = datetime.fromtimestamp(
                            dbg_timestamp, timezone.utc
                        ).strftime("%Y-%m-%d %H:%M:%S")
                        # dbg_struct = base64.b64encode(debug_entry.entry).decode()
                        dbg_struct = debug_entry.entry.__str__()
                        if hasattr(debug_entry.entry, "PdbFileName"):
                            dbg_pdb_info = self.remove_non_utf8(
                                debug_entry.entry.PdbFileName.rstrip(b"\x00")
                            ).decode()
                            dbg_pdb_info_raw = debug_entry.entry.PdbFileName.rstrip(
                                b"\x00"
                            ).__str__()
                            # if dbg_pdb_info:
                            #     dbg_pdb_info = dbg_pdb_info.rstrip(b"\x00")
                            #     dbg_pdb_info = dbg_pdb_info.decode()

        except Exception as e:
            self.log.error(f"Extract DBG info error {self.hash.sha256} Exception: {e}")
        return (
            dbg_timestamp if dbg_timestamp else None,
            dbg_timestamp_utc if dbg_timestamp_utc else None,
            dbg_pdb_info if dbg_pdb_info else None,
            dbg_pdb_info_raw if dbg_pdb_info_raw else None,
            dbg_struct if dbg_struct else None,
        )

    def _extract_tls_info(self):
        """Check for the presence of Thread Local Storage and related extract
        callback addresses.

        Taken from the original version of PEScanner, as the python3 porting
        "ext_pescanner" does not have it.

        Returns:
        pe.DIRECTORY_ENTRY_TLS.struct: a pefile.Structure type containing the dump
                    of the TLS structure and content. "None" is no TLS is present.
        callbacks: a list containing the TLS callbacks addresse. Empty list if no
                    address is found, "None" is no TLS is present.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        callbacks = []
        tls_dir_struct = ""
        try:
            if (
                hasattr(self.pe, "DIRECTORY_ENTRY_TLS")
                and self.pe.DIRECTORY_ENTRY_TLS
                and self.pe.DIRECTORY_ENTRY_TLS.struct
                and self.pe.DIRECTORY_ENTRY_TLS.struct.AddressOfCallBacks
            ):
                # tls_dir_struct = base64.b64encode(self.pe.DIRECTORY_ENTRY_TLS.struct).decode()
                tls_dir_struct = self.pe.DIRECTORY_ENTRY_TLS.struct.__str__()
                callback_array_rva = (
                    self.pe.DIRECTORY_ENTRY_TLS.struct.AddressOfCallBacks
                    - self.pe.OPTIONAL_HEADER.ImageBase
                )
                # Originally it was while True
                # todo while can't be used cause risky
                # what maximum range makes sense to add here?
                for idx in range(10000):
                    func = self.pe.get_dword_from_data(
                        self.pe.get_data(callback_array_rva + 4 * idx, 4), 0
                    )
                    if func == 0:
                        break
                    callbacks.append(func)
        except Exception as e:
            self.log.error(f"Extract TLS error {self.hash.sha256} Exception: {e}")
        return callbacks if callbacks else None, tls_dir_struct if tls_dir_struct else None

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

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            (
                export_library_name,
                export_library_name_raw,
                export_symbols_list,
                export_timestamp,
            ) = self._extract_exports()
            (
                dbg_timestamp,
                dbg_timestamp_utc,
                dbg_pdb_info,
                dbg_pdb_info_raw,
                dbg_struct,
            ) = self._extract_dbg_info()
            tls_callbacks, tls_struct = self._extract_tls_info()
            rich_header_dump, rich_header_parsed = self._extract_rich_header()

            is_dotnet = self._check_dotnet()

            number_of_resources = 0
            number_of_imports = 0
            if hasattr(self.pe, "DIRECTORY_ENTRY_RESOURCE"):
                number_of_resources = len(self.pe.DIRECTORY_ENTRY_RESOURCE.entries)
            if hasattr(self.pe, "DIRECTORY_ENTRY_IMPORT"):
                number_of_imports = len(self.pe.DIRECTORY_ENTRY_IMPORT)

            self.pe_features = PE(
                type=self._extract_type(),
                magic=hex(self.pe.OPTIONAL_HEADER.Magic),
                entry_point=hex(self.pe.OPTIONAL_HEADER.AddressOfEntryPoint),
                major_linker_version=self.pe.OPTIONAL_HEADER.MajorLinkerVersion,
                minor_linker_version=self.pe.OPTIONAL_HEADER.MinorLinkerVersion,
                target_machine=self.pe.FILE_HEADER.Machine,
                architecture=self._extract_architecture(),
                compilation_time=self.pe.FILE_HEADER.TimeDateStamp,
                compilation_time_utc=datetime.fromtimestamp(
                    self.pe.FILE_HEADER.TimeDateStamp, timezone.utc
                ).strftime("%Y-%m-%d %H:%M:%S"),
                rich_header_dump=rich_header_dump,
                rich_header_parsed=rich_header_parsed,
                dos_header=self.pe.DOS_HEADER.__str__(),
                nt_header=self.pe.NT_HEADERS.__str__(),
                optional_header=self.pe.OPTIONAL_HEADER.__str__(),
                file_header=self.pe.FILE_HEADER.__str__(),
                version_info=self._extract_version_info(),
                export_library_name=export_library_name,
                export_library_name_raw=export_library_name_raw,
                export_symbols_list=export_symbols_list,
                export_timestamp=export_timestamp,
                is_dotnet=is_dotnet,
                dbg_timestamp=dbg_timestamp,
                dbg_timestamp_utc=dbg_timestamp_utc,
                dbg_pdb_info=dbg_pdb_info,
                dbg_pdb_info_raw=dbg_pdb_info_raw,
                dbg_struct=dbg_struct,
                tls_callbacks=tls_callbacks,
                tls_struct=tls_struct,
                is_signed=self._is_signed(),
                has_overlay=self._has_overlay(),
                number_of_sections=len(self.pe.sections),
                number_of_imports=number_of_imports,
                number_of_exports=(
                    len(export_symbols_list) if export_symbols_list else 0
                ),
                number_of_resources=number_of_resources,
            )
            return self.pe_features
        except Exception as e:
            self.log.error(f"Error extracting PE features {self.hash.sha256}: {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.pe_features
        elif exporter_type == "ClickHouseExporter":
            try:
                pe_dump = self.pe.dump_dict()   
                # Convert PE headers directly to JSON
                dos_header_raw = json.dumps(pe_dump['DOS_HEADER'])
                nt_header_raw = json.dumps(pe_dump['NT_HEADERS'])
                optional_header_raw = json.dumps(pe_dump['OPTIONAL_HEADER'])
                file_header_raw = json.dumps(pe_dump['FILE_HEADER'])

                # Convert magic and entry_point from hex strings to integers
                magic_raw = int(self.pe_features.magic, 16) if isinstance(self.pe_features.magic, str) else self.pe_features.magic
                entry_point = int(self.pe_features.entry_point, 16) if isinstance(self.pe_features.entry_point, str) else self.pe_features.entry_point

                # Convert target_machine to string if it's an integer
                target_machine = str(self.pe_features.target_machine) if isinstance(self.pe_features.target_machine, int) else self.pe_features.target_machine

                # debug struct
                dbg_struct_raw = {}
                if self.pe_features.dbg_struct:
                    if hasattr(self.pe, "DIRECTORY_ENTRY_DEBUG"):
                        for debug_entry in self.pe.DIRECTORY_ENTRY_DEBUG:
                            if (
                                debug_entry.struct.Type
                                == pefile.DEBUG_TYPE["IMAGE_DEBUG_TYPE_CODEVIEW"]
                            ):
                                dbg_struct_raw = json.dumps(debug_entry.struct.__dict__)

                # tls struct
                tls_struct_raw = {}
                if self.pe_features.tls_struct:
                    if (
                        hasattr(self.pe, "DIRECTORY_ENTRY_TLS")
                        and self.pe.DIRECTORY_ENTRY_TLS
                        and self.pe.DIRECTORY_ENTRY_TLS.struct
                        and self.pe.DIRECTORY_ENTRY_TLS.struct.AddressOfCallBacks
                    ):
                        tls_struct_raw = json.dumps(self.pe.DIRECTORY_ENTRY_TLS.struct.__dict__)

                # Ensure arrays are properly initialized
                rich_header_parsed = []
                if self.pe_features.rich_header_parsed:
                    if isinstance(self.pe_features.rich_header_parsed, str):
                        rich_header_parsed = [x for x in self.pe_features.rich_header_parsed.split("\n") if x]
                    elif isinstance(self.pe_features.rich_header_parsed, list):
                        rich_header_parsed = self.pe_features.rich_header_parsed

                version_info = self.pe_features.version_info if self.pe_features.version_info else []
                version_info_raw = {}
                if version_info:
                    for finfo in self.pe.FileInfo:
                        for entry in finfo:
                            if hasattr(entry, "StringTable"):
                                for st_entry in entry.StringTable:
                                    for key, str_entry in list(st_entry.entries.items()):
                                        version_info_raw[key.decode()] = str_entry.decode()
                version_info_raw = json.dumps(version_info_raw) if version_info_raw else "{}"

                export_symbols_list = self.pe_features.export_symbols_list if self.pe_features.export_symbols_list else []
                tls_callbacks = self.pe_features.tls_callbacks if self.pe_features.tls_callbacks else []

                # Prepare data array
                data = [[
                    self.sha256,
                    self.md5,
                    self.sha1,
                    self.pe_features.dos_header,
                    dos_header_raw,
                    self.pe_features.nt_header,
                    nt_header_raw,
                    self.pe_features.optional_header,
                    optional_header_raw,
                    self.pe_features.file_header,
                    file_header_raw,
                    magic_raw,
                    entry_point,
                    self.pe_features.major_linker_version,
                    self.pe_features.minor_linker_version,
                    target_machine,
                    self.pe_features.architecture,
                    self.pe_features.compilation_time,
                    1 if self.pe_features.is_dotnet else 0,
                    1 if self.pe_features.is_signed else 0,
                    1 if self.pe_features.has_overlay else 0,
                    self.pe_features.number_of_sections,
                    self.pe_features.number_of_imports,
                    self.pe_features.number_of_exports,
                    self.pe_features.number_of_resources,
                    self.pe_features.type,
                    self.pe_features.dbg_struct,
                    dbg_struct_raw,
                    self.pe_features.dbg_timestamp,
                    self.pe_features.dbg_pdb_info,
                    self.pe_features.dbg_pdb_info_raw,
                    self.pe_features.tls_struct,
                    tls_struct_raw,
                    self.pe_features.export_timestamp,
                    self.pe_features.export_library_name,
                    self.pe_features.export_library_name_raw,
                    self.pe_features.rich_header_dump if self.pe_features.rich_header_dump else "{}",
                    rich_header_parsed,
                    version_info,
                    version_info_raw,
                    export_symbols_list,
                    tls_callbacks,
                    datetime.now(timezone.utc)
                ]]

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'dos_header', 'dos_header_raw', 'nt_header', 'nt_header_raw', 'optional_header', 'optional_header_raw', 'file_header', 'file_header_raw',
                    'magic_raw', 'entry_point',
                    'major_linker_version', 'minor_linker_version',
                    'target_machine', 'architecture',
                    'compilation_time',
                    'is_dotnet', 'is_signed', 'has_overlay',
                    'number_of_sections', 'number_of_imports', 'number_of_exports', 'number_of_resources',
                    'type',
                    'dbg_struct', 'dbg_struct_raw', 'dbg_timestamp', 'dbg_pdb_info', 'dbg_pdb_info_raw',
                    'tls_struct', 'tls_struct_raw', 'export_timestamp', 'export_library_name', 'export_library_name_raw',
                    'rich_header_dump', 'rich_header_parsed', 'version_info', 'version_info_raw',
                    'export_symbols_list', 'tls_callbacks',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'String', 'JSON', 'String', 'JSON', 'String', 'JSON', 'String', 'JSON',
                    'UInt16', 'UInt32',
                    'UInt8', 'UInt8',
                    'LowCardinality(String)', 'Enum8(\'x86\' = 1, \'Itanium\' = 2, \'x64\' = 3)',
                    'UInt64',
                    'UInt8', 'UInt8', 'UInt8',
                    'UInt16', 'UInt16', 'UInt16', 'UInt16',
                    'Enum8(\'DLL\' = 1, \'EXE\' = 2, \'DRIVER\' = 3)',
                    'Nullable(String)', 'JSON', 'Nullable(UInt64)', 'Nullable(String)', 'Nullable(String)',
                    'Nullable(String)', 'JSON', 'Nullable(UInt64)', 'Nullable(String)', 'Nullable(String)',
                    'JSON', 'Array(Nullable(String))', 'Array(Nullable(String))', 'JSON',
                    'Array(Nullable(String))', 'Array(Nullable(UInt64))',
                    'DateTime64(3, \'UTC\')'
                ]

                if not data:
                    return None

                return (data, column_names, column_type_names)
            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

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