Ishani Chakraborty

22 papers A* 4A 1B 7C 1Journal 3Unranked 6
YearRankTypeTitle / Venue / Authors
2025 B conf
IEEE Big Data
Ishani Chakraborty
2025 B conf
IEEE Big Data
Ishani Chakraborty
2024 B conf
IEEE Big Data
Ishani Chakraborty, Genie Rubaiyat
2024 conf
VR Workshops
Dan Bohus, Sean Andrist, Nick Saw, Ann Paradiso, Ishani Chakraborty, Mahdi Rad
2024 J jnl
CoRR
Dan Bohus, Sean Andrist, Nick Saw, Ann Paradiso, Ishani Chakraborty, Mahdi Rad
2024 B conf
IEEE Big Data
Ishani Chakraborty
2023 A* conf
ICCV
Xin Wang, Taein Kwon, Mahdi Rad, Bowen Pan, Ishani Chakraborty, Sean Andrist, Dan Bohus, Ashley Feniello, Bugra Tekin, Felipe Vieira Frujeri, Neel Joshi, Marc Pollefeys
2023 J jnl
CoRR
Xin Wang, Taein Kwon, Mahdi Rad, Bowen Pan, Ishani Chakraborty, Sean Andrist, Dan Bohus, Ashley Feniello, Bugra Tekin, Felipe Vieira Frujeri, Neel Joshi, Marc Pollefeys
2021 conf
IEEE BigData
Ishani Chakraborty
2020 C conf
ICMLA
Ishani Chakraborty
2019 A* conf
ICRA
Ishani Chakraborty, Gang Hua
2018 conf
IEEE BigData
Ishani Chakraborty
2014 conf
HuEvent@MM
Ishani Chakraborty, Hui Cheng, Omar Javed
2014 conf
TRECVID
Hui Cheng, Jingen Liu, Ishani Chakraborty, Guang Chen, Qiguang Liu, Mohamed Elhoseiny, Gary Gan, Ajay Divakaran, Harpreet S. Sawhney, James Allan, John Foley, Mubarak Shah, Afshin Dehghan, Michael Witbrock, Jon Curtis
2013 A* conf
CVPR
Ishani Chakraborty, Hui Cheng, Omar Javed
2013 conf
TRECVID
Jingen Liu, Hui Cheng, Omar Javed, Qian Yu, Ishani Chakraborty, Weiyu Zhang, Ajay Divakaran, Harpreet S. Sawhney, James Allan, R. Manmatha, John Foley, Mubarak Shah, Afshin Dehghan, Michael Witbrock, Jon Curtis, Gerald Friedland
2013 B conf
FG
Ishani Chakraborty, Ahmed M. Elgammal, Randall S. Burd
2013 J jnl
CoRR
Ishani Chakraborty, Ahmed M. Elgammal
2010 B conf
ICPR
Ishani Chakraborty, Ahmed M. Elgammal
2009 A conf
BMVC
Ishani Chakraborty, Ahmed M. Elgammal
2009 A* conf
CHI
Xianjun Sam Zheng, Ishani Chakraborty, James Jeng-Weei Lin, Robert Rauschenberger
2008 B conf
ICPR
Ishani Chakraborty, Ahmed M. Elgammal
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