Olivier Boissier

218 papers A 13B 5C 8Misc 17Journal 45Unranked 119
YearRankTypeTitle / Venue / Authors
2026 conf
ICAART (2)
Benoît Alcaraz, Rémy Chaput, Olivier Boissier, Christopher Leturc
2025 A conf
ECAI
Elena Yan, Luis G. Nardin, Olivier Boissier, Jaime Simão Sichman
2025 C conf
COINE
Elena Yan, Luis G. Nardin, Olivier Boissier, Jaime Simão Sichman
2024 C conf
COINE
Elena Yan, Luis G. Nardin, Jomi F. Hübner, Olivier Boissier
2024 J jnl
CoRR
Elena Yan, Luis G. Nardin, Jomi F. Hübner, Olivier Boissier
2024 C conf
COINE
Nesrine Hafiene, Luis G. Nardin, Olivier Boissier
2023 A conf
AAMAS
Benoît Alcaraz, Olivier Boissier, Rémy Chaput, Christopher Leturc
2023 J jnl
CoRR
Rémy Chaput, Olivier Boissier, Mathieu Guillermin
2023 J jnl
Dagstuhl Reports
Olivier Boissier, Andrei Ciortea, Andreas Harth, Alessandro Ricci, Danai Vachtsevanou
2023 J jnl
Rev. Ouverte Intell. Artif.
Rémy Chaput, Jérémy Duval, Olivier Boissier, Mathieu Guillermin, Salima Hassas
2023 Misc conf
PAAMS
Nesrine Hafiene, Luis G. Nardin, Antoine Zimmermann, Olivier Boissier
2022 J jnl
CoRR
Timotheus Kampik, Adnane Mansour, Olivier Boissier, Sabrina Kirrane, Julian A. Padget, Terry R. Payne, Munindar P. Singh, Valentina Tamma, Antoine Zimmermann
2022 J jnl
ACM Trans. Internet Techn.
Timotheus Kampik, Adnane Mansour, Olivier Boissier, Sabrina Kirrane, Julian A. Padget, Terry R. Payne, Munindar P. Singh, Valentina Tamma, Antoine Zimmermann
2022 conf
WWW (Companion Volume)
Victor Charpenay, Antoine Zimmermann, Maxime Lefrançois, Olivier Boissier
2022 conf
JFSMA
Julien Cumin, Fano Ramparany, Iago Felipe Trentin, Olivier Boissier
2021 C conf
AIES
Rémy Chaput, Jérémy Duval, Olivier Boissier, Mathieu Guillermin, Salima Hassas
2021 conf
JFSMA
Rémy Chaput, Jérémy Duval, Olivier Boissier, Mathieu Guillermin, Salima Hassas
2021 J jnl
Dagstuhl Reports
Olivier Boissier, Andrei Ciortea, Andreas Harth, Alessandro Ricci
2021 conf
ATAC@ISWC
Fano Ramparany, Iago Felipe Trentin, Julien Cumin, Olivier Boissier
2021 Misc conf
PAAMS
Matteo Baldoni, Cristina Baroglio, Olivier Boissier, Roberto Micalizio, Stefano Tedeschi
2021 J jnl
IEEE Trans. Computers
Hamed Rahimi, Yvan Picaud, Kamal Deep Singh, Giyyarpuram Madhusudan, Salvatore Costanzo, Olivier Boissier
2021 A conf
AAMAS
Matteo Baldoni, Cristina Baroglio, Olivier Boissier, Roberto Micalizio, Stefano Tedeschi
2021 conf
WI/IAT
Hamed Rahimi, Iago Felipe Trentin, Fano Ramparany, Olivier Boissier
2021 J jnl
CoRR
Hamed Rahimi, Iago Felipe Trentin, Fano Ramparany, Olivier Boissier
2021 Misc conf
PAAMS
Hamed Rahimi, Iago Felipe Trentin, Fano Ramparany, Olivier Boissier
2021 J jnl
CoRR
Hamed Rahimi, Iago Felipe Trentin, Fano Ramparany, Olivier Boissier
2021 J jnl
Future Gener. Comput. Syst.
Víctor Sánchez-Anguix, Kuo-Ming Chao, Paulo Novais, Olivier Boissier, Vicente Julián
2020 conf
JFSMA
Rémy Chaput, Olivier Boissier, Mathieu Guillermin, Salima Hassas
2020 J jnl
CoRR
Hamed Rahimi, Yvan Picaud, Salvatore Costanzo, Giyyarpuram Madhusudan, Olivier Boissier, Kamal Deep Singh
2020 conf
EMAS@AAMAS
Alessandro Ricci, Angelo Croatti, Rafael H. Bordini, Jomi Fred Hübner, Olivier Boissier
2020 conf
I-ESA Workshops
Edison Chung, Maxime Lefrançois, Olivier Boissier
2020 conf
JFSMA
Iago Felipe Trentin, Fano Ramparany, Olivier Boissier
2019 conf
IRC
Yazan Mualla, Amro Najjar, Olivier Boissier, Stéphane Galland, Igor Tchappi Haman, Robin Vanet
2019 A conf
AAMAS
Andrei Ciortea, Simon Mayer, Fabien Gandon, Olivier Boissier, Alessandro Ricci, Antoine Zimmermann
2019 conf
EMAS@AAMAS
Matteo Baldoni, Cristina Baroglio, Olivier Boissier, Roberto Micalizio, Stefano Tedeschi
2019 J jnl
Knowl. Eng. Rev.
Maiquel de Brito, Jomi Fred Hübner, Olivier Boissier
2019 J jnl
Knowl. Eng. Rev.
Olivier Boissier, Rafael H. Bordini, Jomi Fred Hübner, Alessandro Ricci
2019 A conf
AAMAS
Matteo Baldoni, Cristina Baroglio, Olivier Boissier, Roberto Micalizio, Stefano Tedeschi
2019 conf
DDC@AI*IA
Matteo Baldoni, Cristina Baroglio, Olivier Boissier, Roberto Micalizio, Stefano Tedeschi
2019 A conf
AAMAS
Alessandro Ricci, Andrei Ciortea, Simon Mayer, Olivier Boissier, Rafael H. Bordini, Jomi Fred Hübner
2019 conf
RJCIA
Iago Felipe Trentin, Olivier Boissier, Fano Ramparany
2019 conf
IC
Mohammad Noorani Bakerally, Antoine Zimmermann, Olivier Boissier
2019 conf
JFSMA
Yazan Mualla, Igor Haman Tchappi, Amro Najjar, Stéphane Galland, Robin Vanet, Olivier Boissier
2018 conf
ESWC (Satellite Events)
Noorani Bakerally, Antoine Zimmermann, Olivier Boissier
2018 B conf
PRIMA
Matteo Baldoni, Cristina Baroglio, Olivier Boissier, Katherine Marie May, Roberto Micalizio, Stefano Tedeschi
2018 Misc conf
PAAMS
Yazan Mualla, Robin Vanet, Amro Najjar, Olivier Boissier, Stéphane Galland
2018 J jnl
Rev. d'Intelligence Artif.
Gauthier Picard, Flavien Balbo, Olivier Boissier
2018 conf
EMAS@AAMAS
Andrei Ciortea, Olivier Boissier, Alessandro Ricci
2018 conf
ESSA
Nicolas Cointe, Grégory Bonnet, Olivier Boissier
2018 conf
JFSMA
Nicolas Cointe, Grégory Bonnet, Olivier Boissier
2018 B conf
ESWC
Noorani Bakerally, Antoine Zimmermann, Olivier Boissier
2018 J jnl
Rev. d'Intelligence Artif.
Amro Najjar, Gauthier Picard, Olivier Boissier
2018 J jnl
Auton. Agents Multi Agent Syst.
Maiquel de Brito, Jomi Fred Hübner, Olivier Boissier
2018 J jnl
ACM Trans. Internet Techn.
Cristina Baroglio, Olivier Boissier, Axel Polleres
2018 conf
RTcMAS@IJCAI
Yazan Mualla, Amro Najjar, Robin Vanet, Olivier Boissier, Stéphane Galland
2017 A conf
AAMAS
Amro Najjar, Olivier Boissier, Gauthier Picard
2017 B conf
WI
Amro Najjar, Yazan Mualla, Olivier Boissier, Gauthier Picard
2017 conf
JFSMA
Gauthier Picard, Flavien Balbo, Olivier Boissier
2017 B conf
PRIMA
Maiquel de Brito, Jomi Fred Hübner, Olivier Boissier
2017 conf
WoT
Andrei Ciortea, Olivier Boissier, Alessandro Ricci
2017 conf
JFSMA
Nicolas Cointe, Grégory Bonnet, Olivier Boissier
2017 conf
AAMAS Workshops (Selected Papers)
Amro Najjar, Olivier Boissier, Gauthier Picard
2017 conf
BESC
Olivier Boissier
2017 A conf
AAMAS
Andrei Ciortea, Olivier Boissier, Antoine Zimmermann, Adina Magda Florea
2017 conf
EMAS@AAMAS
Andrei Ciortea, Olivier Boissier, Antoine Zimmermann, Adina Magda Florea
2017 J jnl
Web Intell.
Reda Yaich, Olivier Boissier, Gauthier Picard, Philippe Jaillon
2017 J jnl
Rev. d'Intelligence Artif.
Nicolas Cointe, Grégory Bonnet, Olivier Boissier
2017 conf
JFSMA
Amro Najjar, Olivier Boissier, Gauthier Picard
2017 J jnl
Rev. d'Intelligence Artif.
Nicolas Cointe, Grégory Bonnet, Olivier Boissier
2016 J jnl
Rev. d'Intelligence Artif.
Stéphane Galland, Flavien Balbo, Gauthier Picard, Olivier Boissier, Nicolas Gaud, Sebastian Rodriguez
2016 A conf
AAMAS
Nicolas Cointe, Grégory Bonnet, Olivier Boissier
2016 conf
ISCRAM
Lauren Thévin, Julie Dugdale, Olivier Boissier, Catherine Garbay
2016 conf
WoT
Andrei Ciortea, Antoine Zimmermann, Olivier Boissier, Adina Magda Florea
2016 J jnl
Rev. d'Intelligence Artif.
Lauren Thévin, Catherine Garbay, Olivier Boissier, Maiquel de Brito, Jomi Fred Hübner
2016 conf
JFSMA
Nicolas Cointe, Grégory Bonnet, Olivier Boissier
2016 B conf
WI
Amro Najjar, Christophe Gravier, Xavier Serpaggi, Olivier Boissier
2016 conf
EDIA@ECAI
Nicolas Cointe, Grégory Bonnet, Olivier Boissier
2016 conf
QCMan@ITC
Amro Najjar, Xavier Serpaggi, Christophe Gravier, Olivier Boissier
2016 conf
IOT
Andrei Ciortea, Olivier Boissier, Antoine Zimmermann, Adina Magda Florea
2016 conf
ESWC (Satellite Events)
Noorani Bakerally, Olivier Boissier, Antoine Zimmermann
2016 J jnl
Frontiers Inf. Technol. Electron. Eng.
Maiquel de Brito, Lauren Thévin, Catherine Garbay, Olivier Boissier, Jomi Fred Hübner
2015 A conf
AAMAS
Stéphane Galland, Flavien Balbo, Nicolas Gaud, Sebastian Rodriguez, Gauthier Picard, Olivier Boissier
2015 Misc conf
EPIA
Maiquel de Brito, Jomi Fred Hübner, Olivier Boissier
2015 J jnl
Comput. Electr. Eng.
Alexandru Sorici, Gauthier Picard, Olivier Boissier, Antoine Zimmermann, Adina Magda Florea
2015 J jnl
IEEE Internet Comput.
Christophe Gravier, Julien Subercaze, Amro Najjar, Frédérique Laforest, Xavier Serpaggi, Olivier Boissier
2015 Misc conf
PAAMS
Stéphane Galland, Flavien Balbo, Nicolas Gaud, Sebastian Rodriguez, Gauthier Picard, Olivier Boissier
2015 conf
EUMAS/AT
Maiquel de Brito, Jomi Fred Hübner, Olivier Boissier
2015 conf
AAAI Workshop: AI and Ethics
Aline Belloni, Alain Berger, Olivier Boissier, Grégory Bonnet, Gauvain Bourgne, Pierre-Antoine Chardel, Jean-Pierre Cotton, Nicolas Evreux, Jean-Gabriel Ganascia, Philippe Jaillon, Bruno Mermet, Gauthier Picard, Bernard Rever, Gaële Simon, Thibault de Swarte, Catherine Tessier, François Vexler, Robert Voyer, Antoine Zimmermann
2015 conf
JFSMA
Alexandru Sorici, Gauthier Picard, Olivier Boissier, Adina Florea
2015 conf
JFSMA
Maiquel de Brito, Lauren Thévin, Catherine Garbay, Olivier Boissier, Jomi Hübner
2015 Misc conf
PAAMS
Alexandru Sorici, Gauthier Picard, Olivier Boissier, Adina Florea
2015 conf
SASO
Gauthier Picard, Camille Persson, Olivier Boissier, Fano Ramparany
2015 conf
ISAmI
Alexandru Sorici, Gauthier Picard, Olivier Boissier, Adina Florea
2015 Misc conf
PAAMS
Maiquel de Brito, Lauren Thévin, Catherine Garbay, Olivier Boissier, Jomi Fred Hübner
2015 Misc conf
PAAMS
Maiquel de Brito, Lauren Thévin, Catherine Garbay, Olivier Boissier, Jomi Fred Hübner
2015 conf
WI-IAT (1)
Andrei Ciortea, Antoine Zimmermann, Olivier Boissier, Adina Magda Florea
2015 J jnl
Rev. d'Intelligence Artif.
Lauren Thévin, Fabien Badeig, Julie Dugdale, Olivier Boissier, Catherine Garbay
2014 conf
CLIMA
Maiquel de Brito, Jomi Fred Hübner, Olivier Boissier
2014 conf
CSEDU (1)
Smain Nasr-Eddine Bouzenada, Olivier Boissier, Philippe Beaune, Nacer Eddine Zarour
2014 conf
IWWISS
Camille Persson, Gauthier Picard, Fano Ramparany, Olivier Boissier
2014 conf
JFSMA
Stéphane Galland, Nicolas Gaud, Sebastian Rodriguez, Flavien Balbo, Gauthier Picard, Olivier Boissier
2014 Misc conf
PAAMS
Sergio Esparcia, Olivier Boissier, Estefania Argente
2014 conf
E4MAS
Carlos Carrascosa, Franziska Klügl, Alessandro Ricci, Olivier Boissier
2014 conf
COIN@AAMAS/PRICAI
Alessandro Ricci, Luca Tummolini, Michele Piunti, Olivier Boissier, Cristiano Castelfranchi
2014 Misc conf
SYNASC
Andrei Ciortea, Olivier Boissier, Antoine Zimmermann, Adina Magda Florea
2014 J jnl
Appl. Intell.
Muhammad Fahad, Olivier Boissier, Pierre Maret, Néjib Moalla, Christophe Gravier
2014 conf
IWWISS
Alexandru Sorici, Gauthier Picard, Olivier Boissier
2014 conf
JFSMA
Lauren Thévin, Fabien Badeig, Julie Dugdale, Olivier Boissier, Catherine Garbay
2014 conf
JFSMA
Amro Najjar, Xavier Serpaggi, Christophe Gravier, Olivier Boissier
2014 ch.
Agent-Oriented Software Engineering
Olivier Boissier, Rafael H. Bordini, Jomi Fred Hübner, Alessandro Ricci
2013 J jnl
Web Intell. Agent Syst.
Reda Yaich, Olivier Boissier, Gauthier Picard, Philippe Jaillon
2013 J jnl
Rev. d'Intelligence Artif.
Serge Garlatti, Peter F. Sturm, Olivier Boissier
2013 Misc conf
UCC
Amro Najjar, Xavier Serpaggi, Christophe Gravier, Olivier Boissier
2013 conf
CSCS
Olivier Boissier
2013 J jnl
Sci. Comput. Program.
Olivier Boissier, Rafael H. Bordini, Jomi Fred Hübner, Alessandro Ricci, Andrea Santi
2013 J jnl
Knowl. Eng. Rev.
Olivier Boissier, Marco Colombetti, Michael Luck, John-Jules Ch. Meyer, Axel Polleres
2013 conf
UbiComp (Adjunct Publication)
Andrei Ciortea, Olivier Boissier, Antoine Zimmermann, Adina Magda Florea
2013 J jnl
Artif. Intell. Rev.
Estefania Argente, Olivier Boissier, Carlos Carrascosa, Nicoletta Fornara, Peter McBurney, Pablo Noriega, Alessandro Ricci, Jordi Sabater-Mir, Michael Ignaz Schumacher, Charalampos Tampitsikas, Kuldar Taveter, Giuseppe Vizzari, George A. Vouros
2012 Misc conf
PAAMS
Camille Persson, Gauthier Picard, Fano Ramparany, Olivier Boissier
2012 Misc conf
PAAMS
Reda Yaich, Olivier Boissier, Gauthier Picard, Philippe Jaillon
2012 Misc conf
SAC
Reda Yaich, Olivier Boissier, Philippe Jaillon, Gauthier Picard
2012 conf
AT
Estefania Argente, Olivier Boissier, Carlos Carrascosa, Nicoletta Fornara, Peter McBurney, Pablo Noriega, Alessandro Ricci, Jordi Sabater-Mir, Michael Ignaz Schumacher, Charalampos Tampitsikas, Kuldar Taveter, Giuseppe Vizzari, George A. Vouros
2012 conf
AT
Alexandra-Madalina Zarafin, Antoine Zimmermann, Olivier Boissier
2012 conf
ICC
Mustapha Bilal, Camille Persson, Fano Ramparany, Gauthier Picard, Olivier Boissier
2012 ed.
ProMAS
Louise A. Dennis, Olivier Boissier, Rafael H. Bordini
2012 conf
WI&C
Muhammad Fahad, Olivier Boissier, Pierre Maret, Christophe Gravier
2011 C conf
EUMAS
Camille Persson, Gauthier Picard, Fano Ramparany, Olivier Boissier
2011 J jnl
Ann. Math. Artif. Intell.
Jomi Fred Hübner, Olivier Boissier, Rafael H. Bordini
2011 conf
SPLASH Workshops
Alexandru Sorici, Olivier Boissier, Gauthier Picard, Andrea Santi
2011 conf
MATES
Olivier Boissier
2011 conf
JFSMA
Reda Yaich, Olivier Boissier, Gauthier Picard, Philippe Jaillon
2011 conf
JFSMA
Camille Persson, Gauthier Picard, Fano Ramparany, Olivier Boissier
2011 ed.
IAT
Olivier Boissier, Jeffrey Bradshaw, Longbing Cao, Klaus Fischer, Mohand-Said Hacid
2011 ed.
Web Intelligence
Olivier Boissier, Boualem Benatallah, Mike P. Papazoglou, Zbigniew W. Ras, Mohand-Said Hacid
2011 conf
Web Intelligence/IAT Workshops
Reda Yaich, Olivier Boissier, Philippe Jaillon, Gauthier Picard
2011 J jnl
Rev. d'Intelligence Artif.
Flavien Balbo, Olivier Boissier, Fabien Badeig
2010 J jnl
Trans. Petri Nets Other Model. Concurr.
Grégoire Danoy, Pascal Bouvry, Olivier Boissier
2010 conf
MALLOW
Olivier Boissier, Flavien Balbo, Fabien Badeig
2010 conf
COIN@AAMAS&MALLOW
Olivier Boissier, Flavien Balbo, Fabien Badeig
2010 conf
SOCA
Chahrazed Bouhini, Freddy Lécué, Nikolay Mehandjiev, Olivier Boissier
2010 conf
MALLOW
Michele Piunti, Olivier Boissier, Jomi Fred Hübner, Alessandro Ricci
2010 conf
CLIMA
Jomi Fred Hübner, Olivier Boissier, Rafael H. Bordini
2010 J jnl
Auton. Agents Multi Agent Syst.
Jomi Fred Hübner, Olivier Boissier, Rosine Kitio, Alessandro Ricci
2010 J jnl
Rev. d'Intelligence Artif.
Olivier Boissier, Grégory Bonnet, Catherine Tessier
2010 Misc conf
PAAMS
Matthieu Castebrunet, Olivier Boissier, Sylvain Giroux, Vincent Rialle
2010 ed.
MALLOW
Olivier Boissier, Amal El Fallah Seghrouchni, Salima Hassas, Nicolas Maudet
2010 conf
WOA
Michele Piunti, Alessandro Ricci, Olivier Boissier, Jomi Fred Hübner
2010 conf
IEA/AIE (2)
Ludivine Crépin, Yves Demazeau, Olivier Boissier, François Jacquenet
2010 conf
JFSMA
Flavien Balbo, Olivier Boissier, Fabien Badeig
2009 conf
Normative Multi-Agent Systems
Olivier Boissier, Jomi Fred Hübner
2009 conf
COIN@AAMAS&IJCAI&MALLOW
Luciano R. Coutinho, Anarosa Brandão, Jaime Simão Sichman, Jomi Fred Hübner, Olivier Boissier
2009 conf
COIN@AAMAS&IJCAI&MALLOW
Jomi Fred Hübner, Olivier Boissier, Rafael H. Bordini
2009 ed.
COIN@AAMAS&AAAI
Jomi Fred Hübner, Eric T. Matson, Olivier Boissier, Virginia Dignum
2009 conf
MATES
Michele Piunti, Alessandro Ricci, Olivier Boissier, Jomi Fred Hübner
2009 conf
IAT
Michele Piunti, Alessandro Ricci, Olivier Boissier, Jomi Fred Hübner
2009 conf
JFSMA
Michele Piunti, Alessandro Ricci, Olivier Boissier, Jomi Fred Hübner
2009 ch.
Handbook of Research on Multi-Agent Systems
Luciano R. Coutinho, Jaime Simão Sichman, Olivier Boissier
2009 conf
MALLOW
Jomi Fred Hübner, Olivier Boissier, Rafael H. Bordini
2009 Misc conf
PAAMS
Ludivine Crépin, Yves Demazeau, Olivier Boissier, François Jacquenet
2009 conf
JFSMA
Gauthier Picard, Jomi Fred Hübner, Olivier Boissier, Marie-Pierre Gleizes
2009 J jnl
Rev. d'Intelligence Artif.
Ludivine Crépin, Yves Demazeau, Olivier Boissier, François Jacquenet
2009 J jnl
Int. J. Cooperative Inf. Syst.
Freddy Lécué, Alexandre Delteil, Alain Léger, Olivier Boissier
2008 conf
ICEIS (2)
Ludivine Crépin, Laurent Vercouter, Olivier Boissier, Yves Demazeau, François Jacquenet
2008 conf
JFSMA
Olivier Boissier, Rosine Kitio, Jomi Fred Hübner, Alessandro Ricci
2008 conf
COIN@AAMAS&AAAI
Jomi Fred Hübner, Laurent Vercouter, Olivier Boissier
2008 conf
AOSE
Luciano R. Coutinho, Anarosa Brandão, Jaime Simão Sichman, Olivier Boissier
2008 conf
ESAW
Ludivine Crépin, Yves Demazeau, Olivier Boissier, François Jacquenet
2008 conf
JFSMA
Ludivine Crépin, Yves Demazeau, Olivier Boissier, François Jacquenet
2007 ed.
COIN@AAMAS/ECAI
Pablo Noriega, Javier Vázquez-Salceda, Guido Boella, Olivier Boissier, Virginia Dignum, Nicoletta Fornara, Eric Matson
2007 J jnl
Int. J. Agent Oriented Softw. Eng.
Jomi Fred Hübner, Jaime Simão Sichman, Olivier Boissier
2007 conf
JFSMA
Benjamin Gâteau, Olivier Boissier, Djamel Khadraoui
2007 conf
Normative Multi-agent Systems
Olivier Boissier, Benjamin Gâteau
2007 conf
COIN
Rosine Kitio, Olivier Boissier, Jomi Fred Hübner, Alessandro Ricci
2006 conf
COIN@AAMAS/ECAI
Benjamin Gâteau, Olivier Boissier, Djamel Khadraoui, Eric Dubois
2006 ed.
AAMAS Workshops
Olivier Boissier, Julian A. Padget, Virginia Dignum, Gabriela Lindemann, Eric T. Matson, Sascha Ossowski, Jaime Simão Sichman, Javier Vázquez-Salceda
2006 conf
ESAW
Olivier Boissier, Jomi Fred Hübner, Jaime Simão Sichman
2005 conf
MCMP@MDM
Oana Bucur, Olivier Boissier, Philippe Beaune
2005 conf
UbiMob
Oana Bucur, Philippe Beaune, Olivier Boissier
2005 conf
CoOrg@COORDINATION
Cosmin Carabelea, Olivier Boissier
2005 conf
KES (4)
Grégoire Danoy, Pascal Bouvry, Olivier Boissier
2005 conf
MRC@IJCAI
Oana Bucur, Philippe Beaune, Olivier Boissier
2005 conf
UbiMob
Oana Bucur, Philippe Beaune, Olivier Boissier
2005 C conf
EUMAS
Benjamin Gâteau, Olivier Boissier, Djamel Khadraoui, Eric Dubois
2005 conf
AAMAS Workshops
Jomi Fred Hübner, Jaime Simão Sichman, Olivier Boissier
2005 conf
MRC
Oana Bucur, Philippe Beaune, Olivier Boissier
2005 conf
IAT
Jomi Fred Hübner, Olivier Boissier, Jaime Simão Sichman
2005 conf
CEEMAS
Oana Bucur, Philippe Beaune, Olivier Boissier
2004 conf
International Conference on Wireless Networks
Fano Ramparany, Olivier Boissier, Alfred Chioiu
2004 conf
JFSMA
Cosmin Carabelea, Cristiano Castelfranchi, Olivier Boissier
2004 A conf
AAMAS
Benjamin Gâteau, Djamel Khadraoui, Olivier Boissier, Eric Dubois
2004 J jnl
Trans. SDPS
Fano Ramparany, Alfred Chioiu, Olivier Boissier, Cosmin Carabelea, Lionel Rimbert
2004 conf
ICEIS (2)
Benjamin Gâteau, Djamel Khadraoui, Eric Dubois, Olivier Boissier
2004 ed.
JFSMA
Olivier Boissier, Zahia Guessoum
2004 conf
ESAW
Cosmin Carabelea, Olivier Boissier, Cristiano Castelfranchi
2004 conf
SBIA
Jomi Fred Hübner, Jaime Simão Sichman, Olivier Boissier
2003 J jnl
Tech. Sci. Informatiques
Olivier Boissier, Cosmin Carabelea, Adina Magda Florea
2003 conf
Agents and Computational Autonomy
Cosmin Carabelea, Olivier Boissier, Adina Florea
2003 conf
Euro-Par
Cosmin Carabelea, Olivier Boissier, Fano Ramparany
2003 conf
CEEMAS
Arnaud Mounier, Olivier Boissier, François Jacquenet
2003 conf
EGC
Arnaud Mounier, François Jacquenet, Olivier Boissier
2003 A conf
AAMAS
Arnaud Mounier, Olivier Boissier, François Jacquenet
2002 conf
SBIA
Jomi Fred Hübner, Jaime Simão Sichman, Olivier Boissier
2002 conf
AMEC
Mihnea Bratu, Jean-Marc Andreoli, Olivier Boissier, Stefania Castellani
2002 J jnl
Tech. Sci. Informatiques
Olivier Boissier, David Houssin, Stefan Bornhofen, Samia Souissi, Vincent Ginot
2002 A conf
AAMAS
Jomi Fred Hübner, Jaime Simão Sichman, Olivier Boissier
2002 conf
JFSMA
Jomi Fred Hübner, Jaime Simão Sichman, Olivier Boissier
2002 J jnl
Tech. Sci. Informatiques
Michel Occello, Zahia Guessoum, Olivier Boissier
2001 conf
JFIADSMA
Thibault Carron, Olivier Boissier
2000 conf
JFIADSMA
Mahdi Hannoun, Olivier Boissier, Jaime Simão Sichman, Thibault Carron, Claudette Sayettat
2000 conf
IBERAMIA-SBIA
Mahdi Hannoun, Olivier Boissier, Jaime Simão Sichman, Claudette Sayettat
2000 conf
ICMAS
Mohamad Allouche, Olivier Boissier, Claudette Sayettat
2000 conf
JFIADSMA
Thibault Carron, Olivier Boissier
1999 conf
MAAMAW
Thibault Carron, Hubert Proton, Olivier Boissier
1999 conf
JFIADSMA
Mahdi Hannoun, Olivier Boissier, Jaime Simão Sichman, Claudette Sayettat
1998 C conf
MABS
Mahdi Hannoun, Jaime Simão Sichman, Olivier Boissier, Claudette Sayettat
1997 C conf
ISADS
Mohamad K. Allouche, Claudette Sayettat, Olivier Boissier
1994 conf
MAAMAW
Olivier Boissier, Yves Demazeau
1993
Olivier Boissier
tests/unit/test_apk_strings_ioc.py
← Index tests/unit/test_apk_strings_ioc.py python
"""Tests for APK string extraction and IOC extraction integration.

Covers:
- APKCodeAnalyzer._extract_strings() — string extraction from DEX objects
- APKCodeAnalyzer._string_entropy() — Shannon entropy computation
- DecompileAPK strings export table schema
- IOCExtractorFromResults with APK-format analysis_results
- Worker IOC wiring for APK
"""
import os
import tempfile
from dataclasses import asdict
from unittest.mock import MagicMock, patch

import pytest

from redb.extractors.ioc_extractor.ioc_extractor import IOCExtractorFromResults
from redb.extractors.ioc_extractor.standalone_ioc_extractor import (
    IOCType,
    SourceType,
)

pytestmark = [pytest.mark.unit, pytest.mark.apk]


# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------

def _make_analyzer(min_instructions=1):
    """Create an APKCodeAnalyzer with mocked dependencies."""
    with patch(
        "redb.extractors.decompiler.apk.analyzer.JADXDecompiler"
    ), patch(
        "redb.extractors.decompiler.apk.analyzer.ApktoolDisassembler"
    ):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk")
        analyzer.min_instructions = min_instructions
        return analyzer


def _make_mock_dex(strings):
    """Create a mock DEX object that returns the given strings."""
    dex = MagicMock()
    dex.get_strings.return_value = strings
    return dex


def _create_fake_apk_file():
    """Create a temporary file to act as a fake APK."""
    fd, path = tempfile.mkstemp(suffix=".apk")
    os.write(fd, b"PK\x03\x04fake apk content for hashing")
    os.close(fd)
    return path


# ---------------------------------------------------------------------------
# Tests: _string_entropy
# ---------------------------------------------------------------------------

class TestStringEntropy:
    """Tests for Shannon entropy computation."""

    def test_empty_string(self):
        analyzer = _make_analyzer()
        assert analyzer._string_entropy("") == 0.0

    def test_single_char(self):
        analyzer = _make_analyzer()
        assert analyzer._string_entropy("a") == 0.0

    def test_repeated_char(self):
        analyzer = _make_analyzer()
        assert analyzer._string_entropy("aaaa") == 0.0

    def test_two_equal_chars(self):
        analyzer = _make_analyzer()
        # "ab" -> entropy = 1.0
        assert abs(analyzer._string_entropy("ab") - 1.0) < 0.01

    def test_higher_entropy(self):
        analyzer = _make_analyzer()
        # More variety = higher entropy
        low = analyzer._string_entropy("aabb")
        high = analyzer._string_entropy("abcd")
        assert high > low

    def test_url_string_entropy(self):
        analyzer = _make_analyzer()
        entropy = analyzer._string_entropy("https://evil.com/payload")
        assert entropy > 2.0  # URLs have moderate entropy


# ---------------------------------------------------------------------------
# Tests: _extract_strings
# ---------------------------------------------------------------------------

class TestExtractStrings:
    """Tests for DEX string extraction."""

    def test_basic_extraction(self):
        analyzer = _make_analyzer()
        dex = _make_mock_dex(["hello", "world"])
        result = analyzer._extract_strings([dex])

        assert len(result) == 2
        assert result[0]["string"] == "hello"
        assert result[1]["string"] == "world"

    def test_string_fields_present(self):
        analyzer = _make_analyzer()
        dex = _make_mock_dex(["test_string"])
        result = analyzer._extract_strings([dex])

        entry = result[0]
        assert "string" in entry
        assert "string_encoding" in entry
        assert "string_offset" in entry
        assert "string_length" in entry
        assert "string_entropy" in entry
        assert entry["string_encoding"] == "UTF8"
        assert entry["string_length"] == len("test_string")

    def test_deduplication_across_dex(self):
        """Same string in multiple DEX files is only extracted once."""
        analyzer = _make_analyzer()
        dex1 = _make_mock_dex(["shared", "unique1"])
        dex2 = _make_mock_dex(["shared", "unique2"])
        result = analyzer._extract_strings([dex1, dex2])

        string_values = [s["string"] for s in result]
        assert string_values.count("shared") == 1
        assert "unique1" in string_values
        assert "unique2" in string_values
        assert len(result) == 3

    def test_empty_strings_filtered(self):
        analyzer = _make_analyzer()
        dex = _make_mock_dex(["", "valid", None, "also_valid"])
        result = analyzer._extract_strings([dex])

        string_values = [s["string"] for s in result]
        assert "" not in string_values
        assert None not in string_values
        assert "valid" in string_values
        assert "also_valid" in string_values

    def test_no_dex_files(self):
        analyzer = _make_analyzer()
        result = analyzer._extract_strings([])
        assert result == []

    def test_dex_get_strings_returns_none(self):
        analyzer = _make_analyzer()
        dex = MagicMock()
        dex.get_strings.return_value = None
        result = analyzer._extract_strings([dex])
        assert result == []

    def test_dex_get_strings_exception(self):
        analyzer = _make_analyzer()
        dex = MagicMock()
        dex.get_strings.side_effect = RuntimeError("corrupt DEX")
        result = analyzer._extract_strings([dex])
        assert result == []

    def test_entropy_computed(self):
        analyzer = _make_analyzer()
        dex = _make_mock_dex(["abcdefgh"])
        result = analyzer._extract_strings([dex])
        assert result[0]["string_entropy"] > 0.0

    def test_incremental_offsets(self):
        """String offsets are incremented sequentially."""
        analyzer = _make_analyzer()
        dex = _make_mock_dex(["a", "b", "c"])
        result = analyzer._extract_strings([dex])

        offsets = [s["string_offset"] for s in result]
        assert offsets == [0, 1, 2]

    def test_url_strings_preserved(self):
        """URL strings are extracted without modification."""
        analyzer = _make_analyzer()
        dex = _make_mock_dex([
            "https://evil.com/payload",
            "http://c2.malware.org/gate",
        ])
        result = analyzer._extract_strings([dex])
        strings = [s["string"] for s in result]
        assert "https://evil.com/payload" in strings
        assert "http://c2.malware.org/gate" in strings


# ---------------------------------------------------------------------------
# Tests: strings in extract() integration
# ---------------------------------------------------------------------------

class TestExtractStringsIntegration:
    """Tests that strings are included in extract() results."""

    @patch("redb.extractors.decompiler.apk.analyzer.APKCodeAnalyzer._run_androguard")
    @patch("redb.extractors.decompiler.apk.analyzer.ApktoolDisassembler")
    @patch("redb.extractors.decompiler.apk.analyzer.JADXDecompiler")
    def test_extract_includes_strings(self, mock_jadx, mock_apktool, mock_androguard):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer

        mock_dex = _make_mock_dex(["hello", "world"])
        mock_analysis = MagicMock()
        mock_analysis.get_methods.return_value = []
        mock_androguard.return_value = (MagicMock(), [mock_dex], mock_analysis)

        analyzer = APKCodeAnalyzer("/fake/path.apk", log=MagicMock())
        results = analyzer.extract()

        assert "strings" in results
        assert len(results["strings"]) == 2
        assert results["strings"][0]["string"] == "hello"
        analyzer.cleanup()

    @patch("redb.extractors.decompiler.apk.analyzer.APKCodeAnalyzer._run_androguard")
    @patch("redb.extractors.decompiler.apk.analyzer.ApktoolDisassembler")
    @patch("redb.extractors.decompiler.apk.analyzer.JADXDecompiler")
    def test_extract_strings_error_is_non_fatal(self, mock_jadx, mock_apktool, mock_androguard):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer

        # Return a bad dex list that will cause _extract_strings to fail
        mock_analysis = MagicMock()
        mock_analysis.get_methods.return_value = []
        # dexs is not iterable — triggers the except block
        mock_androguard.return_value = (MagicMock(), 42, mock_analysis)

        analyzer = APKCodeAnalyzer("/fake/path.apk", log=MagicMock())
        results = analyzer.extract()

        # Should not crash, strings should be empty, error recorded
        assert results["strings"] == []
        assert any(
            e.get("error_location") == "strings"
            for e in results["analysis_errors"]
        )
        analyzer.cleanup()


# ---------------------------------------------------------------------------
# Tests: DecompileAPK strings export table
# ---------------------------------------------------------------------------

class TestDecompileAPKStringsExport:
    """Tests for strings table in DecompileAPK.prepare_export_data()."""

    def _make_extractor_with_strings(self, strings_data):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        ext = DecompileAPK(apk_path, MagicMock())
        ext.analysis_results = {
            "sha256": "a" * 64,
            "sha1": "b" * 40,
            "md5": "c" * 32,
            "decompiled_content": [],
            "decompiled_refs": [],
            "smali_content": [],
            "smali_refs": [],
            "similarity_metrics": [],
            "strings": strings_data,
            "analysis_errors": [],
        }
        return ext, apk_path

    def test_strings_table_present(self):
        ext, path = self._make_extractor_with_strings([
            {"string": "hello", "string_encoding": "UTF8",
             "string_offset": 0, "string_length": 5, "string_entropy": 2.32}
        ])
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            assert "strings_raw" in export
        finally:
            os.unlink(path)

    def test_strings_table_schema(self):
        ext, path = self._make_extractor_with_strings([
            {"string": "hello", "string_encoding": "UTF8",
             "string_offset": 0, "string_length": 5, "string_entropy": 2.32}
        ])
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            sr = export["strings_raw"]
            assert sr["table"] == "code_binja_strings_raw"
            assert len(sr["column_names"]) == 8
            assert len(sr["column_type_names"]) == 8
            assert "sha256" in sr["column_names"]
            assert "string" in sr["column_names"]
            assert "string_raw" in sr["column_names"]
            assert "string_encoding" in sr["column_names"]
            assert "string_offset" in sr["column_names"]
            assert "string_length" in sr["column_names"]
            assert "string_raw_length" in sr["column_names"]
            assert "string_entropy" in sr["column_names"]
            assert len(sr["data"]) == 1
            assert len(sr["data"][0]) == 8
        finally:
            os.unlink(path)

    def test_strings_sha256_propagated(self):
        ext, path = self._make_extractor_with_strings([
            {"string": "test", "string_encoding": "UTF8",
             "string_offset": 0, "string_length": 4, "string_entropy": 2.0}
        ])
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            row = export["strings_raw"]["data"][0]
            assert row[0] == "a" * 64  # sha256 is first column
        finally:
            os.unlink(path)

    def test_empty_strings_not_exported(self):
        ext, path = self._make_extractor_with_strings([])
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            assert "strings_raw" not in export
        finally:
            os.unlink(path)


# ---------------------------------------------------------------------------
# Tests: IOCExtractorFromResults with APK format
# ---------------------------------------------------------------------------

class TestIOCExtractorAPKFormat:
    """Tests that IOCExtractorFromResults handles APK analysis_results."""

    def setup_method(self):
        self.log = MagicMock()

    def test_extract_iocs_from_apk_strings(self):
        """IOCs extracted from APK strings (same format as Binja)."""
        results = {
            "strings": [
                {"string": "https://evil.com/payload", "string_offset": 0},
                {"string": "Contact [email protected]", "string_offset": 1},
            ],
            "decompiled": [],
            "decompiled_content": [],
        }
        extractor = IOCExtractorFromResults(results, sha256="a" * 64, log=self.log)
        iocs = extractor.extract()

        url_iocs = [i for i in iocs if i.ioc_type == IOCType.URL]
        assert len(url_iocs) >= 1
        assert any("evil.com" in i.ioc_value for i in url_iocs)

    def test_extract_iocs_from_apk_decompiled_content(self):
        """IOCs extracted from APK's decompiled_content key."""
        results = {
            "strings": [],
            "decompiled": [],  # Binja format — empty
            "decompiled_content": [  # APK format
                {
                    "decompiled_method": "connect('https://c2.malware.org/gate');",
                    "decompiled_method_hash": "hash123",
                    "method_type": "USER",
                }
            ],
        }
        extractor = IOCExtractorFromResults(results, sha256="a" * 64, log=self.log)
        iocs = extractor.extract()

        url_iocs = [i for i in iocs if i.ioc_type == IOCType.URL]
        assert len(url_iocs) >= 1

    def test_apk_library_methods_skipped(self):
        """LIBRARY methods in decompiled_content are skipped."""
        results = {
            "strings": [],
            "decompiled": [],
            "decompiled_content": [
                {
                    "decompiled_method": "https://should-skip.com",
                    "decompiled_method_hash": "lib_hash",
                    "method_type": "LIBRARY",
                }
            ],
        }
        extractor = IOCExtractorFromResults(results, sha256="a" * 64, log=self.log)
        iocs = extractor.extract()
        assert len(iocs) == 0

    def test_combined_binja_and_apk_sources(self):
        """Both Binja and APK format decompiled entries are processed."""
        results = {
            "strings": [],
            "decompiled": [
                {
                    "decompiled_function": "call('https://binja.example.com');",
                    "decompiled_function_hash": "binja_hash",
                    "function_type": "USER",
                }
            ],
            "decompiled_content": [
                {
                    "decompiled_method": "send('https://apk.example.com');",
                    "decompiled_method_hash": "apk_hash",
                    "method_type": "USER",
                }
            ],
        }
        extractor = IOCExtractorFromResults(results, sha256="a" * 64, log=self.log)
        iocs = extractor.extract()

        url_iocs = [i for i in iocs if i.ioc_type == IOCType.URL]
        urls = [i.ioc_value for i in url_iocs]
        assert any("binja.example.com" in u for u in urls)
        assert any("apk.example.com" in u for u in urls)

    def test_apk_results_only(self):
        """Works when only APK keys are present (no 'decompiled' key)."""
        results = {
            "strings": [
                {"string": "https://evil.com", "string_offset": 0},
            ],
            "decompiled_content": [
                {
                    "decompiled_method": "x = 1",
                    "decompiled_method_hash": "h",
                    "method_type": "USER",
                }
            ],
        }
        extractor = IOCExtractorFromResults(results, sha256="a" * 64, log=self.log)
        iocs = extractor.extract()
        # Should not crash, and should find URL from strings
        url_iocs = [i for i in iocs if i.ioc_type == IOCType.URL]
        assert len(url_iocs) >= 1

    def test_source_type_is_string_for_strings(self):
        results = {
            "strings": [
                {"string": "https://evil.com/test", "string_offset": 42},
            ],
            "decompiled_content": [],
        }
        extractor = IOCExtractorFromResults(results, sha256="a" * 64, log=self.log)
        iocs = extractor.extract()
        url_iocs = [i for i in iocs if i.ioc_type == IOCType.URL]
        assert url_iocs[0].source_type == SourceType.STRING
        assert url_iocs[0].source_identifier == "42"

    def test_source_type_is_decompiled_for_methods(self):
        results = {
            "strings": [],
            "decompiled_content": [
                {
                    "decompiled_method": "https://evil.com/method",
                    "decompiled_method_hash": "myhash",
                    "method_type": "USER",
                }
            ],
        }
        extractor = IOCExtractorFromResults(results, sha256="a" * 64, log=self.log)
        iocs = extractor.extract()
        url_iocs = [i for i in iocs if i.ioc_type == IOCType.URL]
        assert url_iocs[0].source_type == SourceType.DECOMPILED_FUNCTION
        assert url_iocs[0].source_identifier == "myhash"


# ---------------------------------------------------------------------------
# Tests: Worker IOC wiring for APK
# ---------------------------------------------------------------------------

class TestWorkerAPKIOCWiring:
    """Tests that workers.py wires IOC extraction for APK."""

    def test_worker_source_contains_ioc_for_apk(self):
        """Verify workers.py source has IOC extraction in APK branch."""
        import inspect
        from redb import workers
        source = inspect.getsource(workers)
        # APK branch should import IOCExtractorFromResults
        assert "IOCExtractorFromResults" in source
        # Should be in the APK section (near DecompileAPK)
        apk_section = source[source.index("DecompileAPK("):]
        ioc_pos = apk_section.find("IOCExtractorFromResults")
        assert ioc_pos != -1, "IOCExtractorFromResults not found after DecompileAPK"