Ioana Manolescu

227 papers A* 26A 14B 24C 6Journal 64Unranked 76
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Antoine Gauquier, Ioana Manolescu, Pierre Senellart
2026 B conf
EDBT
Antoine Gauquier, Ioana Manolescu, Pierre Senellart
2025 J jnl
CoRR
Marijan Soric, Cécile Gracianne, Ioana Manolescu, Pierre Senellart
2025 conf
SIGMOD Conference Companion
Angelos-Christos G. Anadiotis, Muhammad Ghufran Khan, Ioana Manolescu
2025 J jnl
Inf. Syst.
Nelly Barret, Antoine Gauquier, Jia Jean Law, Ioana Manolescu
2025 B conf
CoopIS
Maxime Buron, Hritika Kathuria, Ioana Manolescu, George Siachamis
2025 conf
ACL (Findings)
Kun Zhang, Oana Balalau, Ioana Manolescu
2025 conf
EMNLP (Findings)
Garima Gaur, Oana Balalau, Ioana Manolescu, Prajna Upadhyay
2024 conf
VLDB Workshops
Théo Bouganim, Ioana Manolescu, Emmanuel Pietriga
2024 B conf
EDBT
Nelly Barret, Ioana Manolescu, Prajna Upadhyay
2024 J jnl
Proc. VLDB Endow.
Muhammad Ghufran Khan, Ioana Manolescu, Angelos-Christos G. Anadiotis
2024 conf
EGC
Nelly Barret, Simon Ebel, Théo Galizzi, Ioana Manolescu, Madhulika Mohanty
2024 A conf
CIKM
Oana Balalau, Pablo Bertaud-Velten, Younes El Fraihi, Garima Gaur, Oana Goga, Samuel S. Guimarães, Ioana Manolescu, Brahim Saadi
2024 conf
ICDEW
Nelly Barret, Tudor Enache, Ioana Manolescu, Madhulika Mohanty
2024 J jnl
Proc. VLDB Endow.
Manos Athanassoulis, Ioana Manolescu, Beng Chin Ooi, Themis Palpanas, Nesime Tatbul
2024 conf
ICDEW
Oana Balalau, Nelly Barret, Simon Ebel, Théo Galizzi, Ioana Manolescu, Madhulika Mohanty
2024 A conf
CIKM
Oana Balalau, Simon Ebel, Helena Galhardas, Théo Galizzi, Ioana Manolescu
2023 C conf
ADBIS
Nelly Barret, Antoine Gauquier, Jia Jean Law, Ioana Manolescu
2023 conf
EMNLP (Findings)
Kun Zhang, Oana Balalau, Ioana Manolescu
2023 J jnl
Proc. VLDB Endow.
Ioana Manolescu, Madhulika Mohanty
2023 A* conf
ICDE
Angelos-Christos G. Anadiotis, Ioana Manolescu, Madhulika Mohanty
2023 conf
ESWC (Satellite Events)
Angelos-Christos G. Anadiotis, Ioana Manolescu, Madhulika Mohanty
2023 conf
EACL (Findings)
Prajna Upadhyay, Oana Balalau, Ioana Manolescu
2023 conf
ESWC (Satellite Events)
Nelly Barret, Antoine Gauquier, Jia Jean Law, Ioana Manolescu
2023 B conf
CoopIS
Nelly Barret, Simon Ebel, Théo Galizzi, Ioana Manolescu, Madhulika Mohanty
2022 A conf
CIKM
Nelly Barret, Ioana Manolescu, Prajna Upadhyay
2022 J jnl
SIGMOD Rec.
Manos Athanassoulis, Peter Triantafillou, Raja Appuswamy, Rajesh Bordawekar, Badrish Chandramouli, Xuntao Cheng, Ioana Manolescu, Yannis Papakonstantinou, Nesime Tatbul
2022 J jnl
Trans. Large Scale Data Knowl. Centered Syst.
Théo Bouganim, Helena Galhardas, Ioana Manolescu
2022 conf
TTO
Oana Balalau, Simon Ebel, Théo Galizzi, Ioana Manolescu, Quentin Massonnat, Antoine Deiana, Emilie Gautreau, Antoine Krempf, Thomas Pontillon, Gérald Roux, Joanna Yakin
2022 J jnl
Inf. Syst.
Angelos-Christos G. Anadiotis, Oana Balalau, Catarina Conceição, Helena Galhardas, Mhd Yamen Haddad, Ioana Manolescu, Tayeb Merabti, Jingmao You
2022 J jnl
CoRR
Angelos-Christos G. Anadiotis, Ioana Manolescu, Madhulika Mohanty
2022 A conf
CIKM
Oana Balalau, Simon Ebel, Théo Galizzi, Ioana Manolescu, Quentin Massonnat, Antoine Deiana, Emilie Gautreau, Antoine Krempf, Thomas Pontillon, Gérald Roux, Joanna Yakin
2022 conf
DEBS
Ioana Manolescu
2021 A conf
CIKM
Angelos-Christos G. Anadiotis, Oana Balalau, Théo Bouganim, Francesco Chimienti, Helena Galhardas, Mhd Yamen Haddad, Stephane Horel, Ioana Manolescu, Youssr Youssef
2021 conf
SIGMOD Conference
Yanlei Diao, Pawel Guzewicz, Ioana Manolescu, Mirjana Mazuran
2021 J jnl
CoRR
Yanlei Diao, Pawel Guzewicz, Ioana Manolescu, Mirjana Mazuran
2021 J jnl
CoRR
Angelos-Christos G. Anadiotis, Oana Balalau, Théo Bouganim, Francesco Chimienti, Helena Galhardas, Mhd Yamen Haddad, Stephane Horel, Ioana Manolescu, Youssr Youssef
2021 J jnl
IEEE Data Eng. Bull.
Angelos-Christos G. Anadiotis, Oana Balalau, Théo Bouganim, Francesco Chimienti, Helena Galhardas, Mhd Yamen Haddad, Stephane Horel, Ioana Manolescu, Youssr Youssef
2021 J jnl
CoRR
Rana Alotaibi, Bogdan Cautis, Alin Deutsch, Ioana Manolescu
2021 conf
SIGMOD Conference
Rana Alotaibi, Bogdan Cautis, Alin Deutsch, Ioana Manolescu
2021 B ed.
ICWE
Marco Brambilla, Richard Chbeir, Flavius Frasincar, Ioana Manolescu
2020 conf
ASLD@ISWC
Guillaume Thiry, Ioana Manolescu, Leo Liberti
2020 book
Zoi Kaoudi, Ioana Manolescu, Stamatis Zampetakis
2020 J jnl
Proc. VLDB Endow.
Rana Alotaibi, Bogdan Cautis, Alin Deutsch, Moustafa Latrache, Ioana Manolescu, Yifei Yang
2020 C conf
DOLAP
Ioana Manolescu
2020 C conf
DATA
Ioana Manolescu
2020 J jnl
CoRR
Oana Balalau, Catarina Conceição, Helena Galhardas, Ioana Manolescu, Tayeb Merabti, Jingmao You, Youssr Youssef
2020 J jnl
CoRR
Angelos-Christos G. Anadiotis, Oana Balalau, Catarina Conceição, Helena Galhardas, Mhd Yamen Haddad, Ioana Manolescu, Tayeb Merabti, Jingmao You
2020 J jnl
CoRR
Mhd Yamen Haddad, Angelos-Christos G. Anadiotis, Yamen Mhd, Ioana Manolescu
2020 C conf
ADBIS
Ioana Manolescu
2020 J jnl
Proc. VLDB Endow.
Maxime Buron, François Goasdoué, Ioana Manolescu, Marie-Laure Mugnier
2020 B conf
EDBT
Maxime Buron, François Goasdoué, Ioana Manolescu, Marie-Laure Mugnier
2020 J jnl
VLDB J.
François Goasdoué, Pawel Guzewicz, Ioana Manolescu
2020 conf
SSWS@ISWC
Maxime Buron, François Goasdoué, Ioana Manolescu, Tayeb Merabti, Marie-Laure Mugnier
2020 conf
EDBT/ICDT Workshops
Irène Burger, Ioana Manolescu, Emmanuel Pietriga, Fabian M. Suchanek
2019 conf
WWW (Companion Volume)
Ludivine Duroyon, François Goasdoué, Ioana Manolescu
2019 A conf
CIKM
Tien Duc Cao, Ludivine Duroyon, François Goasdoué, Ioana Manolescu, Xavier Tannier
2019 conf
EGC
Ioana Manolescu
2019 C conf
NLDB
Tien Duc Cao, Ioana Manolescu, Xavier Tannier
2019 B conf
EDBT
François Goasdoué, Pawel Guzewicz, Ioana Manolescu
2019 conf
SBD@SIGMOD
Pawel Guzewicz, Ioana Manolescu
2019 B conf
EDBT
Haridimos Kondylakis, Dimitris Kotzinos, Ioana Manolescu
2019 B conf
ESWC
Maxime Buron, François Goasdoué, Ioana Manolescu, Marie-Laure Mugnier
2019 J jnl
Proc. VLDB Endow.
Yanlei Diao, Pawel Guzewicz, Ioana Manolescu, Mirjana Mazuran
2019 conf
EDBT/ICDT Workshops
Ioana Manolescu, Mirjana Mazuran
2019 J jnl
VLDB J.
Sejla Cebiric, François Goasdoué, Haridimos Kondylakis, Dimitris Kotzinos, Ioana Manolescu, Georgia Troullinou, Mussab Zneika
2019 conf
SIGMOD Conference
Rana Alotaibi, Damian Bursztyn, Alin Deutsch, Ioana Manolescu, Stamatis Zampetakis
2018 conf
WWW (Companion Volume)
Sylvie Cazalens, Philippe Lamarre, Julien Leblay, Ioana Manolescu, Xavier Tannier
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Denilson Barbosa, Ioana Manolescu, Jeffrey Xu Yu
2018 conf
ISWC (2)
Emmanuel Pietriga, Hande Gözükan, Caroline Appert, Marie Destandau, Sejla Cebiric, François Goasdoué, Ioana Manolescu
2018 J jnl
Proc. VLDB Endow.
Sylvie Cazalens, Julien Leblay, Ioana Manolescu, Philippe Lamarre, Xavier Tannier
2018 J jnl
Proc. VLDB Endow.
Camille Chanial, Rédouane Dziri, Helena Galhardas, Julien Leblay, Minh-Huong Le Nguyen, Ioana Manolescu
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Denilson Barbosa, Ioana Manolescu, Jeffrey Xu Yu
2018 conf
ICDE Workshops
Pawel Guzewicz, Ioana Manolescu
2018 conf
WebDB
Tien Duc Cao, Ioana Manolescu, Xavier Tannier
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Denilson Barbosa, Ioana Manolescu, Jeffrey Xu Yu
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Denilson Barbosa, Philip Bohannon, Juliana Freire, Carl-Christian Kanne, Ioana Manolescu, Vasilis Vassalos, Masatoshi Yoshikawa
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Ioana Manolescu, Yannis Papakonstantinou, Vasilis Vassalos
2017 conf
ISWC (Posters, Demos & Industry Tracks)
Sejla Cebiric, François Goasdoué, Ioana Manolescu
2017 J jnl
ERCIM News
Ioana Manolescu
2017 conf
ISWC (Posters, Demos & Industry Tracks)
Yanlei Diao, Ioana Manolescu, Shu Shang
2017 conf
SBD@SIGMOD
Tien Duc Cao, Ioana Manolescu, Xavier Tannier
2016 A* conf
ICDE
Francesca Bugiotti, Damian Bursztyn, Alin Deutsch, Ioana Manolescu, Stamatis Zampetakis
2016 J jnl
Proc. VLDB Endow.
Raphaël Bonaque, Tien Duc Cao, Bogdan Cautis, François Goasdoué, Javier Letelier, Ioana Manolescu, Oscar Mendoza, Swen Ribeiro, Xavier Tannier, Michaël Thomazo
2016 conf
ISWC (Posters & Demos)
Damian Bursztyn, François Goasdoué, Ioana Manolescu
2016 B ed.
EDBT
Evaggelia Pitoura, Sofian Maabout, Georgia Koutrika, Amélie Marian, Letizia Tanca, Ioana Manolescu, Kostas Stefanidis
2016 B ed.
SSDBM
Peter Baumann, Ioana Manolescu, Luca Trani, Yannis E. Ioannidis, Gergely Gábor Barnaföldi, László Dobos, Evelin Bányai
2016 A conf
CIKM
Jesús Camacho-Rodríguez, Dario Colazzo, Melanie Herschel, Ioana Manolescu, Soudip Roy Chowdhury
2016 B conf
EDBT
Raphaël Bonaque, Bogdan Cautis, François Goasdoué, Ioana Manolescu
2016 J jnl
Proc. VLDB Endow.
Damian Bursztyn, François Goasdoué, Ioana Manolescu
2015 A* conf
ICDE
Benjamin Djahandideh, François Goasdoué, Zoi Kaoudi, Ioana Manolescu, Jorge-Arnulfo Quiané-Ruiz, Stamatis Zampetakis
2015 A* conf
ICDE
François Goasdoué, Zoi Kaoudi, Ioana Manolescu, Jorge-Arnulfo Quiané-Ruiz, Stamatis Zampetakis
2015 conf
SEBD
Ioana Manolescu
2015 conf
ICDE Workshops
Elham Akbari Azirani, François Goasdoué, Ioana Manolescu, Alexandra Roatis
2015 conf
Description Logics
Damian Bursztyn, François Goasdoué, Ioana Manolescu
2015 A conf
CIDR
Francesca Bugiotti, Damian Bursztyn, Alin Deutsch, Ioana Ileana, Ioana Manolescu
2015 B conf
EDBT
Damian Bursztyn, François Goasdoué, Ioana Manolescu
2015 J jnl
IEEE Trans. Knowl. Data Eng.
Jesús Camacho-Rodríguez, Dario Colazzo, Ioana Manolescu
2015 conf
SIGMOD Conference
Jesús Camacho-Rodríguez, Dario Colazzo, Ioana Manolescu, Juan Álvaro Muñoz Naranjo
2015 conf
BICOD
Sejla Cebiric, François Goasdoué, Ioana Manolescu
2015 J jnl
Proc. VLDB Endow.
Sejla Cebiric, François Goasdoué, Ioana Manolescu
2015 J jnl
VLDB J.
Zoi Kaoudi, Ioana Manolescu
2015 A* conf
ICDE
Damian Bursztyn, François Goasdoué, Ioana Manolescu, Alexandra Roatis
2015 J jnl
Proc. VLDB Endow.
Damian Bursztyn, François Goasdoué, Ioana Manolescu
2015 conf
SEBD
Francesca Bugiotti, Damian Bursztyn, Alin Deutsch, Ioana Ileana, Ioana Manolescu
2014 J jnl
Ingénierie des Systèmes d Inf.
Dario Colazzo, François Goasdoué, Ioana Manolescu, Alexandra Roatis
2014 conf
SIGMOD Conference
Zoi Kaoudi, Ioana Manolescu
2014 conf
DanaC@SIGMOD
Jesús Camacho-Rodríguez, Dario Colazzo, Ioana Manolescu
2014 A* conf
WWW
Dario Colazzo, François Goasdoué, Ioana Manolescu, Alexandra Roatis
2014 ch.
Linked Data Management
Francesca Bugiotti, Jesús Camacho-Rodríguez, François Goasdoué, Zoi Kaoudi, Ioana Manolescu, Stamatis Zampetakis
2014 conf
SDSW@ISWC
Raphaël Bonaque, Bogdan Cautis, François Goasdoué, Ioana Manolescu
2013 J jnl
ACM Trans. Database Syst.
Angela Bonifati, Martin Hugh Goodfellow, Ioana Manolescu, Domenica Sileo
2013 J jnl
Proc. VLDB Endow.
Konstantinos Karanasos, Asterios Katsifodimos, Ioana Manolescu
2013 B conf
EDBT
François Goasdoué, Ioana Manolescu, Alexandra Roatis
2013 conf
SIGMOD Conference
François Goasdoué, Konstantinos Karanasos, Yannis Katsis, Julien Leblay, Ioana Manolescu, Stamatis Zampetakis
2013 J jnl
VLDB J.
François Goasdoué, Konstantinos Karanasos, Yannis Katsis, Julien Leblay, Ioana Manolescu, Stamatis Zampetakis
2013 J jnl
Ingénierie des Systèmes d Inf.
Ioana Manolescu
2013 A* conf
ICDE
Zoi Kaoudi, Ioana Manolescu
2013 B conf
EDBT
Jesús Camacho-Rodríguez, Dario Colazzo, Ioana Manolescu
2012 B ed.
EDBT
Elke A. Rundensteiner, Volker Markl, Ioana Manolescu, Sihem Amer-Yahia, Felix Naumann, Ismail Ari
2012 A conf
CIKM
Andrés Aranda-Andújar, Francesca Bugiotti, Jesús Camacho-Rodríguez, Dario Colazzo, François Goasdoué, Zoi Kaoudi, Ioana Manolescu
2012 conf
ICDE Workshops
Jesús Camacho-Rodríguez, Dario Colazzo, Ioana Manolescu
2012 J jnl
Ingénierie des Systèmes d Inf.
François Goasdoué, Konstantinos Karanasos, Yannis Katsis, Julien Leblay, Ioana Manolescu, Stamatis Zampetakis
2012 conf
WWW (Companion Volume)
François Goasdoué, Ioana Manolescu, Alexandra Roatis
2012 conf
SIGMOD Conference
Asterios Katsifodimos, Ioana Manolescu, Vasilis Vassalos
2012 J jnl
CoRR
Guillaume Raschia, Martin Theobald, Ioana Manolescu
2012 conf
EDBT/ICDT Workshops
Francesca Bugiotti, François Goasdoué, Zoi Kaoudi, Ioana Manolescu
2012 B conf
ICWE
Konstantinos Karanasos, Asterios Katsifodimos, Ioana Manolescu, Spyros Zoupanos
2011 B conf
EDBT
Angela Bonifati, Martin Hugh Goodfellow, Ioana Manolescu, Domenica Sileo
2011 A* conf
ICDE
Véronique Benzaken, Jean-Daniel Fekete, Pierre-Luc Hemery, Wael Khemiri, Ioana Manolescu
2011 A* conf
ICDE
Ioana Manolescu, Konstantinos Karanasos, Vasilis Vassalos, Spyros Zoupanos
2011 conf
VLDS
François Goasdoué, Konstantinos Karanasos, Yannis Katsis, Julien Leblay, Ioana Manolescu, Stamatis Zampetakis
2011 J jnl
CoRR
Konstantinos Karanasos, Asterios Katsifodimos, Ioana Manolescu, Spyros Zoupanos
2011 J jnl
CoRR
François Goasdoué, Konstantinos Karanasos, Julien Leblay, Ioana Manolescu
2011 J jnl
Proc. VLDB Endow.
François Goasdoué, Konstantinos Karanasos, Julien Leblay, Ioana Manolescu
2011 book
Serge Abiteboul, Ioana Manolescu, Philippe Rigaux, Marie-Christine Rousset, Pierre Senellart
2011 J jnl
CoRR
Benjamin Nguyen, Antoine Vion, François-Xavier Dudouet, Dario Colazzo, Ioana Manolescu, Pierre Senellart
2010 B ed.
EDBT
Ioana Manolescu, Stefano Spaccapietra, Jens Teubner, Masaru Kitsuregawa, Alain Léger, Felix Naumann, Anastasia Ailamaki, Fatma Özcan
2010 J jnl
CoRR
Jesús Camacho-Rodríguez, Asterios Katsifodimos, Ioana Manolescu, Alexandra Roatis
2010 A conf
CIKM
Jesús Camacho-Rodríguez, Asterios Katsifodimos, Ioana Manolescu, Alexandra Roatis
2010 A* ed.
ICDE
Feifei Li, Mirella M. Moro, Shahram Ghandeharizadeh, Jayant R. Haritsa, Gerhard Weikum, Michael J. Carey, Fabio Casati, Edward Y. Chang, Ioana Manolescu, Sharad Mehrotra, Umeshwar Dayal, Vassilis J. Tsotras
2010 J jnl
CoRR
François Goasdoué, Konstantinos Karanasos, Julien Leblay, Ioana Manolescu
2010 A conf
CIKM
François Goasdoué, Konstantinos Karanasos, Julien Leblay, Ioana Manolescu
2010 J jnl
CoRR
Benjamin Nguyen, François-Xavier Dudouet, Dario Colazzo, Antoine Vion, Ioana Manolescu, Pierre Senellart
2010 J jnl
Tech. Sci. Informatiques
Benjamin Nguyen, Antoine Vion, François-Xavier Dudouet, Dario Colazzo, Ioana Manolescu
2009 ch.
Encyclopedia of Database Systems
Denilson Barbosa, Ioana Manolescu, Jeffrey Xu Yu
2009 book
Ioana Manolescu
2009 conf
SeCO Workshop
Alessandro Bozzon, Marco Brambilla, Stefano Ceri, Piero Fraternali, Ioana Manolescu
2009 ch.
Encyclopedia of Database Systems
Denilson Barbosa, Ioana Manolescu, Jeffrey Xu Yu
2009 B conf
EDBT
Stefan Manegold, Ioana Manolescu
2009 J jnl
SIGMOD Rec.
Stefan Manegold, Ioana Manolescu, Loredana Afanasiev, Jianlin Feng, Gang Gou, Marios Hadjieleftheriou, Stavros Harizopoulos, Panos Kalnis, Konstantinos Karanasos, Dominique Laurent, Mihai Lupu, Nicola Onose, Christopher Ré, Virginie Sans, Pierre Senellart, Tina Wu, Dennis E. Shasha
2009 ch.
Encyclopedia of Database Systems
Denilson Barbosa, Ioana Manolescu, Jeffrey Xu Yu
2009 ch.
Encyclopedia of Database Systems
Denilson Barbosa, Philip Bohannon, Juliana Freire, Carl-Christian Kanne, Ioana Manolescu, Vasilis Vassalos, Masatoshi Yoshikawa
2009 ch.
Encyclopedia of Database Systems
Ioana Manolescu, Yannis Papakonstantinou, Vasilis Vassalos
2008 B ed.
EDBT
Alfons Kemper, Patrick Valduriez, Noureddine Mouaddib, Jens Teubner, Mokrane Bouzeghoub, Volker Markl, Laurent Amsaleg, Ioana Manolescu
2008 J jnl
Inf. Syst.
Ioana Manolescu, Philippe Bonnet
2008 B conf
ICWE
Serge Abiteboul, Ioana Manolescu, Spyros Zoupanos
2008 A* conf
ICDE
Serge Abiteboul, Ioana Manolescu, Spyros Zoupanos
2008 conf
Structure-Based Compression of Complex Massive Data
Andrei Arion, Angela Bonifati, Ioana Manolescu, Andrea Pugliese
2008 J jnl
World Wide Web
Andrei Arion, Angela Bonifati, Ioana Manolescu, Andrea Pugliese
2008 A ed.
CIKM
James G. Shanahan, Sihem Amer-Yahia, Ioana Manolescu, Yi Zhang, David A. Evans, Aleksander Kolcz, Key-Sun Choi, Abdur Chowdhury
2008 conf
Structure-Based Compression of Complex Massive Data
Andrei Arion, Angela Bonifati, Ioana Manolescu, Andrea Pugliese
2008 J jnl
SIGMOD Rec.
Ioana Manolescu, Loredana Afanasiev, Andrei Arion, Jens Dittrich, Stefan Manegold, Neoklis Polyzotis, Karl Schnaitter, Pierre Senellart, Spyros Zoupanos, Dennis E. Shasha
2008 J jnl
Inf. Syst.
Philippe Michiels, Ioana Manolescu, Cédric Miachon
2008 J jnl
Proc. VLDB Endow.
Serge Abiteboul, Tristan Allard, Philippe Chatalic, Georges Gardarin, A. Ghitescu, François Goasdoué, Ioana Manolescu, Benjamin Nguyen, M. Ouazara, A. Somani, Nicolas Travers, Gabriel Vasile, Spyros Zoupanos
2008 A* conf
ICDE
Serge Abiteboul, Ioana Manolescu, Neoklis Polyzotis, Nicoleta Preda, Chong Sun
2007 A conf
CAiSE
Melanie Weis, Ioana Manolescu
2007 A* conf
ICDE
Bogdan Butnaru, Florin Dragan, Georges Gardarin, Ioana Manolescu, Benjamin Nguyen, Radu Pop, Nicoleta Preda, Laurent Yeh
2007 A* conf
VLDB
Ioana Manolescu, Stefan Manegold
2007 A* conf
VLDB
Andrei Arion, Véronique Benzaken, Ioana Manolescu, Yannis Papakonstantinou
2007 A conf
CIDR
Melanie Weis, Ioana Manolescu
2007 conf
BDA
Serge Abiteboul, Ioana Manolescu, Neoklis Polyzotis, Nicoleta Preda, Chong Sun
2007 J jnl
ACM Trans. Internet Techn.
Andrei Arion, Angela Bonifati, Ioana Manolescu, Andrea Pugliese
2006 B conf
EDBT
Serge Abiteboul, Ioana Manolescu, Emanuel Taropa
2006 C conf
FQAS
Andrei Arion, Véronique Benzaken, Ioana Manolescu, Yannis Papakonstantinou, Ravi Vijay
2006 J jnl
CoRR
Andrei Arion, Angela Bonifati, Ioana Manolescu, Andrea Pugliese
2006 A* conf
WWW
Andrei Arion, Angela Bonifati, Ioana Manolescu, Andrea Pugliese
2006 ed.
ExpDB
Philippe Bonnet, Ioana Manolescu
2006 J jnl
ACM Trans. Softw. Eng. Methodol.
Marco Brambilla, Stefano Ceri, Piero Fraternali, Ioana Manolescu
2006 conf
BDA
Ioana Manolescu, Véronique Benzaken, Andrei Arion, Yannis Papakonstantinou
2006 conf
ExpDB
Ioana Manolescu, Cédric Miachon, Philippe Michiels
2005 A* conf
ICDE
Serge Abiteboul, Ioana Manolescu, Nicoleta Preda
2005 conf
XSym
Loredana Afanasiev, Ioana Manolescu, Philippe Michiels
2005 J jnl
ACM Trans. Internet Techn.
Ioana Manolescu, Marco Brambilla, Stefano Ceri, Sara Comai, Piero Fraternali
2005 conf
BDA
Serge Abiteboul, Ioana Manolescu, Nicoleta Preda
2005 A* conf
VLDB
Andrei Arion, Véronique Benzaken, Ioana Manolescu, Ravi Vijay
2005 J jnl
Ingénierie des Systèmes d Inf.
Ioana Manolescu, Andrei Arion, Angela Bonifati, Andrea Pugliese
2005 conf
XIME-P
Andrei Arion, Véronique Benzaken, Ioana Manolescu
2005 A* conf
ICDE
Ioana Manolescu, Yannis Papakonstantinou
2004 conf
INEX
Serge Abiteboul, Ioana Manolescu, Benjamin Nguyen, Nicoleta Preda
2004 ch.
Web Dynamics
Serge Abiteboul, Omar Benjelloun, Ioana Manolescu, Tova Milo, Roger Weber
2004 conf
SWDB
Serge Abiteboul, Ioana Manolescu, Nicoleta Preda
2004 conf
SIGMOD Conference
Marco Brambilla, Stefano Ceri, Sara Comai, Marco Dario, Piero Fraternali, Ioana Manolescu
2004 B conf
EDBT
Andrei Arion, Angela Bonifati, Gianni Costa, Sandra D'Aguanno, Ioana Manolescu, Andrea Pugliese
2004 conf
SIGMOD Conference
Serge Abiteboul, Omar Benjelloun, Bogdan Cautis, Ioana Manolescu, Tova Milo, Nicoleta Preda
2004 conf
BDA
Ioana Manolescu, Andrei Arion, Angela Bonifati, Andrea Pugliese
2004 conf
BDA
Serge Abiteboul, Ioana Manolescu, Nicoleta Preda
2004 ed.
XIME-P
Ioana Manolescu, Yannis Papakonstantinou
2004 J jnl
SIGMOD Rec.
Zachary G. Ives, Bertram Ludäscher, Ioana Manolescu
2004 J jnl
SIGMOD Rec.
Ioana Manolescu, Yannis Papakonstantinou
2004 conf
SBBD
Nicolaas Ruberg, Gabriela Ruberg, Ioana Manolescu
2004 conf
EDBT Workshops
Minos N. Garofalakis, Ioana Manolescu, Marco Mesiti, George A. Mihaila, Ralf Schenkel, Bhavani Thuraisingham, Vasilis Vassalos
2004 conf
SBBD
Ioana Manolescu
2003 A* conf
VLDB
Stefano Ceri, Ioana Manolescu
2003 conf
SIGMOD Conference
Serge Abiteboul, Angela Bonifati, Gregory Cobena, Ioana Manolescu, Tova Milo
2003 conf
WWW (Posters)
Ioana Manolescu, Stefano Ceri, Marco Brambilla, Piero Fraternali, Sara Comai
2003 J jnl
Tech. Sci. Informatiques
Ioana Manolescu, Luc Bouganim, Françoise Fabret, Eric Simon
2003 A* conf
VLDB
Serge Abiteboul, Jérôme Baumgarten, Angela Bonifati, Gregory Cobena, Cosmin Cremarenco, Florin Dragan, Ioana Manolescu, Tova Milo, Nicoleta Preda
2003 J jnl
J. Web Eng.
Marco Brambilla, Stefano Ceri, Sara Comai, Piero Fraternali, Ioana Manolescu
2003 conf
WWW (Posters)
Marco Brambilla, Stefano Ceri, Sara Comai, Piero Fraternali, Ioana Manolescu
2003 conf
SBBD
Alberto Lerner, Ioana Manolescu
2003 A* conf
VLDB
Andrei Arion, Angela Bonifati, Gianni Costa, Sandra D'Aguanno, Ioana Manolescu, Andrea Pugliese
2002 conf
BDA
Serge Abiteboul, Omar Benjelloun, Ioana Manolescu, Tova Milo, Roger Weber
2002 A* conf
VLDB
Serge Abiteboul, Omar Benjelloun, Ioana Manolescu, Tova Milo, Roger Weber
2002 conf
EEXTT
Albrecht Schmidt, Florian Waas, Martin L. Kersten, Michael J. Carey, Ioana Manolescu, Ralph Busse
2002 conf
BDA
Ioana Manolescu, Luc Bouganim, Françoise Fabret, Eric Simon
2002 conf
OTM
Ioana Manolescu, Luc Bouganim, Françoise Fabret, Eric Simon
2002 J jnl
IEEE Data Eng. Bull.
Marco Brambilla, Stefano Ceri, Sara Comai, Piero Fraternali, Ioana Manolescu
2002 A* conf
VLDB
Albrecht Schmidt, Florian Waas, Martin L. Kersten, Michael J. Carey, Ioana Manolescu, Ralph Busse
2001 A* conf
VLDB
Ioana Manolescu, Daniela Florescu, Donald Kossmann
2001 conf
BDA
Ioana Manolescu, Daniela Florescu, Donald Kossmann
2001 J jnl
SIGMOD Rec.
Albrecht Schmidt, Florian Waas, Martin L. Kersten, Daniela Florescu, Michael J. Carey, Ioana Manolescu, Ralph Busse
2000 A* conf
VLDB
Ioana Manolescu, Daniela Florescu, Donald Kossmann, Florian Xhumari, Dan Olteanu
2000 conf
BDA
Daniela Florescu, Donald Kossmann, Ioana Manolescu
2000 J jnl
Comput. Networks
Daniela Florescu, Donald Kossmann, Ioana Manolescu
1999 conf
Proc. 15èmes Journées Bases de Données Avancées, BDA
Daniela Florescu, Alon Y. Levy, Ioana Manolescu, Dan Suciu
1999 conf
SIGMOD Conference
Daniela Florescu, Alon Y. Levy, Ioana Manolescu, Dan Suciu
APK_CODE_ANALYSIS_PDD.md
← Index APK_CODE_ANALYSIS_PDD.md markdown
# APK Code Analysis — Product Design Document

**Author:** Engineering Team
**Date:** 2026-03-07
**Status:** Draft
**Target:** redb ingestor pipeline
**Depends on:** APK_FEATURES_PDD.md (APK static analysis extractors — implemented)

---

## 1. Overview

This document describes the design for adding **DEX code analysis** (decompilation, disassembly, call graphs, cross-references, and function similarity) to the redb ingestor pipeline. This is the Android equivalent of the Binary Ninja code analysis pipeline that exists for PE and ELF binaries.

### 1.1 Goals

- Decompile and disassemble APK DEX bytecode at the **method level**, producing per-method content and reference records analogous to the Binary Ninja `code_binja_*` tables
- Extract **call graphs and cross-references** (caller/callee relationships) for each method
- Compute **function similarity hashes** (SHA-256, ssdeep, TLSH, MinHash) for method-level clustering and hunting
- **Filter out library/framework code** to focus on user-written application logic — same philosophy as the `is_lib_or_thunk()` filter in Binary Ninja analysis
- Produce **decompiled Java source** (via JADX) and **smali disassembly** (via apktool) for each method, following the content/reference split pattern used by Binary Ninja tables
- Integrate with the existing APK extractor pipeline (runs after the Phase 1 APK extractors from `APK_FEATURES_PDD.md`)

### 1.2 Non-Goals

- **Native .so library analysis** — These are equivalent to external DLLs/shared libraries in PE/ELF. They are catalogued by `APKNativeLibExtractor` but not decompiled. If deep native analysis is needed, the existing ELF pipeline can be used on extracted `.so` files in a future phase.
- **Dynamic analysis / emulation** — Out of scope
- **Full APK repackaging / patching** — We use apktool for disassembly only, not rebuild
- **Inter-procedural data-flow analysis** (e.g., FlowDroid taint tracking) — Future consideration

### 1.3 Relationship to Existing Work

| Existing | New (this PDD) |
|----------|----------------|
| `APK_FEATURES_PDD.md` — APK metadata, manifest, permissions, certificates, DEX summary, resources, native libs | DEX **code-level** analysis: per-method decompilation, disassembly, call graphs, similarity hashes |
| `DecompileBinja` — PE/ELF code analysis via Binary Ninja | `DecompileAPK` — APK/DEX code analysis via androguard + JADX + apktool |
| `code_binja_*` ClickHouse tables | `code_apk_*` ClickHouse tables (same content/reference split pattern) |

---

## 2. Background

### 2.1 DEX Bytecode vs Native Code

| Aspect | PE/ELF (Binary Ninja) | APK/DEX (This PDD) |
|--------|----------------------|---------------------|
| Code format | Machine code (x86, ARM) | Dalvik bytecode (register-based VM) |
| Basic unit | Function (by address) | Method (by class + signature) |
| Disassembly | x86/ARM mnemonics | Smali (Dalvik assembly) |
| Decompilation | Pseudo-C (HLIL) | Java source code |
| Library filtering | `is_lib_or_thunk()` — symbol type | Package prefix filtering (e.g., `android.*`, `androidx.*`, `com.google.*`) |
| Similarity hashing | SHA-256 of normalized disassembly | SHA-256 of normalized smali |

### 2.2 Tool Selection

Three tools are combined to replicate the Binary Ninja analysis depth:

| Tool | Role | Integration | License |
|------|------|-------------|---------|
| **Androguard** (Python library) | Method enumeration, call graphs, cross-references, bytecode access, permissions analysis | Direct Python import — `from androguard.misc import AnalyzeAPK` | Apache 2.0 |
| **JADX** (Java CLI) | High-quality Java decompilation (equivalent to Binary Ninja HLIL) | subprocess (following CAPA/DIE pattern) | Apache 2.0 |
| **apktool** (Java CLI) | Smali disassembly with resource decoding (equivalent to Binary Ninja disassembly) | subprocess (following CAPA/DIE pattern) | Apache 2.0 |

**Why all three:**
- **Androguard** is the analysis engine — it provides call graphs, xrefs, and method enumeration natively in Python. However, its decompiler (DAD) produces lower-quality Java than JADX.
- **JADX** produces the best Java decompilation available. It is the industry standard for Android reverse engineering (47k+ GitHub stars).
- **apktool** produces canonical smali output with decoded resources. While androguard can access bytecode, apktool's smali output is the standard interchange format for Android RE.

### 2.3 Library Filtering Strategy

Native `.so` libraries are **not reverse-engineered** — they are equivalent to external DLLs in PE or shared libraries in ELF, and are already inventoried by `APKNativeLibExtractor`.

For DEX code, we filter out **framework/library packages** to focus on user-written code. This is the Android equivalent of `is_lib_or_thunk()` in the Binary Ninja pipeline.

**Default filter list** (configurable via environment variable `APK_LIBRARY_PREFIXES`):

```
android.*              # Android SDK
androidx.*             # AndroidX support libraries
com.google.android.*   # Google Play Services, Firebase
com.google.firebase.*  # Firebase
com.google.gson.*      # Gson JSON library
com.google.protobuf.*  # Protocol Buffers
kotlin.*               # Kotlin stdlib
kotlinx.*              # Kotlin extensions
org.apache.*           # Apache Commons
com.squareup.*         # OkHttp, Retrofit, Moshi
io.reactivex.*         # RxJava
org.reactivestreams.*  # Reactive Streams
com.facebook.*         # Facebook SDK
com.crashlytics.*      # Crashlytics
io.fabric.*            # Fabric
org.junit.*            # Test frameworks
org.mockito.*          # Test frameworks
```

Methods in filtered packages are still counted in call graph edges (caller/callee arrays) but their content is not stored in content tables. This mirrors how Binary Ninja records calls to library functions in `functions_caller`/`functions_call` arrays without decompiling the library functions themselves.

### 2.4 Packer Detection

Packer/protector detection for APKs uses **DetectItEasy (DIE)**, consistent with how packer detection works for PE/ELF/Mach-O in the existing pipeline. DIE already has signatures for common Android packers (Qihoo 360, Bangcle, Ijiami, Tencent Legu, Baidu, etc.).

The existing `DIEExtractor` runs as a format-agnostic extractor before format-specific analysis and requires no changes.

---

## 3. Architecture

### 3.1 Extractor Class Hierarchy

```
Extractor (redb/extractors/extractor.py)
└── DecompileAPK (NEW — redb/extractors/decompiler/DecompileAPK.py)
    ├── Uses: APKCodeAnalyzer (NEW — redb/extractors/decompiler/apk/analyzer.py)
    │   ├── AndroguardAnalysis — call graphs, xrefs, method enumeration
    │   ├── JADXDecompiler — Java decompilation (subprocess)
    │   └── ApktoolDisassembler — smali extraction (subprocess)
    └── Produces: multi_table ClickHouse export (same pattern as DecompileBinja)
```

**Design rationale:** `DecompileAPK` extends `Extractor` directly (not `APKExtractor`) because it follows the `DecompileBinja` pattern — a standalone extractor with its own analysis engine, rather than an APK metadata extractor that shares a parsed `APK` object. The APK parsing object from androguard is used internally but not shared with other extractors.

### 3.2 Analysis Pipeline Flow

```
APK file
  │
  ├─[1]─► apktool d <apk> ─► smali files on disk (temp dir)
  │
  ├─[2]─► jadx <apk> --no-res ─► Java source files on disk (temp dir)
  │
  └─[3]─► androguard AnalyzeAPK() ─► Analysis object (in-memory)
              │
              ├── Method enumeration ──► filter library packages
              │
              ├── For each user method:
              │     ├── Read smali from apktool output [1]
              │     ├── Read Java source from JADX output [2]
              │     ├── Get xrefs from Analysis object [3]
              │     ├── Compute content hashes (SHA-256 of smali, SHA-256 of Java)
              │     ├── Compute similarity hashes (ssdeep, TLSH of smali)
              │     └── Emit content + reference records
              │
              └── Call graph export ──► caller/callee arrays per method
```

Steps [1], [2], and [3] run in parallel (apktool and JADX as subprocess, androguard in-process). All three must complete before per-method analysis begins.

### 3.3 Content/Reference Split Pattern

Following the Binary Ninja schema pattern exactly:

- **Content tables** — Keyed by `function_hash` (SHA-256 of the method content). Deduplicated: if two APKs share identical method code, only one content record exists.
- **Reference tables** — Keyed by `(sha256, method_hash)`. Links a specific binary to its methods. Contains per-binary metadata (method name, class, address, callers, callees, fuzzy hashes).

This is the same pattern as `code_binja_decompiled_functions_content` / `code_binja_decompiled_functions_references`.

### 3.4 Method-Level Hashing

Hashing is computed at the **method level** for consistency with the Binary Ninja pipeline:

| Hash | Input | Purpose |
|------|-------|---------|
| `decompiled_method_hash` | SHA-256 of decompiled Java source (whitespace-normalized) | Content deduplication, exact match |
| `smali_method_hash` | SHA-256 of smali body (instructions only, no `.method`/`.end method` directives) | Content deduplication, exact match |
| `ssdeep_smali` | ssdeep of smali body | Fuzzy similarity search |
| `tlsh_smali` | TLSH of smali body | Fuzzy similarity search |
| `minhash_smali` | MinHash signature of smali instruction n-grams | LSH-based similarity clustering |

### 3.5 Obfuscation Indicators (per method)

Computed from the smali representation:

- `short_method_name` — Method name is <= 2 characters (a, b, c — typical R8/ProGuard output)
- `short_class_name` — Enclosing class has a single-letter name
- `has_string_encryption` — Method contains `const-string` followed by decryption-pattern calls
- `has_reflection_calls` — Method uses `java.lang.reflect.*` APIs
- `excessive_goto_count` — Number of `goto` instructions exceeds threshold (control flow flattening indicator)

---

## 4. Data Model

### 4.1 New Dataclasses

```python
@dataclass
class APKDecompiledMethodContent:
    """Decompiled Java source for a single method (content table — deduplicated by hash)."""
    decompiled_method_hash: str          # SHA-256 of normalized Java source
    decompiled_method: str               # Full Java method source
    method_type: str                     # "USER" or "LIBRARY"
    has_string_encryption: bool = False
    has_reflection_calls: bool = False
    excessive_goto_count: bool = False


@dataclass
class APKDecompiledMethodReference:
    """Links a specific APK to one of its decompiled methods (reference table)."""
    sha256: str                          # APK hash
    sha1: str
    md5: str
    decompiled_method_hash: str          # FK to content table
    smali_method_hash: Optional[str]     # FK to smali content table
    class_name: str                      # e.g., "com.example.MainActivity"
    method_name: str                     # e.g., "onCreate"
    method_signature: str                # e.g., "(Landroid/os/Bundle;)V"
    method_prototype: str                # e.g., "void onCreate(Bundle)"
    functions_caller: List[str]          # Methods that call this method
    functions_call: List[str]            # Methods called by this method


@dataclass
class APKSmaliMethodContent:
    """Smali disassembly for a single method (content table — deduplicated by hash)."""
    smali_method_hash: str               # SHA-256 of normalized smali body
    smali_method: str                    # Full smali method body
    method_type: str                     # "USER" or "LIBRARY"
    instructions_count: int = 0
    register_count: int = 0
    has_string_encryption: bool = False
    has_reflection_calls: bool = False
    excessive_goto_count: bool = False


@dataclass
class APKSmaliMethodReference:
    """Links a specific APK to one of its smali methods (reference table)."""
    sha256: str
    sha1: str
    md5: str
    smali_method_hash: str               # FK to content table
    decompiled_method_hash: Optional[str] # FK to decompiled content table
    class_name: str
    method_name: str
    method_signature: str
    ssdeep_smali: Optional[str] = None
    tlsh_smali: Optional[str] = None


@dataclass
class APKMethodSimilarityMetrics:
    """Similarity hashes for method-level clustering (keyed by smali hash)."""
    smali_method_hash: str
    cyclomatic_complexity: Optional[int] = None
    ssdeep_smali: Optional[str] = None
    tlsh_smali: Optional[str] = None
    minhash: Optional[List[int]] = None


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

### 4.2 Tag Enum Addition

```python
# In redb/extractors/enum.py
APK_DECOMPILED = "apk_decompiled"
```

### 4.3 ClickHouse Tables

| Table | Key | Pattern | Analog |
|-------|-----|---------|--------|
| `code_apk_decompiled_methods_content` | `decompiled_method_hash` | Content (deduplicated) | `code_binja_decompiled_functions_content` |
| `code_apk_decompiled_methods_references` | `(sha256, decompiled_method_hash)` | Reference (per-binary) | `code_binja_decompiled_functions_references` |
| `code_apk_smali_methods_content` | `smali_method_hash` | Content (deduplicated) | `code_binja_disassembled_functions_content` |
| `code_apk_smali_methods_references` | `(sha256, smali_method_hash)` | Reference (per-binary) | `code_binja_disassembled_functions_references` |
| `code_apk_method_similarity_metrics` | `smali_method_hash` | Similarity | `code_binja_function_similarity_metrics` |
| `code_apk_analysis_errors` | `(sha256, class_name, method_name)` | Errors | `function_analysis_errors_binja` |

All tables use `ReplacingMergeTree(analysis_date)` engine, consistent with existing schema.

---

## 5. External Tool Management

### 5.1 JADX

- **Invocation:** `jadx --no-res --no-imports --threads-count 2 --output-dir <tmpdir> <apk_path>`
- **Flags:**
  - `--no-res` — Skip resource decompilation (androguard handles resources)
  - `--no-imports` — Omit import statements for cleaner per-method extraction
  - `--threads-count 2` — Limit threads (same as Binary Ninja worker thread limit)
- **Output:** Java source files in `<tmpdir>/<package>/<Class>.java`
- **Timeout:** Configurable via `JADX_TIMEOUT` env var (default: 600s)
- **Path:** Configurable via `JADX_PATH` env var (default: `jadx`)
- **Error handling:** If JADX fails for a specific APK, the decompiled content tables are skipped but smali analysis continues. Error logged to `code_apk_analysis_errors`.

### 5.2 apktool

- **Invocation:** `apktool d --no-res --force --output <tmpdir> <apk_path>`
- **Flags:**
  - `--no-res` — Skip resource decoding (only want smali)
  - `--force` — Overwrite output directory if exists
- **Output:** Smali files in `<tmpdir>/smali/com/example/ClassName.smali` (one per class, containing all methods)
- **Timeout:** Configurable via `APKTOOL_TIMEOUT` env var (default: 600s)
- **Path:** Configurable via `APKTOOL_PATH` env var (default: `apktool`)
- **Error handling:** Same as JADX — if apktool fails, smali content tables are skipped but decompiled Java analysis continues. Error logged.

### 5.3 Androguard

- **Invocation:** Direct Python API — `AnalyzeAPK(filepath)` returns `(APK, list[DEX], Analysis)`
- **The `Analysis` object provides:**
  - `get_methods()` — All `MethodAnalysis` objects
  - `get_call_graph()` — networkx `MultiDiGraph` of method calls
  - `MethodAnalysis.get_xref_from()` — Who calls this method
  - `MethodAnalysis.get_xref_to()` — What this method calls
  - `MethodAnalysis.get_method()` — Access to `EncodedMethod` for bytecode
- **No timeout needed** — runs in-process, same Python process

---

## 6. Ingestor Integration

In `workers.py:process_binary_file()`, the APK branch will be extended to run `DecompileAPK` after the existing APK extractors:

```python
# Existing APK extractors (from APK_FEATURES_PDD.md)
for module in apk_modules:
    extractor = module(filepath, logger, exporters=exporters, ...)
    extractor.export_data()

# NEW: Code analysis (this PDD)
if "DecompileAPK" in selected_modules or "all" in selected_modules:
    decompiler = DecompileAPK(
        filepath, logger, exporters=exporters,
        index_prefix=index_prefix, filetype="apk",
    )
    decompiler.export_data()
```

The `DecompileAPK` extractor runs with its own timeout (configurable via `APK_DECOMPILE_TIMEOUT`, default: 1800s) using the same daemon-thread pattern as `DecompileBinja`.

---

## 7. New Dependencies

### 7.1 Required (system-level)

| Tool | Installation | Version | License | Purpose |
|------|-------------|---------|---------|---------|
| **JADX** | System package or download from GitHub releases | >= 1.5 | Apache 2.0 | Java decompilation |
| **apktool** | System package or download from GitHub releases | >= 2.9 | Apache 2.0 | Smali disassembly |
| **Java Runtime** | System package (`openjdk-17-jre` or similar) | >= 11 | GPL+CE | Required by JADX and apktool |

### 7.2 Required (Python — already installed)

| Library | Current Version | Usage in this PDD |
|---------|----------------|-------------------|
| `androguard` | >=4.1 | Call graphs, xrefs, method enumeration (already in requirements.txt) |
| `ppdeep` | installed | ssdeep fuzzy hashing (already used by Binary Ninja pipeline) |
| `py-tlsh` | installed | TLSH fuzzy hashing (already used by Binary Ninja pipeline) |
| `mmh3` | installed | MinHash computation (already used by Binary Ninja pipeline) |
| `networkx` | installed via androguard | Call graph representation (transitive dependency) |

### 7.3 No new Python dependencies required

All Python libraries needed are already in `requirements.txt`. The only new system-level dependencies are JADX, apktool, and a Java runtime.

---

## 8. Implementation Phases

### Phase 1 — Core Infrastructure

1. `APKCodeAnalyzer` class — androguard integration (method enumeration, call graph, xrefs, library filtering)
2. `JADXDecompiler` wrapper — subprocess management with timeout, output parsing
3. `ApktoolDisassembler` wrapper — subprocess management with timeout, smali parsing
4. Method-level content extraction and hashing logic
5. Unit tests for all Phase 1 components

### Phase 2 — Extractor and Data Export

6. `DecompileAPK` extractor class (following `DecompileBinja` pattern)
7. ClickHouse table creation functions
8. Multi-table export (`prepare_export_data`) for all 6 tables
9. Integration with `workers.py` dispatch
10. Unit tests for extractor, schema, and export
11. Update `TEST_INDEX.md`

### Phase 3 — Similarity and Obfuscation Analysis

12. Method-level similarity hash computation (ssdeep, TLSH, MinHash on smali)
13. Obfuscation indicator computation per method
14. `code_apk_method_similarity_metrics` table population
15. Unit tests for similarity and obfuscation
16. Update `TEST_INDEX.md`

### Phase 4 — Integration Testing and Hardening

17. End-to-end integration tests with real APK samples (benign + malicious + obfuscated)
18. Edge case handling: multi-DEX, empty DEX, packed APKs, APKs with no user code
19. Performance profiling and timeout tuning
20. Final `TEST_INDEX.md` update

---

## 9. Testing Strategy

### 9.1 Unit Tests

All unit tests mock external tools (JADX, apktool, androguard) and require no system dependencies:

- **Analyzer tests** — Method enumeration, library filtering, call graph extraction, xref parsing
- **JADX wrapper tests** — Subprocess invocation, output parsing, timeout handling, error recovery
- **Apktool wrapper tests** — Same as JADX
- **Hashing tests** — SHA-256 normalization, ssdeep/TLSH computation, MinHash signature generation
- **Extractor tests** — `DecompileAPK.extract()`, `prepare_export_data()`, multi-table schema validation
- **Smali parsing tests** — Method boundary detection, instruction extraction, register counting

### 9.2 Integration Tests

Require JADX, apktool, and Java installed:

- Full pipeline run on known APK samples
- Cross-validate decompiled output against known method signatures
- Verify ClickHouse export column counts and types
- Test with obfuscated APKs (ProGuard/R8 output)

### 9.3 Markers

```python
@pytest.mark.apk           # All APK tests
@pytest.mark.decompile      # All decompiler tests
@pytest.mark.unit           # No external deps
@pytest.mark.integration    # Requires JADX/apktool/Java
```

---

## 10. Configuration

All configuration via environment variables, consistent with existing extractors:

| Variable | Default | Description |
|----------|---------|-------------|
| `JADX_PATH` | `jadx` | Path to JADX binary |
| `JADX_TIMEOUT` | `600` | JADX subprocess timeout (seconds) |
| `APKTOOL_PATH` | `apktool` | Path to apktool binary |
| `APKTOOL_TIMEOUT` | `600` | apktool subprocess timeout (seconds) |
| `APK_DECOMPILE_TIMEOUT` | `1800` | Overall decompilation timeout (seconds) |
| `APK_LIBRARY_PREFIXES` | (see §2.3) | Comma-separated package prefixes to filter |
| `APK_MIN_METHOD_INSTRUCTIONS` | `5` | Minimum smali instruction count to analyze a method |

---

## 11. Open Questions / Future Work

1. **ProGuard/R8 mapping file support** — If mapping files are bundled (rare in malware, common in crash reports), JADX can use them to restore original names. Deferred.
2. **Kotlin-specific analysis** — Kotlin metadata annotations could provide richer type information. Deferred.
3. **Cross-DEX analysis** — Multi-DEX APKs may have cross-DEX method calls. Androguard handles this via `AnalyzeAPK()` which loads all DEX files into a single `Analysis` object. No special handling needed.
4. **JADX as Java library via JPype** — Could eliminate subprocess overhead. Deferred in favor of the proven subprocess pattern, but may be revisited if performance is an issue.

---

## Appendix A — CFG Feature Parity with Binary Ninja Pipeline

**Date:** 2026-03-13
**Status:** Planned (Phase 5)
**Depends on:** Phases 13 complete

### A.1 Motivation

The Binary Ninja pipeline produces a dedicated `code_binja_cfg_functions` table with 17 fields capturing graph topology, structural hashes, and per-block feature vectors. The current APK pipeline computes only basic graph scalars (`block_count`, `edge_count`, `cyclomatic_complexity`, `loop_count`, `max_depth`, `max_fan_out`) and bundles them into the `code_apk_method_similarity_metrics` table alongside fuzzy hashes.

Analysis shows that **all advanced CFG features can be computed from smali** — this is not a limitation of Java bytecode. The existing APK infrastructure already:

- Builds `successors[]` adjacency lists from smali control flow (`smali_cfg.py`)
- Computes per-block ACFG feature vectors using the same 8-category schema as Binary Ninja (`smali_cfg.py:_build_block_features`)
- Normalizes Dalvik opcodes into semantic categories equivalent to LLIL categories (`smali_normalization.py`)

The generic functions in `cfg_features.py` (`compute_topology_hash`, `compute_md_index_topdown/bottomup`, `compute_wl_minhash`, `compute_cfg_feature_tlsh`, `pack_adjacency`) operate on adjacency lists and block feature arrays — they have no Binary Ninja dependency and can be called directly from the APK pipeline.

### A.2 Table Restructuring

Split the current single table into two, mirroring the Binja pattern:

#### `code_apk_method_similarity_metrics` (content-based fuzzy matching)

Retains only fuzzy hashes and instruction-sequence similarity data:

| Column | Type | Change |
|--------|------|--------|
| `smali_method_hash` | FixedString(64) | Unchanged |
| `cyclomatic_complexity` | Nullable(UInt16) | Stays (duplicated in both, same as Binja) |
| `ssdeep_smali` | Nullable(String) | Unchanged |
| `tlsh_smali` | Nullable(FixedString(72)) | Unchanged |
| `minhash` | Array(UInt8) | Unchanged |
| `analysis_date` | DateTime64(3, 'UTC') | Unchanged |

Removed from this table: `block_count`, `edge_count`, `loop_count`, `max_depth`, `max_fan_out` — these move to the CFG table.

#### `code_apk_cfg_methods` (NEW — structural/topological similarity)

Mirrors `code_binja_cfg_functions`:

| Column | Type | Source | Analog in Binja |
|--------|------|--------|-----------------|
| `smali_method_hash` | FixedString(64) | Existing | `disassembled_function_hash` |
| `cfg_topology_hash` | FixedString(16) | NEW — `cfg_features.compute_topology_hash()` | Same |
| `block_count` | UInt16 | Moved from similarity table | Same |
| `edge_count` | UInt16 | Moved from similarity table | Same |
| `instructions_count` | UInt32 | Existing (total Dalvik instructions) | `llil_total_operations` |
| `call_count` | UInt16 | NEW — count of `invoke-*` instructions | Same |
| `cyclomatic_complexity` | UInt16 | Moved from similarity table | Same |
| `loop_count` | UInt8 | Moved from similarity table | Same |
| `max_depth` | UInt16 | Moved from similarity table | Same |
| `max_fan_out` | UInt8 | Moved from similarity table | Same |
| `md_index_topdown` | UInt64 | NEW — `cfg_features.compute_md_index_topdown()` | Same |
| `md_index_bottomup` | UInt64 | NEW — `cfg_features.compute_md_index_bottomup()` | Same |
| `prime_product_smali` | UInt64 | NEW — Dalvik opcode → prime mapping | `prime_product_llil` |
| `cfg_feature_tlsh` | Nullable(FixedString(72)) | NEW — `cfg_features.compute_cfg_feature_tlsh()` | Same |
| `wl_minhash` | Array(UInt8) | NEW — `cfg_features.compute_wl_minhash()`, 128 elements | Same |
| `bb_features` | Array(Array(UInt16)) | Existing (computed, not exported) | Same |
| `cfg_adjacency` | Array(UInt32) | NEW — `cfg_features.pack_adjacency()` | Same |
| `analysis_date` | DateTime64(3, 'UTC') | | Same |

### A.3 Naming Differences from Binja

Two columns are intentionally renamed to reflect what the data actually represents:

- **`prime_product_smali`** (not `prime_product_llil`) — the prime mapping is applied to normalized Dalvik opcodes, not LLIL. Semantically equivalent for APK-to-APK comparison but not numerically comparable to Binja values.
- **`instructions_count`** (not `llil_total_operations`) — counts Dalvik instructions, not LLIL operations. LLIL decomposes machine instructions into sub-operations; Dalvik bytecode is already at a higher abstraction level where one instruction ≈ one operation.

### A.4 Implementation Requirements

| Task | Effort | Notes |
|------|--------|-------|
| Build `predecessors[]` from `successors[]` in `smali_cfg.py` | ~5 lines | Trivial reverse mapping |
| Define `SMALI_OP_PRIMES` mapping | ~30 lines | Map semantic categories from `smali_normalization.py` to same primes used in `cfg_features.py` |
| Wire `cfg_features.py` functions into `smali_cfg.py` | ~40 lines | Call `compute_topology_hash`, `compute_md_index_*`, `compute_wl_minhash`, `compute_cfg_feature_tlsh`, `pack_adjacency` |
| Export `bb_features` (already computed, not exported) | ~5 lines | Add to results dict |
| Count `invoke-*` instructions for `call_count` | ~5 lines | Filter in instruction loop |
| New `code_apk_cfg_methods` table export in `DecompileAPK.py` | ~60 lines | Follow existing export pattern |
| Slim down `code_apk_method_similarity_metrics` export | ~10 lines | Remove moved columns |
| ClickHouse schema for new table | ~30 lines | Mirror `code_binja_cfg_functions` |
| Unit tests | ~100 lines | Test new fields, reuse patterns from `test_cfg_features.py` |

**Total estimated: ~285 lines of code changes.**

### A.5 What Cannot Be Identical Cross-Platform

The `prime_product_smali` values are **not numerically comparable** to `prime_product_llil` from the Binja pipeline. LLIL decomposes native instructions into sub-operations (e.g., one x86 `push` becomes `STORE` + `SET_REG`), while Dalvik bytecode maps 1:1 to semantic categories. The prime products are valid for APK-vs-APK similarity and APK-vs-APK clustering, which is the intended use case.

All other fields (`cfg_topology_hash`, `md_index_*`, `wl_minhash`, `cfg_feature_tlsh`, `bb_features`, `cfg_adjacency`) are computed from the same generic algorithms and are structurally equivalent across platforms.