Vincent Berry

42 papers A* 1A 2B 5C 2Misc 2Journal 20Unranked 7
YearRankTypeTitle / Venue / Authors
2024 A conf
ICWS
Vincent Berry, Arnaud Castelltort, Benoit Lange, Joan Teriihoania, Chouki Tibermacine, Catia Trubiani
2022 conf
ITiCSE (2)
Jeremiah J. Blanchard, John R. Hott, Vincent Berry, Rebecca Carroll, Bob Edmison, Richard Glassey, Oscar Karnalim, Brian Plancher, Seán Russell
2022 conf
ITiCSE (1)
Vincent Berry, Arnaud Castelltort, Chrysta Pelissier, Marion Rousseau, Chouki Tibermacine
2022 conf
ITiCSE-WGR
Jeremiah J. Blanchard, John R. Hott, Vincent Berry, Rebecca Carroll, Bob Edmison, Richard Glassey, Oscar Karnalim, Brian Plancher, Seán Russell
2021 J jnl
PLoS Comput. Biol.
Charles-Elie Rabier, Vincent Berry, Marnus Stoltz, João D. Santos, Wensheng Wang, Jean-Christophe Glaszmann, Fabio Pardi, Céline Scornavacca
2020 B conf
SOFSEM
Vincent Berry, Céline Scornavacca, Mathias Weller
2018 J jnl
Bioinform.
Wandrille Duchemin, Guillaume Gence, Anne-Muriel Arigon Chifolleau, Lars Arvestad, Mukul S. Bansal, Vincent Berry, Bastien Boussau, François Chevenet, Nicolas Comte, Adrián A. Davín, Christophe Dessimoz, David Dylus, Damir Hasic, Diego Mallo, Rémi Planel, David Posada, Céline Scornavacca, Gergely J. Szöllosi, Louxin Zhang, Eric Tannier, Vincent Daubin
2016 ch.
Encyclopedia of Algorithms
Vincent Berry
2016 J jnl
Bioinform.
François Chevenet, Jean-Philippe Doyon, Céline Scornavacca, Edwin Jacox, Emmanuelle Jousselin, Vincent Berry
2013 J jnl
Algorithms Mol. Biol.
Thi Hau Nguyen, Vincent Ranwez, Stéphanie Pointet, Anne-Muriel Arigon Chifolleau, Jean-Philippe Doyon, Vincent Berry
2013 J jnl
J. Bioinform. Comput. Biol.
Céline Scornavacca, Wojciech Paprotny, Vincent Berry, Vincent Ranwez
2012 C conf
WABI
Thi Hau Nguyen, Jean-Philippe Doyon, Stéphanie Pointet, Anne-Muriel Arigon Chifolleau, Vincent Ranwez, Vincent Berry
2012 J jnl
J. Bioinform. Comput. Biol.
Philippe Gambette, Vincent Berry, Christophe Paul
2011 J jnl
Inf. Comput.
Céline Scornavacca, Vincent Berry, Vincent Ranwez
2011 J jnl
Briefings Bioinform.
Jean-Philippe Doyon, Vincent Ranwez, Vincent Daubin, Vincent Berry
2010 conf
RECOMB-CG
Jean-Philippe Doyon, Céline Scornavacca, Konstantin Yu. Gorbunov, Gergely J. Szöllosi, Vincent Ranwez, Vincent Berry
2010 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Sylvain Guillemot, Vincent Berry
2010 J jnl
Bioinform.
François Chevenet, Olivier Croce, Maxime Hebrard, Richard Christen, Vincent Berry
2009 J jnl
Bioinform.
Daniel H. Huson, Regula Rupp, Vincent Berry, Philippe Gambette, Christophe Paul
2009 C conf
LATA
Céline Scornavacca, Vincent Berry, Vincent Ranwez
2009 J jnl
ACM Trans. Algorithms
Vincent Berry, Christophe Paul, Sylvain Guillemot, François Nicolas
2009 J jnl
Discret. Appl. Math.
Sylvain Guillemot, François Nicolas, Vincent Berry, Christophe Paul
2009 B conf
CPM
Philippe Gambette, Vincent Berry, Christophe Paul
2008 J jnl
Algorithmica
Vincent Berry, Zeshan Peng, H. F. Ting
2008 ch.
Encyclopedia of Algorithms
Vincent Berry
2008 book
Vincent Berry
2008 J jnl
BMC Bioinform.
Céline Scornavacca, Vincent Berry, Vincent Lefort, Emmanuel J. P. Douzery, Vincent Ranwez
2007 J jnl
Eur. J. Oper. Res.
R. R. K. Sharma, Vincent Berry
2007 B conf
CPM
Sylvain Guillemot, Vincent Berry
2007 J jnl
J. Discrete Algorithms
Vincent Berry, François Nicolas
2006 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Vincent Berry, François Nicolas
2005 Misc conf
COCOON
Vincent Berry, Sylvain Guillemot, François Nicolas, Christophe Paul
2004 B conf
CPM
Vincent Berry, François Nicolas
2001 J jnl
Adv. Appl. Math.
David Bryant, Vincent Berry
2000 A* conf
SODA
Vincent Berry, David Bryant, Tao Jiang, Paul E. Kearney, Ming Li, Todd Wareham, Haoyong Zhang
2000 J jnl
Theor. Comput. Sci.
Vincent Berry, Olivier Gascuel
1999 B conf
RECOMB
Vincent Berry, David Bryant
1999 A conf
ESA
Vincent Berry, Tao Jiang, Paul E. Kearney, Ming Li, Todd Wareham
1997 Misc conf
COCOON
Vincent Berry, Olivier Gascuel
1995 conf
JFPLC
Vincent Berry, Philippe Ézéquel
1994 conf
JFPLC
Vincent Berry, Philippe Ézéquel
1993 conf
ILPS
Vincent Berry, Philippe Ézéquel
redb/extractors/apk_extractors/apk_native_libs.py
← Index redb/extractors/apk_extractors/apk_native_libs.py python
import fnmatch
import hashlib
import inspect
from datetime import datetime, timezone
from typing import Any

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

# Known packer/protector native library names
KNOWN_PACKER_LIBS = {
    # Jiagu (360/Qihoo)
    "libjiagu.so", "libjiagu_a64.so", "libjiagu_x86.so", "libjiagu_x64.so",
    # Bangcle/SecNeo
    "libsecexe.so", "libsecmain.so", "libSecShell.so",
    # Baidu
    "libbaiduprotect.so",
    # Tencent (Legu)
    "libtxAppProtect.so", "libBugly.so",
    # iJiami
    "libexec.so", "libexecmain.so",
    # Alibaba
    "libmobisec.so", "libaliprotect.so",
    # APKProtect
    "libAPKProtect.so",
    # Pangxie (Pangolin)
    "libdexjni.so",
    # DexProtector
    "libdexprotector.so",
    # AppSolid
    "libAppSolid.so",
    # Kiwisec
    "libkwscmm.so",
    # DingXiang
    "libx3g.so",
    # NQ Shield
    "libnqshield.so",
    # Generic / other
    "libprotectClass.so",
    "libDexHelper.so",
    "libdexloader.so",
    "libfdog.so",
}

# Glob-style patterns for packer libs (e.g. libshella-*.so)
KNOWN_PACKER_PATTERNS = [
    "libshella-*.so",
    "libshell-super.*.so",
]


def is_known_packer_lib(filename):
    """Check if a native library filename matches known packer signatures."""
    if filename in KNOWN_PACKER_LIBS:
        return True
    for pattern in KNOWN_PACKER_PATTERNS:
        if fnmatch.fnmatch(filename, pattern):
            return True
    return False


class APKNativeLibExtractor(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.native_libs = []
        self.abis = set()
        self.log.debug(inspect.currentframe().f_code.co_name)

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

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

        self.native_libs = []
        self.abis = set()

        zf = self._get_zip_file()
        if not zf:
            return None

        with zf:
            for info in zf.infolist():
                if not (info.filename.startswith("lib/") and info.filename.endswith(".so")):
                    continue
                parts = info.filename.split("/")
                if len(parts) < 3:
                    continue

                abi = parts[1]
                filename = parts[-1]
                self.abis.add(abi)

                try:
                    data = zf.read(info.filename)
                    lib_sha256 = hashlib.sha256(data).hexdigest()
                except Exception as e:
                    self.log.warning(f"Error reading native lib {info.filename}: {e}")
                    continue

                self.native_libs.append(APKNativeLib(
                    abi=abi,
                    filename=filename,
                    size=info.file_size,
                    sha256=lib_sha256,
                    is_known_packer=is_known_packer_lib(filename),
                ))

        if not self.native_libs:
            return None

        return {
            "native_lib_count": len(self.native_libs),
            "abis": sorted(self.abis),
            "native_libs": self.native_libs,
            "known_packer_libs": [
                lib for lib in self.native_libs if lib.is_known_packer
            ],
        }

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

            current_time = datetime.now(timezone.utc)
            data = []
            for lib in self.native_libs:
                data.append([
                    self.sha256,
                    lib.abi,
                    lib.filename,
                    lib.size,
                    lib.sha256,
                    int(lib.is_known_packer),
                    current_time,
                ])

            column_names = [
                'sha256', 'lib_abi', 'lib_filename', 'lib_size',
                'lib_sha256', 'lib_is_known_packer', 'analysis_date',
            ]

            column_type_names = [
                'FixedString(64)', 'LowCardinality(String)', 'String', 'UInt64',
                'FixedString(64)', 'UInt8', "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

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