Kamesh Munagala

210 papers A* 68A 14B 3C 2Misc 4Journal 88Unranked 26
YearRankTypeTitle / Venue / Authors
2026 A* conf
SODA
Harry Chen, Kamesh Munagala, Govind S. Sankar
2026 J jnl
CoRR
Mohak Goyal, Lodewijk Gelauff, Naman Gupta, Ashish Goel, Kamesh Munagala
2026 J jnl
CoRR
Sreenivas Gollapudi, Kostas Kollias, Kamesh Munagala, Aravindan Vijayaraghavan
2025 J jnl
CoRR
Harry Chen, Kamesh Munagala, Govind S. Sankar
2025 J jnl
CoRR
Pranjal Awasthi, Sreenivas Gollapudi, Ravi Kumar, Kamesh Munagala
2025 J jnl
CoRR
Kamesh Munagala, Qilin Ye, Ian Zhang
2025 conf
FORC
Ashish Goel, Zhihao Jiang, Aleksandra Korolova, Kamesh Munagala, Sahasrajit Sarmasarkar
2025 A* conf
AAAI
Yannan Bai, Kamesh Munagala, Yiheng Shen, Ian Zhang
2025 J jnl
CoRR
Yannan Bai, Kamesh Munagala, Yiheng Shen, Davidson Zhu
2025 conf
FORC
Santhini K. A., Kamesh Munagala, Meghana Nasre, Govind S. Sankar
2025 A* conf
SODA
Siddhartha Banerjee, Kamesh Munagala, Yiheng Shen, Kangning Wang
2025 A* conf
STOC
Ashish Goel, Mohak Goyal, Kamesh Munagala
2025 J jnl
CoRR
Ashish Goel, Mohak Goyal, Kamesh Munagala
2025 J jnl
CoRR
Sahasrajit Sarmasarkar, Zhihao Jiang, Ashish Goel, Aleksandra Korolova, Kamesh Munagala
2025 conf
ACDA
Aditya Bhaskara, Sreenivas Gollapudi, Sungjin Im, Kostas Kollias, Kamesh Munagala
2025 J jnl
CoRR
Aditya Bhaskara, Sreenivas Gollapudi, Sungjin Im, Kostas Kollias, Kamesh Munagala
2025 J jnl
Soc. Choice Welf.
Kamesh Munagala, Zeyu Shen, Kangning Wang
2025 J jnl
CoRR
Siddhartha Banerjee, Kamesh Munagala, Yiheng Shen, Kangning Wang
2024 J jnl
CoRR
Santhini K. A., Kamesh Munagala, Meghana Nasre, Govind S. Sankar
2024 A* conf
WWW
Aditya Bhaskara, Sreenivas Gollapudi, Sungjin Im, Kostas Kollias, Kamesh Munagala, Govind S. Sankar
2024 J jnl
CoRR
Aditya Bhaskara, Sreenivas Gollapudi, Sungjin Im, Kostas Kollias, Kamesh Munagala, Govind S. Sankar
2024 J jnl
CoRR
Ashish Goel, Zhihao Jiang, Aleksandra Korolova, Kamesh Munagala, Sahasrajit Sarmasarkar
2024 J jnl
CoRR
Yannan Bai, Kamesh Munagala, Yiheng Shen, Ian Zhang
2024 A* conf
SODA
Siddhartha Banerjee, Kamesh Munagala, Yiheng Shen, Kangning Wang
2024 A* conf
ICML
Kamesh Munagala, Govind S. Sankar
2024 J jnl
CoRR
Kamesh Munagala, Govind S. Sankar
2024 J jnl
CoRR
Siddhartha Banerjee, Kamesh Munagala, Yiheng Shen, Kangning Wang
2024 J jnl
ACM Trans. Economics and Comput.
Shao-Heng Ko, Kamesh Munagala
2024 J jnl
CoRR
Kamesh Munagala, Yiheng Shen, Renzhe Xu
2023 J jnl
CoRR
Zeyu Shen, Anilesh K. Krishnaswamy, Janardhan Kulkarni, Kamesh Munagala
2023 A conf
AISTATS
Aditya Bhaskara, Kamesh Munagala
2023 A* conf
EC
Ivan-Aleksandar Mavrov, Kamesh Munagala, Yiheng Shen
2023 J jnl
CoRR
Ivan-Aleksandar Mavrov, Kamesh Munagala, Yiheng Shen
2023 J jnl
CoRR
Siddhartha Banerjee, Kamesh Munagala, Yiheng Shen, Kangning Wang
2023 A conf
AAMAS
Zeyu Shen, Zhiyi Wang, Xingyu Zhu, Brandon Fain, Kamesh Munagala
2023 J jnl
CoRR
Zeyu Shen, Zhiyi Wang, Xingyu Zhu, Brandon Fain, Kamesh Munagala
2023 A conf
ITCS
Aditya Bhaskara, Sreenivas Gollapudi, Sungjin Im, Kostas Kollias, Kamesh Munagala
2023 A conf
APPROX/RANDOM
Kamesh Munagala, Govind S. Sankar, Erin Taylor
2022 A* conf
NeurIPS
Shao-Heng Ko, Erin Taylor, Pankaj K. Agarwal, Kamesh Munagala
2022 J jnl
CoRR
Shao-Heng Ko, Erin Taylor, Pankaj K. Agarwal, Kamesh Munagala
2022 A* conf
SODA
Kamesh Munagala, Yiheng Shen, Kangning Wang, Zhiyi Wang
2022 conf
WINE
Kamesh Munagala, Yiheng Shen, Kangning Wang
2022 J jnl
CoRR
Kamesh Munagala, Yiheng Shen, Kangning Wang
2022 A* conf
AAAI
Pankaj K. Agarwal, Shao-Heng Ko, Kamesh Munagala, Erin Taylor
2022 J jnl
CoRR
Aditya Bhaskara, Sreenivas Gollapudi, Sungjin Im, Kostas Kollias, Kamesh Munagala
2022 A* conf
EC
Shao-Heng Ko, Kamesh Munagala
2022 J jnl
CoRR
Shao-Heng Ko, Kamesh Munagala
2022 A* conf
EC
Reza Alijani, Siddhartha Banerjee, Kamesh Munagala, Kangning Wang
2021 J jnl
ACM Trans. Economics and Comput.
Yu Cheng, Nick Gravin, Kamesh Munagala, Kangning Wang
2021 J jnl
CoRR
Kamesh Munagala, Yiheng Shen, Kangning Wang, Zhiyi Wang
2021 A conf
WSDM
Liang Lyu, Brandon Fain, Kamesh Munagala, Kangning Wang
2021 J jnl
CoRR
Liang Lyu, Brandon Fain, Kamesh Munagala, Kangning Wang
2021 A conf
AISTATS
Anilesh Kollagunta Krishnaswamy, Zhihao Jiang, Kangning Wang, Yu Cheng, Kamesh Munagala
2021 J jnl
CoRR
Pankaj K. Agarwal, Shao-Heng Ko, Kamesh Munagala, Erin Taylor
2021 A* conf
EC
Kamesh Munagala, Zeyu Shen, Kangning Wang
2021 J jnl
CoRR
Kamesh Munagala, Zeyu Shen, Kangning Wang
2021 A* conf
NeurIPS
Zeyu Shen, Lodewijk Gelauff, Ashish Goel, Aleksandra Korolova, Kamesh Munagala
2021 J jnl
CoRR
Zeyu Shen, Lodewijk Gelauff, Ashish Goel, Aleksandra Korolova, Kamesh Munagala
2020 A* conf
NeurIPS
Aditya Bhaskara, Sreenivas Gollapudi, Kostas Kollias, Kamesh Munagala
2020 J jnl
CoRR
Lodewijk Gelauff, Ashish Goel, Kamesh Munagala, Sravya Yandamuri
2020 A* conf
STOC
Zhihao Jiang, Kamesh Munagala, Kangning Wang
2020 conf
FSTTCS
Pankaj K. Agarwal, Hsien-Chih Chang, Kamesh Munagala, Erin Taylor, Emo Welzl
2020 J jnl
CoRR
Pankaj K. Agarwal, Hsien-Chih Chang, Kamesh Munagala, Erin Taylor, Emo Welzl
2020 A* conf
IJCAI
Brandon Fain, William Fan, Kamesh Munagala
2020 J jnl
CoRR
Brandon Fain, William Fan, Kamesh Munagala
2020 conf
SIGMETRICS (Abstracts)
Sungjin Im, Benjamin Moseley, Kamesh Munagala, Kirk Pruhs
2020 J jnl
CoRR
Sungjin Im, Benjamin Moseley, Kamesh Munagala, Kirk Pruhs
2020 J jnl
Proc. ACM Meas. Anal. Comput. Syst.
Sungjin Im, Benjamin Moseley, Kamesh Munagala, Kirk Pruhs
2020 J jnl
CoRR
Anilesh K. Krishnaswamy, Zhihao Jiang, Kangning Wang, Yu Cheng, Kamesh Munagala
2020 J jnl
ACM Trans. Economics and Comput.
Yu Cheng, Zhihao Jiang, Kamesh Munagala, Kangning Wang
2020 conf
SIGMETRICS (Abstracts)
Reza Alijani, Siddhartha Banerjee, Sreenivas Gollapudi, Kamesh Munagala, Kangning Wang
2020 J jnl
CoRR
Reza Alijani, Siddhartha Banerjee, Sreenivas Gollapudi, Kamesh Munagala, Kangning Wang
2020 J jnl
Proc. ACM Meas. Anal. Comput. Syst.
Reza Alijani, Siddhartha Banerjee, Sreenivas Gollapudi, Kamesh Munagala, Kangning Wang
2020 J jnl
CoRR
Reza Alijani, Siddhartha Banerjee, Kamesh Munagala, Kangning Wang
2019 J jnl
CoRR
Zhihao Jiang, Kamesh Munagala, Kangning Wang
2019 A* conf
EC
Yu Cheng, Zhihao Jiang, Kamesh Munagala, Kangning Wang
2019 J jnl
CoRR
Yu Cheng, Zhihao Jiang, Kamesh Munagala, Kangning Wang
2019 A* conf
EC
Kamesh Munagala, Kangning Wang
2019 J jnl
CoRR
Kamesh Munagala, Kangning Wang
2019 J jnl
J. Artif. Intell. Res.
Nikhil Garg, Vijay Kamble, Ashish Goel, David Marn, Kamesh Munagala
2019 A* conf
ICML
Xingyu Chen, Brandon Fain, Liang Lyu, Kamesh Munagala
2019 J jnl
CoRR
Xingyu Chen, Brandon Fain, Charles Lyu, Kamesh Munagala
2019 A* conf
AAAI
Brandon Fain, Ashish Goel, Kamesh Munagala, Nina Prabhu
2019 conf
SIGMETRICS (Abstracts)
Reza Alijani, Siddhartha Banerjee, Sreenivas Gollapudi, Kostas Kollias, Kamesh Munagala
2019 J jnl
Proc. ACM Meas. Anal. Comput. Syst.
Reza Alijani, Siddhartha Banerjee, Sreenivas Gollapudi, Kostas Kollias, Kamesh Munagala
2018 conf
WINE
Yu Cheng, Nick Gravin, Kamesh Munagala, Kangning Wang
2018 J jnl
CoRR
Yu Cheng, Nick Gravin, Kamesh Munagala, Kangning Wang
2018 J jnl
J. ACM
Sungjin Im, Janardhan Kulkarni, Kamesh Munagala
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Jun Yang, Kamesh Munagala, Adam Silberstein
2018 A* conf
EC
Brandon Fain, Kamesh Munagala, Nisarg Shah
2018 J jnl
CoRR
Brandon Fain, Kamesh Munagala, Nisarg Shah
2018 J jnl
CoRR
Brandon Fain, Ashish Goel, Kamesh Munagala, Nina Prabhu
2018 A* conf
PODS
Pankaj K. Agarwal, Kyle Fox, Kamesh Munagala, Abhinandan Nath, Jiangwei Pan, Erin Taylor
2017 A* conf
WWW
Nikhil Garg, Vijay Kamble, Ashish Goel, David Marn, Kamesh Munagala
2017 J jnl
CoRR
Nikhil Garg, Vijay Kamble, Ashish Goel, David Marn, Kamesh Munagala
2017 A* conf
EC
Ashish Goel, Anilesh Kollagunta Krishnaswamy, Kamesh Munagala
2017 conf
SIGMOD Conference
Mayuresh Kunjir, Brandon Fain, Kamesh Munagala, Shivnath Babu
2017 A* conf
WWW
Siddhartha Banerjee, Sreenivas Gollapudi, Kostas Kollias, Kamesh Munagala
2017 J jnl
SIGecom Exch.
Siddhartha Banerjee, Sreenivas Gollapudi, Kostas Kollias, Kamesh Munagala
2017 conf
WINE
Brandon Fain, Ashish Goel, Kamesh Munagala, Sukolsak Sakshuwong
2017 J jnl
CoRR
Brandon Fain, Ashish Goel, Kamesh Munagala, Sukolsak Sakshuwong
2017 J jnl
CoRR
Reza Alijani, Siddhartha Banerjee, Sreenivas Gollapudi, Kostas Kollias, Kamesh Munagala
2016 conf
APPROX-RANDOM
Sungjin Im, Janardhan Kulkarni, Benjamin Moseley, Kamesh Munagala
2016 A* conf
ICALP
Sungjin Im, Janardhan Kulkarni, Kamesh Munagala
2016 ch.
Encyclopedia of Algorithms
Kamesh Munagala
2016 conf
SIGSPATIAL/GIS
Abhinandan Nath, Kyle Fox, Kamesh Munagala, Pankaj K. Agarwal
2016 J jnl
CoRR
Ashish Goel, Anilesh Kollagunta Krishnaswamy, Kamesh Munagala
2016 A* conf
PODS
Pankaj K. Agarwal, Kyle Fox, Kamesh Munagala, Abhinandan Nath
2016 conf
WINE
Brandon Fain, Ashish Goel, Kamesh Munagala
2016 J jnl
CoRR
Brandon Fain, Ashish Goel, Kamesh Munagala
2015 C conf
WAW
Ashish Goel, Kamesh Munagala, Aneesh Sharma, Hongyang Zhang
2015 A conf
ICDCS
Qiang Cao, Michael Sirivianos, Xiaowei Yang, Kamesh Munagala
2015 A* conf
FOCS
Sungjin Im, Janardhan Kulkarni, Kamesh Munagala
2015 J jnl
CoRR
Mayuresh Kunjir, Brandon Fain, Kamesh Munagala, Shivnath Babu
2014 J jnl
CoRR
Sungjin Im, Janardhan Kulkarni, Kamesh Munagala
2014 A* conf
STOC
Sungjin Im, Janardhan Kulkarni, Kamesh Munagala
2014 A conf
ITCS
Sayan Bhattacharya, Sungjin Im, Janardhan Kulkarni, Kamesh Munagala
2014 C conf
WAW
Bahman Bahmani, Ashish Goel, Kamesh Munagala
2014 A conf
WSDM
Abhimanyu Das, Sreenivas Gollapudi, Kamesh Munagala
2014 J jnl
CoRR
Sungjin Im, Janardhan Kulkarni, Kamesh Munagala, Kirk Pruhs
2014 A* conf
FOCS
Sungjin Im, Janardhan Kulkarni, Kamesh Munagala, Kirk Pruhs
2014 A* conf
COLT
Sudipto Guha, Kamesh Munagala
2014 conf
WINE
Kamesh Munagala, Xiaoming Xu
2013 conf
APPROX-RANDOM
Sudipto Guha, Kamesh Munagala
2013 J jnl
CoRR
Sudipto Guha, Kamesh Munagala
2013 A* conf
STOC
Kshipra Bhawalkar, Sreenivas Gollapudi, Kamesh Munagala
2013 conf
COSN
Reza Bosagh Zadeh, Ashish Goel, Kamesh Munagala, Aneesh Sharma
2013 J jnl
ACM Trans. Economics and Comput.
Nima Haghpanah, Nicole Immorlica, Vahab S. Mirrokni, Kamesh Munagala
2013 A* conf
EC
Anand Bhalgat, Sreenivas Gollapudi, Kamesh Munagala
2012 J jnl
ACM Trans. Algorithms
Sudipto Guha, Kamesh Munagala
2012 B conf
WAOA
Janardhan Kulkarni, Kamesh Munagala
2012 J jnl
Theory Comput.
Sayan Bhattacharya, Gagan Goel, Sreenivas Gollapudi, Kamesh Munagala
2012 J jnl
CoRR
Ashish Goel, Kamesh Munagala
2012 J jnl
SIGecom Exch.
Nima Haghpanah, Nicole Immorlica, Vahab S. Mirrokni, Kamesh Munagala
2012 A* conf
EC
Anand Bhalgat, Sreenivas Gollapudi, Kamesh Munagala
2012 J jnl
CoRR
Anand Bhalgat, Sreenivas Gollapudi, Kamesh Munagala
2012 J jnl
IEEE/ACM Trans. Netw.
Justin Manweiler, Naveen Santhapuri, Souvik Sen, Romit Roy Choudhury, Srihari Nelakuditi, Kamesh Munagala
2011 conf
WINE
Sayan Bhattacharya, Vincent Conitzer, Kamesh Munagala
2011 A* conf
WWW
Sayan Bhattacharya, Sreenivas Gollapudi, Kamesh Munagala
2011 J jnl
VLDB J.
Mumtaz Ahmad, Ashraf Aboulnaga, Shivnath Babu, Kamesh Munagala
2011 conf
WINE
Sayan Bhattacharya, Janardhan Kulkarni, Kamesh Munagala, Xiaoming Xu
2011 A* conf
EC
Nima Haghpanah, Nicole Immorlica, Vahab S. Mirrokni, Kamesh Munagala
2011 J jnl
Proc. VLDB Endow.
Yi Zhang, Kamesh Munagala, Jun Yang
2010 J jnl
J. ACM
Sudipto Guha, Kamesh Munagala, Peng Shi
2010 A* conf
STOC
Sayan Bhattacharya, Gagan Goel, Sreenivas Gollapudi, Kamesh Munagala
2010 conf
WINE
Vincent Conitzer, Nicole Immorlica, Joshua Letchford, Kamesh Munagala, Liad Wagman
2010 J jnl
ACM Trans. Algorithms
Ashish Goel, Sudipto Guha, Kamesh Munagala
2010 A* conf
SODA
Sayan Bhattacharya, Vincent Conitzer, Kamesh Munagala, Lirong Xia
2010 J jnl
CoRR
Sudipto Guha, Kamesh Munagala, Martin Pal
2009 J jnl
SIAM J. Comput.
Sudipto Guha, Adam Meyerson, Kamesh Munagala
2009 A* conf
SODA
Sudipto Guha, Kamesh Munagala, Peng Shi
2009 J jnl
CoRR
Gagan Goel, Sreenivas Gollapudi, Kamesh Munagala
2009 ch.
Encyclopedia of Database Systems
Jun Yang, Kamesh Munagala, Adam Silberstein
2009 A* conf
PODS
Sudipto Guha, Kamesh Munagala
2009 A* conf
ICDE
Songyun Duan, Shivnath Babu, Kamesh Munagala
2009 A* conf
WWW
Ashish Goel, Kamesh Munagala
2009 J jnl
CoRR
Sayan Bhattacharya, Vincent Conitzer, Kamesh Munagala, Lirong Xia
2009 conf
SIGMOD Conference
Shivnath Babu, Sudipto Guha, Kamesh Munagala
2009 B conf
SAGT
Joshua Letchford, Vincent Conitzer, Kamesh Munagala
2009 conf
ICALP (2)
Sudipto Guha, Kamesh Munagala
2009 A* conf
MobiCom
Justin Manweiler, Naveen Santhapuri, Souvik Sen, Romit Roy Choudhury, Srihari Nelakuditi, Kamesh Munagala
2008 J jnl
CoRR
Sudipto Guha, Kamesh Munagala
2008 J jnl
SIAM J. Comput.
Adam Meyerson, Kamesh Munagala, Serge A. Plotkin
2008 J jnl
CoRR
Ashish Goel, Kamesh Munagala
2008 J jnl
CoRR
Sudipto Guha, Kamesh Munagala, Saswati Sarkar
2008 ch.
Encyclopedia of Algorithms
Kamesh Munagala
2008 Misc conf
HotNets
Naveen Kumar Santhapuri, Justin Manweiler, Souvik Sen, Romit Roy Choudhury, Srihari Nelakuditi, Kamesh Munagala
2008 A conf
CIKM
Mumtaz Ahmad, Ashraf Aboulnaga, Shivnath Babu, Kamesh Munagala
2008 A* conf
ICDE
Shivnath Babu, Songyun Duan, Kamesh Munagala
2008 A* conf
ICDE
Mumtaz Ahmad, Ashraf Aboulnaga, Shivnath Babu, Kamesh Munagala
2008 J jnl
CoRR
Sudipto Guha, Kamesh Munagala
2008 B conf
IPCO
Kamesh Munagala, Peng Shi
2007 A* conf
FOCS
Sudipto Guha, Kamesh Munagala
2007 J jnl
CoRR
Sudipto Guha, Kamesh Munagala, Peng Shi
2007 A* conf
STOC
Sudipto Guha, Kamesh Munagala
2007 A conf
CIDR
Adam Silberstein, Gregory Filpus, Kamesh Munagala, Jun Yang
2007 Misc conf
International Conference on Computational Science (1)
Paul G. Flikkema, Pankaj K. Agarwal, James S. Clark, Carla Schlatter Ellis, Alan E. Gelfand, Kamesh Munagala, Jun Yang
2007 A* conf
VLDB
Adam Silberstein, Alan E. Gelfand, Kamesh Munagala, Gavino Puggioni, Jun Yang
2007 A* conf
SODA
Sudipto Guha, Kamesh Munagala
2007 A* conf
PODS
Kamesh Munagala, Utkarsh Srivastava, Jennifer Widom
2006 A* conf
ICDE
Adam Silberstein, Rebecca Braynard, Carla Schlatter Ellis, Kamesh Munagala, Jun Yang
2006 A* conf
PODS
Ashish Goel, Sudipto Guha, Kamesh Munagala
2006 conf
SIGMOD Conference
Adam Silberstein, Kamesh Munagala, Jun Yang
2006 Misc conf
CISS
Sudipto Guha, Kamesh Munagala, Saswati Sarkar
2006 Misc conf
International Conference on Computational Science (3)
Paul G. Flikkema, Pankaj K. Agarwal, James S. Clark, Carla Schlatter Ellis, Alan E. Gelfand, Kamesh Munagala, Jun Yang
2006 conf
SIGMETRICS/Performance
Sudipto Guha, Kamesh Munagala, Saswati Sarkar
2006 A* conf
VLDB
Utkarsh Srivastava, Kamesh Munagala, Jennifer Widom, Rajeev Motwani
2005 A* conf
ICDE
Shivnath Babu, Kamesh Munagala, Jennifer Widom, Rajeev Motwani
2005 A conf
ESA
Kamesh Munagala, Jun Yang, Hai Yu
2005 A* conf
PODS
Utkarsh Srivastava, Kamesh Munagala, Jennifer Widom
2005 A conf
ICDT
Kamesh Munagala, Shivnath Babu, Rajeev Motwani, Jennifer Widom
2004 conf
SIGMOD Conference
Shivnath Babu, Rajeev Motwani, Kamesh Munagala, Itaru Nishizawa, Jennifer Widom
2004 J jnl
BMC Bioinform.
Kamesh Munagala, Robert Tibshirani, Patrick O. Brown
2004 J jnl
SIAM J. Comput.
Vijay Arya, Naveen Garg, Rohit Khandekar, Adam Meyerson, Kamesh Munagala, Vinayaka Pandit
2003 J jnl
J. Algorithms
Sudipto Guha, Adam Meyerson, Kamesh Munagala
2003 conf
SI3D
Sudipto Guha, Shankar Krishnan, Kamesh Munagala, Suresh Venkatasubramanian
2003
Kamesh Munagala
2002 J jnl
Algorithmica
Ashish Goel, Kamesh Munagala
2002 A* conf
SODA
Sudipto Guha, Kamesh Munagala
2002 A* conf
SODA
Sudipto Guha, Kamesh Munagala
2001 A* conf
STOC
Sudipto Guha, Adam Meyerson, Kamesh Munagala
2001 A* conf
FOCS
Adam Meyerson, Kamesh Munagala, Serge A. Plotkin
2001 A* conf
SODA
Sudipto Guha, Adam Meyerson, Kamesh Munagala
2001 A* conf
STOC
Vijay Arya, Naveen Garg, Rohit Khandekar, Adam Meyerson, Kamesh Munagala, Vinayaka Pandit
2001 A* conf
SODA
Adam Meyerson, Kamesh Munagala, Serge A. Plotkin
2000 A* conf
SODA
Ashish Goel, Kamesh Munagala
2000 A* conf
FOCS
Adam Meyerson, Kamesh Munagala, Serge A. Plotkin
2000 A* conf
FOCS
Sudipto Guha, Adam Meyerson, Kamesh Munagala
2000 A conf
ESA
Matthew Andrews, Kamesh Munagala
1999 A* conf
SODA
Kamesh Munagala, Abhiram G. Ranade
redb/extractors/apk_extractors/apk_dex.py
← Index redb/extractors/apk_extractors/apk_dex.py python
import hashlib
import inspect
import json
from collections import Counter
from datetime import datetime, timezone
from typing import Any

import tlsh

from redb.extractors.enum import Tag
from redb.extractors.apk_extractor import APKExtractor
from redb.models.dataclasses import APKDexFile

# Sensitive API patterns categorized for malware analysis
SENSITIVE_API_CATEGORIES = {
    "reflection": [
        "Ljava/lang/reflect/Method;->invoke",
        "Ljava/lang/reflect/Field;->get",
        "Ljava/lang/reflect/Field;->set",
        "Ljava/lang/reflect/Constructor;->newInstance",
        "Ljava/lang/Class;->forName",
        "Ljava/lang/Class;->getMethod",
        "Ljava/lang/Class;->getDeclaredMethod",
        "Ljava/lang/Class;->getDeclaredField",
        "Ljava/lang/ClassLoader;->loadClass",
    ],
    "crypto": [
        "Ljavax/crypto/Cipher;->getInstance",
        "Ljavax/crypto/Cipher;->init",
        "Ljavax/crypto/spec/SecretKeySpec;-><init>",
        "Ljavax/crypto/spec/IvParameterSpec;-><init>",
        "Ljava/security/MessageDigest;->getInstance",
        "Ljava/security/KeyStore;->getInstance",
        "Ljavax/crypto/Mac;->getInstance",
    ],
    "dynamic_loading": [
        "Ldalvik/system/DexClassLoader;-><init>",
        "Ldalvik/system/PathClassLoader;-><init>",
        "Ldalvik/system/InMemoryDexClassLoader;-><init>",
        "Ldalvik/system/BaseDexClassLoader;-><init>",
        "Ljava/lang/Runtime;->exec",
        "Ljava/lang/ProcessBuilder;->start",
    ],
    "telephony": [
        "Landroid/telephony/TelephonyManager;->getDeviceId",
        "Landroid/telephony/TelephonyManager;->getSubscriberId",
        "Landroid/telephony/TelephonyManager;->getLine1Number",
        "Landroid/telephony/TelephonyManager;->getSimSerialNumber",
        "Landroid/telephony/TelephonyManager;->getNetworkOperator",
        "Landroid/telephony/TelephonyManager;->getSimOperator",
    ],
    "sms": [
        "Landroid/telephony/SmsManager;->sendTextMessage",
        "Landroid/telephony/SmsManager;->sendMultipartTextMessage",
        "Landroid/telephony/SmsManager;->sendDataMessage",
    ],
    "network": [
        "Ljava/net/HttpURLConnection;->connect",
        "Ljava/net/URL;->openConnection",
        "Lokhttp3/OkHttpClient;-><init>",
        "Lokhttp3/Request$Builder;->build",
        "Lorg/apache/http/client/HttpClient;->execute",
        "Landroid/webkit/WebView;->loadUrl",
        "Landroid/webkit/WebView;->setWebViewClient",
    ],
    "native": [
        "Ljava/lang/System;->loadLibrary",
        "Ljava/lang/System;->load",
        "Ljava/lang/Runtime;->loadLibrary",
    ],
    "device_info": [
        "Landroid/os/Build;->FINGERPRINT",
        "Landroid/os/Build;->MODEL",
        "Landroid/os/Build;->MANUFACTURER",
        "Landroid/os/Build;->PRODUCT",
        "Landroid/os/Build;->BRAND",
        "Landroid/os/Build;->DEVICE",
        "Landroid/os/Build;->HARDWARE",
        "Landroid/os/Build;->SERIAL",
        "Landroid/os/Build$VERSION;->SDK_INT",
        "Landroid/provider/Settings$Secure;->getString",
    ],
    "file_io": [
        "Ljava/io/FileOutputStream;-><init>",
        "Ljava/io/FileInputStream;-><init>",
        "Landroid/content/SharedPreferences;->edit",
        "Landroid/database/sqlite/SQLiteDatabase;->execSQL",
        "Landroid/database/sqlite/SQLiteDatabase;->rawQuery",
    ],
    "ipc": [
        "Landroid/content/ContentResolver;->query",
        "Landroid/content/ContentResolver;->insert",
        "Landroid/content/ContentResolver;->delete",
        "Landroid/content/Intent;-><init>",
        "Landroid/content/Context;->sendBroadcast",
        "Landroid/content/Context;->startService",
        "Landroid/content/Context;->bindService",
    ],
}


class APKDexExtractor(APKExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False,
        apk=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, apk,
        )
        self.dex_files = []
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _analyze_api_usage(self, dex):
        """Categorize sensitive API calls found in DEX bytecode."""
        api_usage = {cat: set() for cat in SENSITIVE_API_CATEGORIES}

        try:
            for method in dex.get_encoded_methods():
                code = method.get_code()
                if not code:
                    continue
                try:
                    bytecode = code.get_bc()
                    if not bytecode:
                        continue
                    for instruction in bytecode.get_instructions():
                        op_name = instruction.get_name()
                        if not op_name or not op_name.startswith("invoke"):
                            continue
                        output = instruction.get_output()
                        if not output:
                            continue
                        for category, patterns in SENSITIVE_API_CATEGORIES.items():
                            for pattern in patterns:
                                if pattern in output:
                                    api_usage[category].add(output.strip())
                                    break
                except Exception:
                    continue
        except Exception as e:
            self.log.warning(f"Error analyzing API usage: {e}")

        # Convert sets to sorted lists
        return {cat: sorted(calls) for cat, calls in api_usage.items() if calls}

    def _compute_obfuscation_indicators(self, classes, methods):
        """Compute obfuscation indicators from class/method names."""
        class_names = []
        for cls in classes:
            try:
                name = cls.get_name()
                if name:
                    class_names.append(name)
            except Exception:
                continue

        method_names = []
        for m in methods:
            try:
                name = m.get_name()
                if name and name not in ("<init>", "<clinit>"):
                    method_names.append(name)
            except Exception:
                continue

        if not class_names:
            return None

        # Short class names: extract just the class part from Dalvik notation
        short_class = 0
        for n in class_names:
            simple = n.split("/")[-1].rstrip(";")
            if len(simple) <= 2:
                short_class += 1

        short_method = sum(1 for n in method_names if len(n) <= 2)

        return {
            "short_class_names_pct": round(short_class / max(len(class_names), 1), 4),
            "short_method_names_pct": round(short_method / max(len(method_names), 1), 4),
            "non_ascii_identifiers": sum(1 for n in class_names if not n.isascii()),
            "avg_class_name_length": round(
                sum(len(n) for n in class_names) / max(len(class_names), 1), 2
            ),
        }

    def _compute_top_packages(self, classes):
        """Compute top packages by class count."""
        package_counter = Counter()
        for cls in classes:
            try:
                name = cls.get_name()  # "Lcom/example/foo/Bar;"
                if not name:
                    continue
                parts = name[1:].replace("/", ".").rsplit(".", 1)
                if len(parts) > 1:
                    package = parts[0]
                else:
                    package = "(default)"
                package_counter[package] += 1
            except Exception:
                continue

        return [
            {"package": pkg, "class_count": count}
            for pkg, count in package_counter.most_common(20)
        ]

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        from androguard.core.dex import DEX

        try:
            dex_names = list(self.apk.get_dex_names() or [])
        except Exception as e:
            self.log.warning(f"Error getting DEX names for {self.hash.sha256}: {e}")
            dex_names = []

        try:
            dex_buffers = list(self.apk.get_all_dex() or [])
        except Exception as e:
            self.log.error(f"Error getting DEX buffers for {self.hash.sha256}: {e}")
            return None

        if not dex_buffers:
            self.log.debug("No DEX files found in APK")
            return None

        self.dex_files = []
        for i, dex_data in enumerate(dex_buffers):
            dex_name = dex_names[i] if i < len(dex_names) else f"classes{i}.dex"

            dex_sha256 = hashlib.sha256(dex_data).hexdigest()
            dex_tlsh = None
            if len(dex_data) >= 50:
                try:
                    dex_tlsh = tlsh.hash(dex_data) or None
                except Exception:
                    pass

            try:
                d = DEX(dex_data)
            except Exception as e:
                self.log.warning(f"Failed to parse DEX {dex_name}: {e}")
                continue

            try:
                classes = list(d.get_classes() or [])
            except Exception as e:
                self.log.warning(f"Error getting classes from {dex_name}: {e}")
                classes = []
            try:
                methods = list(d.get_methods() or [])
            except Exception as e:
                self.log.warning(f"Error getting methods from {dex_name}: {e}")
                methods = []
            try:
                strings = list(d.get_strings() or [])
            except Exception as e:
                self.log.warning(f"Error getting strings from {dex_name}: {e}")
                strings = []

            try:
                top_packages = self._compute_top_packages(classes)
            except Exception as e:
                self.log.warning(f"Error computing top packages for {dex_name}: {e}")
                top_packages = []
            try:
                api_usage = self._analyze_api_usage(d)
            except Exception as e:
                self.log.warning(f"Error analyzing API usage for {dex_name}: {e}")
                api_usage = {}
            try:
                obfuscation_indicators = self._compute_obfuscation_indicators(classes, methods)
            except Exception as e:
                self.log.warning(f"Error computing obfuscation indicators for {dex_name}: {e}")
                obfuscation_indicators = None

            self.dex_files.append(APKDexFile(
                filename=dex_name,
                sha256=dex_sha256,
                class_count=len(classes),
                method_count=len(methods),
                string_count=len(strings),
                tlsh=dex_tlsh,
                top_packages=top_packages,
                api_usage=api_usage if api_usage else None,
                obfuscation_indicators=obfuscation_indicators,
            ))

        return self.dex_files if self.dex_files else None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.dex_files:
                return None

            current_time = datetime.now(timezone.utc)

            # DEX table: one row per DEX file
            dex_data = []
            for dex in self.dex_files:
                dex_data.append([
                    self.sha256,
                    dex.sha256,
                    dex.filename,
                    dex.tlsh,
                    dex.class_count,
                    dex.method_count,
                    dex.string_count,
                    json.dumps(dex.top_packages) if dex.top_packages else None,
                    json.dumps(dex.obfuscation_indicators) if dex.obfuscation_indicators else None,
                    current_time,
                ])

            # API usage table: one row per category per DEX
            api_data = []
            for dex in self.dex_files:
                if dex.api_usage:
                    for category, api_calls in dex.api_usage.items():
                        api_data.append([
                            self.sha256,
                            dex.sha256,
                            category,
                            api_calls,
                            current_time,
                        ])

            return {
                'multi_table': True,
                'dex': {
                    'table': 'redb_apk_dex',
                    'data': dex_data,
                    'column_names': [
                        'sha256', 'dex_sha256', 'dex_filename', 'dex_tlsh',
                        'dex_class_count', 'dex_method_count', 'dex_string_count',
                        'dex_top_packages', 'dex_obfuscation_indicators',
                        'analysis_date',
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(64)', 'String', 'Nullable(String)',
                        'UInt32', 'UInt32', 'UInt32',
                        'Nullable(String)', 'Nullable(String)',
                        "DateTime64(3, 'UTC')",
                    ],
                },
                'api_usage': {
                    'table': 'redb_apk_dex_api_usage',
                    'data': api_data,
                    'column_names': [
                        'sha256', 'dex_sha256', 'api_category',
                        'api_calls', 'analysis_date',
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(64)', 'LowCardinality(String)',
                        'Array(String)', "DateTime64(3, 'UTC')",
                    ],
                },
            }

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