Osmo Tervonen

16 papers B 1Journal 12Unranked 3
YearRankTypeTitle / Venue / Authors
2022 conf
PerCom Workshops
Mariella Särestöniemi, Jarmo Reponen, Marko Sonkki, Sami Myllymäki, Carlos A. Pomalaza-Raez, Osmo Tervonen, Teemu Myllylä
2022 J jnl
CoRR
Tommi Keski-Filppula, Marko Nikki, Marianne Haapea, Naglis Ramanauskas, Osmo Tervonen
2020 B conf
ACIVS
Roman A. Solovyev, Iaroslav Melekhov, Timo Lesonen, Elias Vaattovaara, Osmo Tervonen, Aleksei Tiulpin
2020 J jnl
CoRR
Abu Mohammed Raisuddin, Elias Vaattovaara, Mika Nevalainen, Marko Nikki, Elina Järvenpää, Kaisa Makkonen, Pekka Pinola, Tuula Palsio, Arttu Niemensivu, Osmo Tervonen, Aleksei Tiulpin
2019 J jnl
CoRR
Roman A. Solovyev, Iaroslav Melekhov, Timo Lesonen, Elias Vaattovaara, Osmo Tervonen, Aleksei Tiulpin
2017 J jnl
NeuroImage
Ville Raatikainen, Niko Huotari, Vesa Korhonen, Aleksi Rasila, Janne Kananen, Lauri Raitamaa, Tuija Keinänen, Jussi Kantola, Osmo Tervonen, Vesa Kiviniemi
2016 conf
EMBC
Jie Chen, Xianbiao Qi, Osmo Tervonen, Olli Silvén, Guoying Zhao, Matti Pietikäinen
2012 J jnl
J. Sensors
Teemu Myllylä, Vesa Korhonen, Erkki Vihriälä, Hannu Sorvoja, Tuija Hiltunen, Osmo Tervonen, Vesa Kiviniemi
2011 J jnl
Brain Connect.
Vesa Kiviniemi, Tapani Vire, Jukka J. Remes, Ahmed Abou Elseoud, Tuomo Starck, Osmo Tervonen, Juha Nikkinen
2011 J jnl
NeuroImage
Jukka J. Remes, Tuomo Starck, Juha Nikkinen, Esa Ollila, Christian F. Beckmann, Osmo Tervonen, Vesa Kiviniemi, Olli Silvén
2009 J jnl
Frontiers Neuroinformatics
Vesa Kiviniemi, Jukka J. Remes, Tuomo Starck, Juha Nikkinen, Marianne Haapea, Olli Silvén, Osmo Tervonen
2005 J jnl
NeuroImage
Minna Mäkiranta, Jyrki Ruohonen, Kalervo Suominen, Jaakko Niinimäki, Eila Sonkajarvi, Vesa Kiviniemi, Tapio Seppänen, Seppo Alahuhta, Ville Jäntti, Osmo Tervonen
2004 J jnl
NeuroImage
Minna Mäkiranta, Jyrki Ruohonen, Kalervo Suominen, Eila Sonkajarvi, Timo Salomäki, Vesa Kiviniemi, Tapio Seppänen, Seppo Alahuhta, Ville Jäntti, Osmo Tervonen
2003 J jnl
NeuroImage
Vesa Kiviniemi, Juha-Heikki Kantola, Jukka Jauhiainen, Aapo Hyvärinen, Osmo Tervonen
2000 conf
EuroPACS
Jarmo Reponen, Jaakko Niinimäki, Arto Holopainen, Pekka Jartti, Eero Ilkko, Ari Karttunen, Timo Kumpulainen, Osmo Tervonen, Eija Pääkkö
1996 J jnl
J. Digit. Imaging
E. Rauvala, L. Jyrkinen, A. Koivula, Kalervo Suominen, Osmo Tervonen
redb/extractors/decompiler/apk/apktool_wrapper.py
← Index redb/extractors/decompiler/apk/apktool_wrapper.py python
"""Apktool disassembler subprocess wrapper.

Manages apktool subprocess execution for smali disassembly,
following the CAPA extractor subprocess pattern.
"""

import os
import signal
import subprocess
from typing import List, Optional


class ApktoolDisassembler:
    """Subprocess wrapper for apktool smali disassembly."""

    def __init__(
        self, apktool_path: str = None, timeout: int = None, log=None
    ):
        self.apktool_path = apktool_path or os.getenv("APKTOOL_PATH", "apktool")
        self.timeout = timeout or int(os.getenv("APKTOOL_TIMEOUT", "120"))
        self.log = log

    def disassemble(self, apk_path: str, output_dir: str) -> bool:
        """Run apktool disassembly on an APK file.

        Returns True on success, False on failure.
        """
        cmd = [
            self.apktool_path,
            "d",
            "--no-res",
            "--force",
            "--output", output_dir,
            apk_path,
        ]

        try:
            process = subprocess.Popen(
                cmd,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid,
            )

            try:
                stdout, stderr = process.communicate(timeout=self.timeout)
                if process.returncode != 0:
                    if self.log:
                        self.log.warning(
                            f"apktool returned non-zero exit code {process.returncode}: "
                            f"{stderr[:500] if stderr else 'no stderr'}"
                        )
                    return False
                return True

            except subprocess.TimeoutExpired:
                if self.log:
                    self.log.error(
                        f"apktool timed out after {self.timeout}s"
                    )
                try:
                    os.killpg(os.getpgid(process.pid), signal.SIGTERM)
                    process.wait(timeout=3)
                except (ProcessLookupError, subprocess.TimeoutExpired):
                    try:
                        os.killpg(os.getpgid(process.pid), signal.SIGKILL)
                    except ProcessLookupError:
                        pass
                return False

        except FileNotFoundError:
            if self.log:
                self.log.error(
                    f"apktool not found at '{self.apktool_path}'. "
                    "Install apktool or set APKTOOL_PATH env var."
                )
            return False
        except Exception as e:
            if self.log:
                self.log.error(f"apktool execution error: {e}")
            return False

    def get_smali_directories(self, output_dir: str) -> List[str]:
        """Return paths to all smali output directories.

        Handles multi-DEX: smali/, smali_classes2/, smali_classes3/, etc.
        """
        smali_dirs = []
        if not os.path.isdir(output_dir):
            return smali_dirs

        for entry in sorted(os.listdir(output_dir)):
            if entry == "smali" or entry.startswith("smali_classes"):
                full_path = os.path.join(output_dir, entry)
                if os.path.isdir(full_path):
                    smali_dirs.append(full_path)

        return smali_dirs