Ilkyoo Choi

48 papers C 1Journal 47
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Comb. Theory B
Peter Bradshaw, Ilkyoo Choi, Alexandr V. Kostochka, Jingwei Xu
2025 J jnl
Discret. Math.
Eun-Kyung Cho, Ilkyoo Choi, Hyemin Kwon, Boram Park
2025 J jnl
Discret. Appl. Math.
Eun-Kyung Cho, Ilkyoo Choi, Hyemin Kwon, Boram Park
2024 J jnl
Discret. Appl. Math.
Eun-Kyung Cho, Ilkyoo Choi, Bernard Lidický
2023 J jnl
J. Graph Theory
Eun-Kyung Cho, Ilkyoo Choi, Hyemin Kwon, Boram Park
2023 J jnl
Discret. Math.
Eun-Kyung Cho, Ilkyoo Choi, Hyemin Kwon, Boram Park
2023 J jnl
J. Graph Theory
Eun-Kyung Cho, Ilkyoo Choi, Boram Park
2023 J jnl
Discret. Math.
Ilkyoo Choi, Henry A. Kierstead, Landon Rabern
2022 J jnl
J. Graph Theory
Eun-Kyung Cho, Ilkyoo Choi, Ringi Kim, Boram Park, Tingting Shan, Xuding Zhu
2022 J jnl
Discret. Appl. Math.
Ilkyoo Choi, Felix Christian Clemen, Michael Ferrara, Paul Horn, Fuhong Ma, Tomás Masarík
2022 J jnl
Discret. Math.
Eun-Kyung Cho, Ilkyoo Choi, Boram Park
2021 J jnl
Discret. Math.
Ilkyoo Choi, Minseong Kim, Kiwon Seo
2021 J jnl
Graphs Comb.
Eun-Kyung Cho, Ilkyoo Choi, Yiting Jiang, Ringi Kim, Boram Park, Jiayan Yan, Xuding Zhu
2021 J jnl
Eur. J. Comb.
Eun-Kyung Cho, Ilkyoo Choi, Boram Park
2021 J jnl
Discret. Appl. Math.
Ilkyoo Choi, Boram Park
2021 J jnl
Discret. Math.
Eun-Kyung Cho, Ilkyoo Choi, Boram Park
2021 J jnl
J. Graph Theory
Eun-Kyung Cho, Ilkyoo Choi, Ringi Kim, Boram Park
2020 J jnl
Discret. Math.
Ilkyoo Choi, Michitaka Furuya, Ringi Kim, Boram Park
2020 J jnl
Discret. Appl. Math.
Ilkyoo Choi, Jinha Kim
2020 J jnl
Electron. J. Comb.
Ilkyoo Choi, Jinha Kim, Boram Park
2020 J jnl
Comb.
Ilkyoo Choi, Daniel W. Cranston, Théo Pierron
2020 J jnl
CoRR
Ilkyoo Choi, Felix Christian Clemen, Michael Ferrara, Paul Horn, Fuhong Ma, Tomás Masarík
2020 J jnl
Discret. Math.
Ilkyoo Choi, Bernard Lidický, Florian Pfender
2020 J jnl
Electron. J. Comb.
Ilkyoo Choi, Ringi Kim, Boram Park
2020 J jnl
Discret. Math.
Ilkyoo Choi, François Dross, Pascal Ochem
2020 J jnl
Discret. Math.
Ilkyoo Choi, Weonyoung Joo, Minki Kim
2019 J jnl
Discret. Math.
Ilkyoo Choi, Ringi Kim, Boram Park
2019 J jnl
J. Graph Theory
Ilkyoo Choi, Louis Esperet
2019 J jnl
Graphs Comb.
Ilkyoo Choi, Ringi Kim, Alexandr V. Kostochka, Boram Park, Douglas B. West
2019 J jnl
J. Comb. Optim.
Ilkyoo Choi, Jinha Kim, Minki Kim
2019 J jnl
J. Graph Theory
Ho-Jin Choi, Ilkyoo Choi, Jisu Jeong, Sang-il Oum
2019 J jnl
CoRR
Ilkyoo Choi, François Dross, Pascal Ochem
2019 J jnl
Discret. Math.
Ilkyoo Choi, Gexin Yu, Xia Zhang
2018 J jnl
Eur. J. Comb.
Ilkyoo Choi, Jan Ekstein, Premysl Holub, Bernard Lidický
2018 J jnl
SIAM J. Discret. Math.
Ilkyoo Choi, Chun-Hung Liu, Sang-il Oum
2018 J jnl
Discret. Math.
Ilkyoo Choi, Junehyuk Jung, Minki Kim
2018 J jnl
Eur. J. Comb.
Ilkyoo Choi, Jaehoon Kim, Alexandr V. Kostochka, André Raspaud
2017 J jnl
J. Graph Theory
Ho-Jin Choi, Ilkyoo Choi, Jisu Jeong, Geewon Suh
2017 J jnl
J. Comb. Theory B
Ilkyoo Choi, O-joung Kwon, Sang-il Oum
2017 J jnl
J. Graph Theory
Ilkyoo Choi
2016 J jnl
J. Graph Theory
Ilkyoo Choi, Bernard Lidický, Derrick Stolee
2016 J jnl
Discret. Math.
Ilkyoo Choi, Jaehoon Kim, Suil O
2015 J jnl
Discret. Math.
Ilkyoo Choi, André Raspaud
2014 C conf
IWOCA
Ilkyoo Choi, Jan Ekstein, Premysl Holub, Bernard Lidický
2014 J jnl
Electron. J. Comb.
Ilkyoo Choi, Jaehoon Kim, Amelia Tebbe, Douglas B. West
2014 J jnl
Discret. Math.
Ilkyoo Choi, Haihui Zhang
2012 J jnl
Theor. Comput. Sci.
James M. Carraher, Ilkyoo Choi, Michelle Delcourt, Lawrence H. Erickson, Douglas B. West
2011 J jnl
Theor. Comput. Sci.
Francine Blanchet-Sadri, Ilkyoo Choi, Robert Mercas
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