K. P. Soman

215 papers C 3Misc 1Journal 60Unranked 140
YearRankTypeTitle / Venue / Authors
2024 J jnl
IEEE Trans. Comput. Soc. Syst.
Mredulraj S. Pandianchery, V. Sowmya, E. A. Gopalakrishnan, Vinayakumar Ravi, K. P. Soman
2024 J jnl
IEEE Access
Sreelakshmi K, B. Premjith, Bharathi Raja Chakravarthi, K. P. Soman
2024 conf
ICCCNT
Janakiram Chandu, Svs Dhanush, D. Rohith, Tsaliki Satya Ganesh Kumar, K. P. Soman, S. Sachin Kumar
2024 J jnl
J. Aerosp. Inf. Syst.
Anil Ramachandran, Rambabu S, Swathi Prathaa P, U. Vamsi Krishna, Robin Ramdin, Vijay Krishna Menon, Chandrasekhar Jayaramakrishnan, K. P. Soman
2023 conf
IC3I
Vivek Rajendran, Harishchander Anandaram, S. Sachin Kumar, K. P. Soman, S. Dhivya
2023 J jnl
IEEE Access
Neethu Mohan, S. Sachin Kumar, K. P. Soman, V. G. Sujadevi, Prabaharan Poornachandran, U. Rajendra Acharya
2023 J jnl
IEEE Trans. Engineering Management
Vinayakumar Ravi, Mamoun Alazab, Sriram Srinivasan, Ajay Arunachalam, K. P. Soman
2023 conf
ICACDS
M. Vinayak, Harishchander Anandaram, S. Sachin Kumar, K. P. Soman
2023 ch.
Smart Computer Vision
Krishnendu C. S., V. Sowmya, K. P. Soman
2023 ch.
Smart Computer Vision
Shamika Ganesan, Raju Anand, V. Sowmya, K. P. Soman
2023 conf
ICACDS
B. E. Pranav Kumaar, Aadharsh Aadhithya A, S. Sachin Kumar, Harishchander Anandaram, K. P. Soman
2023 J jnl
Multim. Tools Appl.
J. Arun Prakash, CR Asswin, Vinayakumar Ravi, V. Sowmya, K. P. Soman
2023 J jnl
Neural Comput. Appl.
J. Arun Prakash, Vinayakumar Ravi, V. Sowmya, K. P. Soman
2023 conf
ICMLDE
Visweswaran M, Jayanth Mohan, S. Sachin Kumar, K. P. Soman
2023 J jnl
Soft Comput.
Ganeshkumar M., Vinayakumar Ravi, V. Sowmya, E. A. Gopalakrishnan, K. P. Soman, M. Rupeshkumar
2022 J jnl
IEEE Access
Sanjanasri J. P., Vijay Krishna Menon, K. P. Soman, Atul Kr. Ojha
2022 J jnl
Expert Syst. Appl.
Hari Theivaprakasham, S. Darshana, Vinayakumar Ravi, V. Sowmya, E. A. Gopalakrishnan, K. P. Soman
2021 conf
ICMC
U. Vamsi Krishna, B. Premjith, K. P. Soman
2021 C conf
PACLIC
Rohith Ramakrishnan, Anirudh Vadakedath, U. Vamsi Krishna, B. Premjith, K. P. Soman
2021 conf
ICACDS (1)
Shamika Ganesan, S. Sachin Kumar, K. P. Soman
2021 conf
ICICT (1)
Namrata Nair, Sankaran Narayanan, Pradeep Achan, K. P. Soman
2021 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
B. Premjith, K. P. Soman
2021 conf
MIKE
Shamika Ganesan, S. Sachin Kumar, K. P. Soman
2021 conf
ICACDS (2)
R. Sai Kesav, B. Premjith, K. P. Soman
2021 J jnl
CoRR
Bharathi Raja Chakravarthi, Jishnu Parameswaran P. K, Premjith B, K. P. Soman, Rahul Ponnusamy, Prasanna Kumar Kumaresan, Kingston Pal Thamburaj, John P. McCrae
2021 J jnl
J. Intell. Fuzzy Syst.
Priyanga V. T, Sanjanasri J. P., Vijay Krishna Menon, E. A. Gopalakrishnan, K. P. Soman
2021 conf
FICTA (1)
N. S. Kamal, Barathi Ganesh H. B., V. V. Sajith Variyar, V. Sowmya, K. P. Soman
2021 conf
FICTA (1)
R. Priyamvada, D. Govind, Vijay Krishna Menon, B. Premjith, K. P. Soman
2021 conf
BUCC@RANLP
Sanjanasri J. P., Vijay Krishna Menon, K. P. Soman, Krzysztof Wolk
2021 conf
ICACDS (1)
R. Sai Kesav, M. Bhanu Prakash, Krishanth Kumar, V. Sowmya, K. P. Soman
2021 conf
IberLEF@SEPLN
Sreelakshmi K, Premjith B, K. P. Soman
2020 conf
ICCCNT
Ramji Balasubramanian, V. Sowmya, E. A. Gopalakrishnan, Vijay Krishna Menon, V. V. Sajith Variyar, K. P. Soman
2020 conf
BUCC@LREC
Sanjanasri J. P., Vijay Krishna Menon, K. P. Soman
2020 J jnl
CoRR
Simran K, Prathiksha Balakrishna, Vinayakumar R., K. P. Soman
2020 J jnl
CoRR
Simran K, Sriram S, Vinayakumar R., K. P. Soman
2020 conf
ICCCNT
M. T. Vyshnav, V. Sowmya, E. A. Gopalakrishnan, V. V. Sajith Variyar, Vijay Krishna Menon, K. P. Soman
2020 J jnl
Int. J. Comput. Aided Eng. Technol.
Sanjanasri J. P., M. Anand Kumar, K. P. Soman
2020 ch.
Handbook of Computer Networks and Cyber Security
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2020 ch.
Nature-Inspired Computation in Data Mining and Machine Learning
G. Remmiya Devi, M. Anand Kumar, K. P. Soman
2020 conf
ICCCNT
Neethu Mohan, S. Sachin Kumar, K. P. Soman
2020 conf
FICTA (1)
Krishnendu C. S., V. Sowmya, K. P. Soman
2020 conf
ICCCNT
Malneedi Vamsi, K. P. Soman
2020 conf
ICCCNT
Isha Indhu S, Kavya S. Kumar, U. Vamsi Krishna, Neethu Mohan, V. Sowmya, K. P. Soman
2020 J jnl
Signal Image Video Process.
O. K. Sikha, K. P. Soman
2020 conf
INFOCOM Workshops
Sriram S, Vinayakumar R., V. Sowmya, Mamoun Alazab, K. P. Soman
2020 conf
INFOCOM Workshops
Sriram S, Vinayakumar R., Mamoun Alazab, K. P. Soman
2020 conf
FIRE (Working Notes)
Bharathi Raja Chakravarthi, Anand Kumar M, John P. McCrae, B. Premjith, K. P. Soman, Thomas Mandl
2020 conf
FICTA (1)
Sanjana K., V. Sowmya, E. A. Gopalakrishnan, K. P. Soman
2020 J jnl
J. Intell. Fuzzy Syst.
Vyshnav M. T, S. Sachin Kumar, Neethu Mohan, K. P. Soman
2020 J jnl
Artif. Intell. Rev.
Sowmya Vishvanathan, D. Govind, K. P. Soman
2020 J jnl
Multim. Tools Appl.
O. K. Sikha, K. P. Soman, S. Sachin Kumar
2020 conf
BUCC@LREC
Sanjanasri J. P., B. Premjith, Vijay Krishna Menon, K. P. Soman
2019 J jnl
Int. J. Digit. Crime Forensics
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2019 ch.
Recent Advances in Computational Intelligence
Sujith Viswanathan, M. Anand Kumar, K. P. Soman
2019 conf
ICCCNT
Naveenkumar K. S, R. Vinayakumar, K. P. Soman
2019 J jnl
J. Intell. Syst.
M. Anand Kumar, B. Premjith, Shivkaran Singh, S. Rajendran, K. P. Soman
2019 conf
SSCC
K. Simran, Prathiksha Balakrishna, R. Vinayakumar, K. P. Soman
2019 J jnl
IEEE Access
R. Vinayakumar, Mamoun Alazab, K. P. Soman, Prabaharan Poornachandran, Ameer Al-Nemrat, Sitalakshmi Venkatraman
2019 J jnl
J. Intell. Syst.
S. Sachin Kumar, M. Anand Kumar, K. P. Soman
2019 J jnl
J. Intell. Fuzzy Syst.
Vysakh S. Mohan, R. Vinayakumar, V. Sowmya, K. P. Soman
2019 C conf
TENCON
Rahul-Vigneswaran K, S. Sachin Kumar, Neethu Mohan, K. P. Soman
2019 J jnl
J. Intell. Fuzzy Syst.
Naveen Varghese Jacob, V. Sowmya, K. P. Soman
2019 ch.
Recent Advances in Computational Intelligence
B. Premjith, K. P. Soman, M. Anand Kumar, D. Jyothi Ratnam
2019 ch.
Recent Advances in Computer Vision
V. Sowmya, K. P. Soman, M. Hassaballah
2019 conf
NCC
D. Govind, S. Lakshmi Priya, S. Akarsh, B. Ganga Gowri, K. P. Soman
2019 ch.
Recent Advances in Computational Intelligence
K. P. Soman, S. Sachin Kumar, Neethu Mohan, Prabaharan Poornachandran
2019 J jnl
J. Intell. Syst.
B. Premjith, M. Anand Kumar, K. P. Soman
2019 conf
ICCCNT
Athira Gopalakrishnan, K. P. Soman, B. Premjith
2019 J jnl
IEEE Access
R. Vinayakumar, Mamoun Alazab, K. P. Soman, Prabaharan Poornachandran, Sitalakshmi Venkatraman
2019 J jnl
J. Cyber Secur. Mobil.
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran, Vysakh S. Mohan, Amara Dinesh Kumar
2019 ch.
Recent Advances in Computer Vision
Nikhil Damodaran, V. Sowmya, D. Govind, K. P. Soman
2019 conf
SSCC
S. Sriram, K. Simran, R. Vinayakumar, S. Akarsh, K. P. Soman
2019 ch.
Recent Advances in Computational Intelligence
D. Jyothi Ratnam, K. P. Soman, T. K. Biji Mol, M. G. Priya
2019 ch.
Recent Advances in Computational Intelligence
S. N. Mohan Raj, S. Sachin Kumar, S. Rajendran, K. P. Soman
2018 conf
ICACCI
Greeshma Prabha, P. V. Jyothsna, K. K. Shahina, B. Premjith, K. P. Soman
2018 conf
ICCCNT
R. Vinayakumar, K. P. Soman, Pradeep Menon
2018 J jnl
J. Intell. Fuzzy Syst.
Shivkaran Singh, M. Anand Kumar, K. P. Soman
2018 J jnl
Signal Image Video Process.
M. Swarna, V. Sowmya, K. P. Soman
2018 conf
ICCCNT
R. Vinayakumar, K. P. Soman, Pradeep Menon
2018 conf
ICCCNT
R. Vinayakumar, K. P. Soman, Pradeep Menon
2018 conf
ICCCNT
R. Vinayakumar, K. P. Soman, Pradeep Menon
2018 J jnl
Computación y Sistemas
P. V. Veena, M. Anand Kumar, K. P. Soman
2018 J jnl
J. Intell. Fuzzy Syst.
Remmiya Devi G, M. Anand Kumar, K. P. Soman
2018 conf
ICCCNT
Anu Vazhayil, R. Vinayakumar, K. P. Soman
2018 conf
ICCCNT
R. Vinayakumar, K. P. Soman, Pradeep Menon
2018 J jnl
J. Intell. Fuzzy Syst.
S. Sooraj, K. Manjusha, M. Anand Kumar, K. P. Soman
2018 J jnl
CoRR
Amara Dinesh Kumar, R. Vinayakumar, K. P. Soman
2018 J jnl
J. Intell. Fuzzy Syst.
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran, S. Sachin Kumar
2018 J jnl
J. Intell. Fuzzy Syst.
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2018 conf
ICCCNT
R. Vinayakumar, K. P. Soman, Pradeep Menon
2018 J jnl
J. Intell. Fuzzy Syst.
B. Ganga Gowri, K. P. Soman
2018 conf
ICCCNT
Rahul-Vigneswaran K, R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2018 J jnl
J. Intell. Fuzzy Syst.
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2018 J jnl
J. Intell. Fuzzy Syst.
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran, S. Sachin Kumar
2018 conf
ICCCNT
R. Vinayakumar, K. P. Soman, Pradeep Menon
2018 J jnl
Int. J. Document Anal. Recognit.
K. Manjusha, M. Anand Kumar, K. P. Soman
2018 conf
ICCCNT
R. Vinayakumar, K. P. Soman, Pradeep Menon
2018 J jnl
Multim. Tools Appl.
V. Ankarao, V. Sowmya, K. P. Soman
2018 conf
ICACCI
Aravind Ravikumar, Neethu Mohan, K. P. Soman
2018 J jnl
CoRR
Chippy Jayaprakash, Bharath Bhushan Damodaran, V. Sowmya, K. P. Soman
2018 J jnl
J. Comput. Sci.
O. K. Sikha, S. Sachin Kumar, K. P. Soman
2018 conf
ICACCI
Shalini K, Barathi Ganesh H. B., M. Anand Kumar, K. P. Soman
2017 conf
SIRS
V. G. Sujadevi, K. P. Soman, S. Sachin Kumar, Neethu Mohan
2017 conf
ICACCI
P. V. Veena, M. Anand Kumar, K. P. Soman
2017 J jnl
J. Intell. Fuzzy Syst.
V. Vishnu Pradeep, V. Sowmya, K. P. Soman
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 conf
ICACCI
R. Praveena, M. Anand Kumar, K. P. Soman
2017 conf
ICACCI
Rohit Mohan, E. A. Gopalakrishnan, K. P. Soman
2017 J jnl
CoRR
R. Vinayakumar, Barathi Ganesh H. B., M. Anand Kumar, K. P. Soman
2017 conf
SSCC
R. K. Rahul, Anjali T, Vijay Krishna Menon, K. P. Soman
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 conf
ICACCI
V. G. Sujadevi, K. P. Soman, S. Sachin Kumar, Neethu Mohan, A. S. Arunjith
2017 conf
SIRS
Sachin Rajan, V. Sowmya, D. Govind, K. P. Soman
2017 J jnl
CoRR
Vijay Krishna Menon, S. Rajendran, M. Anand Kumar, K. P. Soman
2017 conf
ICACCI
G. Amrithanandha Babu, K. Guruvayoorappan, V. V. Sajith Variyar, K. P. Soman
2017 conf
ICACCI
Srinidhi Skanda V, M. Anand Kumar, K. P. Soman
2017 conf
ICACCI
Shimil Jose, V. V. Sajith Variyar, K. P. Soman
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, K. K. Senthil Velan, Shaunak Ganorkar
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 J jnl
Int. J. Inf. Syst. Model. Des.
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 J jnl
CoRR
V. Sowmya, D. Govind, K. P. Soman
2017 conf
ICACCI
S. Dev Vishnu, Sachin Rajan, V. Sowmya, K. P. Soman
2017 conf
ICSIPA
V. Sowmya, Aleena Ajay, D. Govind, K. P. Soman
2017 conf
ICACCI
Kavirajan B, M. Anand Kumar, K. P. Soman, S. Rajendran, S. Vaithehi
2017 conf
BHI
Rahul Krishnan Pathinarupothi, Vinaykumar R., Ekanath Rangan, E. Gopalakrishnan, K. P. Soman
2017 conf
ICACCI
Shimil Jose, Neethu Mohan, V. Sowmya, K. P. Soman
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 conf
SMM4H@AMIA
Barathi Ganesh H. B., R. Vinayakumar, M. Anand Kumar, K. P. Soman
2017 conf
ICACCI
C. Sankaralingam, S. Rajendran, B. Kavirajan, M. Anand Kumar, K. P. Soman
2017 conf
NCC
K. Manjusha, M. Anand Kumar, K. P. Soman
2017 conf
ICACCI
R. Vinayakumar, K. P. Soman, Prabaharan Poornachandran
2017 conf
MIKE
S. Sachin Kumar, M. Anand Kumar, K. P. Soman
2017 conf
ICSIPA
V. Sowmya, D. Govind, K. P. Soman
2017 J jnl
Signal Image Video Process.
V. Sowmya, D. Govind, K. P. Soman
2017 conf
ICACCI
Vishnu S. Dev, V. V. Sajith Variyar, K. P. Soman
2017 conf
ICACCI
Sreelekshmy Selvin, R. Vinayakumar, E. A. Gopalakrishnan, Vijay Krishna Menon, K. P. Soman
2017 conf
ICACCI
Deepthi Praveenlal Kuttichira, E. A. Gopalakrishnan, Vijay Krishna Menon, K. P. Soman
2017 J jnl
CoRR
Barathi Ganesh H. B., M. Anand Kumar, K. P. Soman
2017 conf
WASSA@EMNLP
R. Vinayakumar, B. Premjith, S. Sachin Kumar, K. P. Soman, Prabaharan Poornachandran
2016 J jnl
CoRR
Vijay Krishna Menon, S. Rajendran, M. Anand Kumar, K. P. Soman
2016 conf
SemEval@NAACL-HLT
Sanjay S. P., Anand Kumar M, K. P. Soman
2016 conf
SemEval@NAACL-HLT
Barathi Ganesh H. B., M. Anand Kumar, K. P. Soman
2016 conf
DMBD
Vijay Krishna Menon, Nithin Chekravarthi Vasireddy, Sai Aswin Jami, Viswa Teja Naveen Pedamallu, Varsha Suresh Kumar, K. P. Soman
2016 conf
FICTA (2)
K. Harikumar, K. P. Soman
2016 conf
FICTA (2)
Prabaharan Poornachandran, S. Praveen, Aravind Ashok, Manu R. Krishnan, K. P. Soman
2016 conf
SoCPaR
M. Swarna, V. Sowmya, K. P. Soman
2016 conf
FIRE Workshop
Remmiya Devi G, P. V. Veena, M. Anand Kumar, K. P. Soman
2016 conf
FIRE Workshop
Barathi Ganesh H. B., M. Anand Kumar, K. P. Soman
2016 conf
SoCPaR
Athira Chandran, Anjali T, Neethu Mohan, K. P. Soman
2016 conf
SSCC
B. Ashwini, Vijay Krishna Menon, K. P. Soman
2016 conf
FICTA (1)
Yedu C. Nair, S. Sachin Kumar, K. P. Soman
2016 J jnl
CoRR
O. K. Sikha, S. Sachin Kumar, K. P. Soman
2016 conf
FIRE Workshop
M. Anand Kumar, Shivkaran Singh, B. Kavirajan, K. P. Soman
2016 conf
CLEF (Working Notes)
Barathi Ganesh H. B., M. Anand Kumar, K. P. Soman
2015 conf
SIRS
B. Ganga Gowri, S. Sachin Kumar, Neethu Mohan, K. P. Soman
2015 conf
ICACCI
Vijay Krishna Menon, S. Rajendran, K. P. Soman
2015 conf
#MSM
Barathi Ganesh H. B., Abinaya N., M. Anand Kumar, Vinaykumar R., K. P. Soman
2015 conf
FIRE Workshops
Sanjay S. P., Nivedhitha Ezhilarasan, M. Anand Kumar, K. P. Soman
2015 conf
MIKE
Shriya Se, R. Vinayakumar, M. Anand Kumar, K. P. Soman
2015 conf
FIRE Workshops
M. Anand Kumar, Shriya Se, K. P. Soman
2015 conf
FIRE Workshops
Sanjay S. P., M. Anand Kumar, K. P. Soman
2015 conf
MIKE
S. Sachin Kumar, B. Premjith, M. Anand Kumar, K. P. Soman
2015 conf
FIRE Workshops
Rahul Venkatesh Kumar, M. Anand Kumar, K. P. Soman
2015 conf
WCI
S. Sachin Kumar, Neethu Mohan, Prabaharan Poornachandran, K. P. Soman
2014 conf
FIRE
Anand Kumar M, K. P. Soman
2014 conf
FIRE
N. Abinaya, Neethu John, Barathi H. B. Ganesh, M. Anand Kumar, K. P. Soman
2014 conf
FICTA (2)
R. Anil, K. Manjusha, S. Sachin Kumar, K. P. Soman
2014 J jnl
CoRR
M. Anand Kumar, V. Dhanalakshmi, K. P. Soman, V. Sharmiladevi
2014 J jnl
Telecommun. Syst.
R. Gandhiraj, K. P. Soman
2013 conf
SSCC
G. Jyothish Lal, V. K. Veena, K. P. Soman
2013 J jnl
CoRR
B. Premjith, S. Sachin Kumar, Akhil Manikkoth, T. V. Bijeesh, K. P. Soman
2013 C conf
ISI
S. Sachin Kumar, K. Manjusha, K. P. Soman
2012 J jnl
Biomed. Signal Process. Control.
M. Sabarimalai Manikandan, K. P. Soman
2012 J jnl
CoRR
B. Rajathilagam, Murali Rangarajan, K. P. Soman
2012 J jnl
CoRR
S. Padmavathi, N. Archana, K. P. Soman
2012 J jnl
CoRR
S. Padmavathi, B. Priyalakshmi, K. P. Soman
2012 conf
ACITY (2)
S. Padmavathi, K. P. Soman, R. Aarthi
2011 conf
ACWR
Britty Baby, M. Sabarimalai Manikandan, K. P. Soman
2011 conf
SPIT/IPC
R. Dhivya, V. Dhanalakshmi, M. Anand Kumar, K. P. Soman
2011 conf
ACWR
M. Sabarimalai Manikandan, K. P. Soman, Samarendra Dandapat
2011 conf
SPIT/IPC
S. Keerthana, V. Dhanalakshmi, M. Anand Kumar, V. P. Ajith, K. P. Soman
2010 conf
ICDEM
R. U. Rekha, M. Anand Kumar, V. Dhanalakshmi, K. P. Soman, S. Rajendran
2010 conf
A2CWiC
T. Arathi, Latha Parameswaran, K. P. Soman
2010 conf
T4E
Kathirvel Palanisamy, Attassry Manoj Kumar, Murugesan Chinnappa, M. Sabarimalai Manikandan, K. P. Soman
2010 conf
A2CWiC
M. P. Preeja, K. P. Soman
2010 conf
T4E
V. Dhanalakshmi, M. Anand Kumar, R. U. Rekha, K. P. Soman, S. Rajendran
2010 Misc conf
ICMLC
P. J. Antony, K. P. Soman
2010 conf
ICDEM
V. P. Abeera, S. Aparna, R. U. Rekha, M. Anand Kumar, V. Dhanalakshmi, K. P. Soman, S. Rajendran
2010 conf
ICT
G. Sai Kiranmai, K. Mallika, M. Anand Kumar, V. Dhanalakshmi, K. P. Soman
2010 conf
ICT
T. Arathi, K. P. Soman, Latha Parameswaran
2010 conf
BAIP
P. J. Antony, V. P. Ajith, K. P. Soman
2009 conf
ARTCom
R. Ramanathan, K. P. Soman, L. Thaneshwaran, V. Viknesh, T. Arunkumar, P. Yuvaraj
2009 conf
ARTCom
R. Ramanathan, K. P. Soman, Arun S. Nair, V. Vidhya Sagar, N. Sriram
2009 conf
ARTCom
M. S. Silja, K. P. Soman
2009 conf
ARTCom
N. Lalithamani, K. P. Soman
2009 conf
ARTCom
T. Arathi, K. P. Soman
2009 conf
ARTCom
P. Remya Ravindran, K. P. Soman
2009 conf
ARTCom
V. Dhanalakshmi, P. Padmavathy, M. Anand Kumar, K. P. Soman, S. Rajendran
2009 conf
ARTCom
V. Joevivek, Hemalatha Thirugnanam, K. P. Soman
2009 conf
ARTCom
R. Ramanathan, K. P. Soman, N. Valliappan, S. Pon Mathavan, M. Gayathri, R. Priya
2009 conf
ARTCom
K. Mallika, K. P. Soman
2009 conf
ARTCom
R. Ramanathan, K. P. Soman
2009 conf
ARTCom
Hemalatha Thirugnanam, K. Sukumar, K. P. Soman
2009 conf
ARTCom
R. Ramanathan, K. P. Soman, P. A. Rohini, G. Dharshana
2009 conf
ARTCom
V. Dhanalakshmi, M. Anand Kumar, R. U. Rekha, C. Arun Kumar, K. P. Soman, S. Rajendran
2009 conf
ARTCom
K. Sukumar, Hemalatha Thirugnanam, K. P. Soman
2009 conf
ARTCom
T. Arathi, K. P. Soman
2009 conf
ARTCom
D. Bharath Bhushan, K. P. Soman
2009 conf
SCSS
Shivsubramani Krishnamoorthy, R. Loganathan, K. P. Soman
2009 conf
ICWN
Maneesha V. Ramesh, K. P. Soman
2008 conf
IPCV
Joseph Amudha, K. P. Soman, Keerthana Vasanth
2007 conf
ICCTA
K. P. Soman, R. Loganathan, M. S. Vijaya, V. Ajay, K. Shivsubramani
redb/extractors/decompiler/_archive/DecompileBinja-archive.py
← Index redb/extractors/decompiler/_archive/DecompileBinja-archive.py python
import hashlib
import inspect
import json
import os
import time
import threading
from datetime import datetime, timezone
from typing import Dict, Any, Optional

from redb.extractors.enum import Tag
from redb.extractors.extractor import Extractor
import magic
import pefile
import ppdeep
import tlsh

# Import our BinjaDecompiler (conditional)
from redb.extractors.decompiler.bninja.decompiler import BinaryNinjaDecompiler

class DecompileBinja(Extractor):
    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        filetype=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
        )
        self.log.debug(inspect.currentframe().f_code.co_name)

        # Check if Binary Ninja is available
       # if not BINARYNINJA_AVAILABLE:
        #     self.log.error("Binary Ninja is not available in this container")
        #    raise ImportError(
        #        "Binary Ninja module not found - not available in feature extraction container"
        #    )
        self.analysis_results = None
        self.binja_decompiler = None
        self.filetype = filetype

        # Convert TIMEOUT to integer with a default of 1200 seconds (20 minutes)
        try:
            self.BINJA_TIMEOUT = int(os.getenv("BINJA_TIMEOUT", "1200"))
        except ValueError:
            self.log.warning(
                "Invalid BINJA_TIMEOUT value, using default of 1200 seconds"
            )
            self.BINJA_TIMEOUT = 1200

        # Convert TIMEOUT to integer with a default of 1200 seconds (20 minutes)
        try:
            self.DECOMPILE_EXTRACTOR_TIMEOUT = int(
                os.getenv("DECOMPILE_EXTRACTOR_TIMEOUT", "2580")
            )
        except ValueError:
            self.log.warning(
                "Invalid DECOMPILE_EXTRACTOR_TIMEOUT value, using default of 2580 seconds"
            )
            self.DECOMPILE_EXTRACTOR_TIMEOUT = 2580

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cleanup_run()

    def calculate_md5(self, input_str):
        """Calculate MD5 hash of a string."""
        return hashlib.md5(input_str.encode("utf-8")).hexdigest()

    def is_dotnet(self):
        """Check if the binary is a .NET assembly.

        Returns:
            bool: True if the file is a .NET assembly, False otherwise
        """
        try:
            if self.filetype == "pebin":
                file_type = magic.from_buffer(self.binary)
                if ".Net" in file_type:
                    return True
                pe = pefile.PE(self.filepath)
                for entry in pe.OPTIONAL_HEADER.DATA_DIRECTORY:
                    # IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR is typically 14
                    if (
                        entry.name == "IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR"
                        and entry.Size > 0
                    ):
                        return True
                return False
        except AttributeError as e:
            self.log.error(
                f"AttributeError error dotnet file {self.hash.sha256} Full error : {e}"
            )
            return False

    def cleanup_run(self):
        """Clean up after analysis."""
        try:
            # BinaryNinjaDecompiler uses context manager pattern (__enter__/__exit__)
            # Cleanup happens automatically when exiting the 'with' block
            self.binja_decompiler = None

            # Force garbage collection
            import gc

            gc.collect()

        except Exception as e:
            self.log.error(f"Error in cleanup: {e}")

    def analyze_binary(self) -> Optional[Dict[str, Any]]:
        """Run Binary Ninja analysis and return results."""
        self.log.debug("Starting binary analysis")

        try:
            # Use BinaryNinjaDecompiler as a context manager to ensure proper setup/cleanup
            with BinaryNinjaDecompiler(
                filepath=self.filepath,
                timeout=self.BINJA_TIMEOUT,
                log=self.log,
                exporters=self.exporters,
                index_prefix=self.index_prefix,
                filetype=self.filetype,
            ) as decompiler:
                self.binja_decompiler = decompiler

                if decompiler.extract():
                    # Store results before context manager exits
                    results = decompiler.analysis_results
                    return results
                else:
                    self.log.error("BinaryNinjaDecompiler extraction failed")
                    return None

        except Exception as e:
            self.log.error(f"Error in Binary Ninja analysis: {e}")
            import traceback
            self.log.error(f"Traceback: {traceback.format_exc()}")
            return None

        finally:
            self.cleanup_run()

    def extract(self):
        """Extract and process all analysis results."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        # Create a flag to track if extraction completed
        extraction_completed = False
        extraction_result = False
        extraction_error = None

        # Define the extraction process as a separate function
        def do_extraction():
            nonlocal extraction_completed, extraction_result, extraction_error
            try:
                results = self.analyze_binary()
                if not results:
                    extraction_result = False
                else:
                    self.analysis_results = results
                    extraction_result = True
            except Exception as e:
                extraction_error = e
                extraction_result = False
            finally:
                extraction_completed = True

        # Start extraction in a separate thread
        extraction_thread = threading.Thread(target=do_extraction)
        extraction_thread.daemon = True
        extraction_thread.start()

        # Wait for the extraction to complete or timeout
        start_time = time.time()
        while (
            not extraction_completed
            and (time.time() - start_time) < self.DECOMPILE_EXTRACTOR_TIMEOUT
        ):
            time.sleep(1)

        if not extraction_completed:
            self.log.error(
                f"Extraction timed out after {self.DECOMPILE_EXTRACTOR_TIMEOUT} seconds"
            )
            # Force cleanup
            self.cleanup_run()
            return None

        if extraction_error:
            self.log.error(f"Error in extraction: {extraction_error}")
            return None

        # Return the actual analysis results, not just a boolean
        return self.analysis_results if extraction_result else None

    def prepare_export_data(self, exporter_type: str) -> Any:
        """Prepare data for database export."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        if not self.analysis_results:
            return None

        # # Delegate to the BinjaDecompiler for consistent export formatting
        # if self.binja_decompiler:
        #     return self.binja_decompiler.prepare_export_data(exporter_type)
        # else:
        #     self.log.error("BinjaDecompiler not available for export preparation")
        #     return None

        if exporter_type == "ClickHouseExporter":
            now = datetime.now(timezone.utc)

            def prepare_array_field(value, array_type):
                """Helper to prepare array fields with proper null handling"""
                if value is None:
                    return []
                return value

            # Add a helper function to handle empty strings
            def ensure_not_empty(value, default="UNKNOWN"):
                """Ensure a string value is not empty"""
                if value is None or value == "":
                    return default
                return value

            def ssdeep_disassembly(func):
                try:
                    if len(func) > 1:
                        return ppdeep.hash(func)
                    return ""
                except Exception as e:
                    self.log.error(f"Error in disassembly ssdeep hash calculation: {e}")
                    return ""

            def tlsh_disassembly(func):
                try:
                    if len(func) >= 50:
                        return tlsh.hash(func.encode("utf-8"))
                    return ""
                except Exception as e:
                    self.log.error(f"Error in disassembly tlsh hash calculation: {e}")
                    return ""

            return {
                "multi_table": True,
                "decompiled_content": {
                    "table": "code_binja_decompiled_functions_content",
                    "data": [
                        [
                            f["decompiled_function_hash"],
                            f["decompiled_function"],
                            f["function_type"],
                            now,
                        ]
                        for f in self.analysis_results["decompiled"]
                    ],
                    "column_names": [
                        "decompiled_function_hash",
                        "decompiled_function",
                        "function_type",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "String",
                        "Enum8('USER'=1, 'LIBRARY'=2, 'THUNK'=3, 'EXTERNAL'=4, 'UNKNOWN'=5)",
                        "DateTime64(3, 'UTC')",
                    ],
                },
                "decompiled_refs": {
                    "table": "code_binja_decompiled_functions_references",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            self.analysis_results["sha1"],
                            self.analysis_results["md5"],
                            f["decompiled_function_hash"],
                            f["disassembled_function_hash"],  # New linking field
                            f["decompiled_function_name"],
                            f["decompiled_function_prototype"],
                            f["decompiled_function_address"],
                            now,
                        ]
                        for f in self.analysis_results["decompiled"]
                    ],
                    "column_names": [
                        "sha256",
                        "sha1",
                        "md5",
                        "decompiled_function_hash",
                        "disassembled_function_hash",  # New linking field
                        "decompiled_function_name",
                        "decompiled_function_prototype",
                        "decompiled_function_address",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "FixedString(40)",
                        "FixedString(32)",
                        "FixedString(64)",
                        "Nullable(FixedString(64))",  # New linking field
                        "LowCardinality(String)",
                        "LowCardinality(String)",
                        "UInt64",
                        "DateTime64(3, 'UTC')",
                    ],
                },
                "disassembled_content": {
                    "table": "code_binja_disassembled_functions_content",
                    "data": [
                        [
                            f["disassembled_function_hash"],
                            f.get("disassembled_function", ""),
                            f.get("disassembled_function_no_addresses", ""),
                            f.get("function_type", "UNKNOWN"),
                            f.get("instructions_count", 0),
                            prepare_array_field(
                                f.get("instructions_types"), "LowCardinality(String)"
                            ),
                            f.get("control_flow_count", 0),
                            prepare_array_field(
                                f.get("memory_access_pattern"), "LowCardinality(String)"
                            ),
                            prepare_array_field(
                                f.get("register_usage"), "LowCardinality(String)"
                            ),
                            f.get("data_references_count", 0),
                            f.get("max_block_size", 0),
                            f.get("num_calls", 0),
                            f.get("stack_size", 0),
                            now,
                        ]
                        for f in self.analysis_results["disassembled"]
                    ],
                    "column_names": [
                        "disassembled_function_hash",
                        "disassembled_function",
                        "disassembled_function_no_addresses",
                        "function_type",
                        "instructions_count",
                        "instructions_types",
                        "control_flow_count",
                        "memory_access_pattern",
                        "register_usage",
                        "data_references_count",
                        "max_block_size",
                        "num_calls",
                        "stack_size",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "String",
                        "String",
                        "Enum8('USER'=1, 'LIBRARY'=2, 'THUNK'=3, 'EXTERNAL'=4, 'UNKNOWN'=5)",
                        "UInt32",
                        "Array(LowCardinality(String))",
                        "UInt32",
                        "Array(LowCardinality(String))",
                        "Array(LowCardinality(String))",
                        "UInt32",
                        "Nullable(UInt32)",
                        "Nullable(UInt32)",
                        "Nullable(Int32)",
                        "DateTime64(3, 'UTC')",
                    ],
                },
                "disassembled_refs": {
                    "table": "code_binja_disassembled_functions_references",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            self.analysis_results["sha1"],
                            self.analysis_results["md5"],
                            f["disassembled_function_hash"],
                            f["decompiled_function_hash"],
                            f["disassembled_function_name"],
                            f["disassembled_function_address"],
                            ssdeep_disassembly(
                                f.get("disassembled_function_no_addresses", "")
                            ),
                            tlsh_disassembly(
                                f.get("disassembled_function_no_addresses", "")
                            ),
                            now,
                        ]
                        for f in self.analysis_results["disassembled"]
                    ],
                    "column_names": [
                        "sha256",
                        "sha1",
                        "md5",
                        "disassembled_function_hash",
                        "decompiled_function_hash",
                        "disassembled_function_name",
                        "disassembled_function_address",
                        "ssdeep_disassembly",
                        "tlsh_disassembly",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "FixedString(40)",
                        "FixedString(32)",
                        "FixedString(64)",
                        "Nullable(FixedString(64))",
                        "LowCardinality(String)",
                        "UInt64",
                        "Nullable(String)",
                        "Nullable(FixedString(72))",
                        "DateTime64(3, 'UTC')",
                    ],
                },
                "cfg_blocks": {
                    "table": "code_binja_cfg_blocks",
                    "data": [
                        [
                            b["block_id"],
                            self.analysis_results["sha256"],
                            self.analysis_results["sha1"],
                            self.analysis_results["md5"],
                            b["function_address"],
                            b["block_start_address"],
                            b["block_end_address"],
                            b["block_size"],
                            b["instructions_count"],
                            b["block_instructions"],  # MD5 hash of instructions
                            b["predecessor_blocks"],
                            b["successor_blocks"],
                            b["depth"],
                            b["position"],
                            b["branch_type"],
                            b["block_type"],
                            b["flags"],
                            b["dominators"],
                            b["post_dominators"],
                            now,
                        ]
                        # Flatten: iterate through all functions, then all blocks in each function
                        for func_cfg in self.analysis_results["cfg"]
                        if func_cfg is not None  # Handle None from failed extractions
                        for b in func_cfg["blocks"]
                    ],
                    "column_names": [
                        "block_id",
                        "sha256",
                        "sha1",
                        "md5",
                        "function_address",
                        "block_start_address",
                        "block_end_address",
                        "block_size",
                        "instructions_count",
                        "block_instructions_hash",
                        "predecessor_blocks",
                        "successor_blocks",
                        "depth",
                        "position",
                        "branch_type",
                        "block_type",
                        "flags",
                        "dominators",
                        "post_dominators",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",  # block_id (SHA256)
                        "FixedString(64)",  # sha256
                        "FixedString(40)",  # sha1
                        "FixedString(32)",  # md5
                        "UInt64",  # function_address
                        "UInt64",  # block_start_address
                        "UInt64",  # block_end_address
                        "UInt32",  # block_size
                        "UInt16",  # instructions_count
                        "FixedString(32)",  # block_instructions_hash (MD5)
                        "Array(UInt64)",  # predecessor_blocks
                        "Array(UInt64)",  # successor_blocks
                        "UInt16",  # depth
                        "UInt16",  # position
                        "Enum8('DIRECT'=1, 'CONDITIONAL'=2, 'CALL'=3, 'RETURN'=4, 'FALLTHROUGH'=5, 'INDIRECT'=6, 'UNKNOWN'=7)",  # branch_type
                        "Enum8('CODE'=1, 'DATA'=2, 'THUNK'=3)",  # block_type
                        "Array(String)",  # flags (EntryBlock, ExitBlock, LoopBlock)
                        "Array(UInt16)",  # dominators
                        "Array(UInt16)",  # post_dominators
                        "DateTime64(3, 'UTC')",  # analysis_date
                    ],
                },
                "function_analysis_errors": {
                    "table": "function_analysis_errors_binja",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            f["function_name"],
                            f["function_address"],
                            f.get("error_location", "unknown"),
                            f.get("error_message", ""),
                            f.get("error_details", ""),
                            f.get("error_type", "unknown"),
                            self.calculate_md5(
                                f"{f['error_message']}{f['function_name']}{f['function_address']}{f['error_location']}"
                            ),
                            "new",
                            now,
                        ]
                        for f in self.analysis_results["errors"]
                    ],
                    "column_names": [
                        "sha256",
                        "function_name",
                        "function_address",
                        "error_location",
                        "error_message",
                        "error_details",
                        "error_type",
                        "error_hash",
                        "status",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "Nullable(String)",
                        "UInt64",
                        "LowCardinality(String)",
                        "Nullable(String)",
                        "Nullable(String)",
                        "Nullable(String)",
                        "FixedString(32)",
                        "Enum8('new'=1, 'investigating'=2, 'fixed'=3, 'wontfix'=4)",
                        "DateTime64(3, 'UTC')",
                    ],
                },
            }

    def tag(self) -> str:
        """Return the tag for this extractor."""
        return Tag.DECOMPILED.value

    def get_clickhouse_table(self) -> str:
        """Not used directly as we're handling multiple tables."""
        pass


if __name__ == "__main__":
    # Setup basic logging
    import logging

    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger("DecompileBinja")

    # Parse command line arguments
    import argparse

    parser = argparse.ArgumentParser(description="Binary Ninja Decompiler Wrapper")
    parser.add_argument("filepath", help="Path to the binary file to analyze")
    parser.add_argument(
        "--output", "-o", help="Output JSON file path (default: stdout)"
    )
    parser.add_argument(
        "--timeout",
        "-t",
        type=int,
        default=1200,
        help="Analysis timeout in seconds (default: 1200)",
    )
    args = parser.parse_args()

    # Create and run the extractor
    with DecompileBinja(args.filepath, logger) as extractor:
        success = extractor.extract()

        if not success:
            logger.error("Analysis failed")
            exit(1)

        # Output results
        if args.output:
            with open(args.output, "w") as f:
                json.dump(extractor.analysis_results, f)
            logger.info(f"Results written to {args.output}")
        else:
            print(json.dumps(extractor.analysis_results))