Kanak Kalita

22 papers Journal 20Unranked 2
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Comput. Intell. Syst.
Kanak Kalita, Pradeep Jangir, Sundaram B. Pandya, Ahmed Ibrahim Alzahrani, Fahad Alblehai, Laith Abualigah, Absalom E. Ezugwu
2024 J jnl
Informatica
Kanak Kalita, Narayanan Ganesh, Rajendran Shankar, Shankar Chakraborty
2024 J jnl
IEEE Access
Priyank Trivedi, Jiten Shah, Robert Cep, Laith Abualigah, Kanak Kalita
2024 J jnl
Expert Syst. J. Knowl. Eng.
Subham Pal, Kanak Kalita, Salil Haldar
2024 J jnl
Int. J. Comput. Intell. Syst.
Sundaram B. Pandya, Kanak Kalita, Pradeep Jangir, Ranjan Kumar Ghadai, Laith Abualigah
2024 J jnl
Int. J. Comput. Intell. Syst.
Kanak Kalita, Pradeep Jangir, Robert Cep, Sundaram B. Pandya, Laith Abualigah
2024 J jnl
Int. J. Comput. Intell. Syst.
Kanak Kalita, Janjhyam Venkata Naga Ramesh, Robert Cep, Pradeep Jangir, Sundaram B. Pandya, Ranjan Kumar Ghadai, Laith Abualigah
2024 J jnl
J. Comput. Des. Eng.
Kanak Kalita, Pradeep Jangir, Sundaram B. Pandya, Robert Cep, Laith Abualigah, Hazem Migdady, Mohammad Sharif Daoud
2024 J jnl
IEEE Access
Kanak Kalita, Narayanan Ganesh, Rama Chandran Narayanan, Pradeep Jangir, Diego Oliva, Marco Pérez-Cisneros
2024 J jnl
Int. J. Comput. Intell. Syst.
Sundaram B. Pandya, Kanak Kalita, Pradeep Jangir, Ranjan Kumar Ghadai, Laith Abualigah
2024 J jnl
Int. J. Comput. Intell. Syst.
Sundaram B. Pandya, Kanak Kalita, Robert Cep, Pradeep Jangir, Jasgurpreet Singh Chohan, Laith Abualigah
2024 J jnl
Evol. Intell.
Kanak Kalita, Pradeep Jangir, Sundaram B. Pandya, G. Shanmugasundar, Laith Abualigah
2023 conf
ICO (2)
Gurumukh Das, Gurdeep Singh, Divya Zindani, G. Shanmugasundar, Jasgurpreet Singh Chohan, Kanak Kalita
2023 conf
ICO (2)
G. Shanmugasundar, Jasgurpreet Singh Chohan, Kanak Kalita
2023 J jnl
Frontiers Digit. Health
Kanak Kalita, Narayanan Ganesh, Sambandam Jayalakshmi, Jasgurpreet Singh Chohan, Saurav Mallik, Hong Qin
2022 J jnl
Informatica
Vidyapati Kumar, Kanak Kalita, Prasenjit Chatterjee, Edmundas Kazimieras Zavadskas, Shankar Chakraborty
2022 J jnl
Eng. Comput.
Kanak Kalita, Ranjan Kumar Ghadai, Shankar Chakraborty
2022 J jnl
Int. J. Appl. Metaheuristic Comput.
Kanak Kalita, Ranjan Kumar Ghadai, Ankur Bansod
2022 J jnl
Eng. Comput.
Jayanta Kumar Biswas, Kanak Kalita, Amit Roychowdhury
2020 J jnl
Neural Comput. Appl.
Kanak Kalita, Tanmoy Mukhopadhyay, Partha Dey, Salil Haldar
2020 J jnl
Eng. Comput.
Kanak Kalita, Partha Dey, Salil Haldar, Xiao-Zhi Gao
2020 J jnl
Eng. Comput.
Narayanan Ganesh, Prasun Dutta, Manickam Ramachandran, Akash Kumar Bhoi, Kanak Kalita
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