Mainack Mondal

79 papers A* 12A 15B 3Misc 2Journal 27Unranked 16
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Xavier Pleimling, Sifat Muhammad Abdullah, Gunjan Balde, Peng Gao, Mainack Mondal, Murtuza Jadliwala, Bimal Viswanath
2025 A* conf
USENIX Security Symposium
Rajdeep Ghosh, Shiladitya De, Mainack Mondal
2025 J jnl
CoRR
Rajdeep Ghosh, Shiladitya De, Mainack Mondal
2025 A conf
UMAP
Tzu-Yu Weng, Hanna AlZughbi, Isaac Rabago, Erin Arévalo Chaves, Erik Vagil, Nancy Fulda, Erin Ash, Mainack Mondal, Bart P. Knijnenburg, Xinru Page
2025 A* conf
CHI
Garrett Smith, Kirsten Chapman, Tzu-Yu Weng, Haijing Hao, Mainack Mondal, Staci Smith, Yunan Chen, Xinru Page
2025 conf
ACL (Findings)
Gunjan Balde, Soumyadeep Roy, Mainack Mondal, Niloy Ganguly
2025 J jnl
CoRR
Gunjan Balde, Soumyadeep Roy, Mainack Mondal, Niloy Ganguly
2025 B conf
DaWaK
Harsh Borse, Utkalika Satpathy, Mainack Mondal, Bivas Mitra
2025 B conf
DaWaK
Harsh Borse, Utkalika Satpathy, Mainack Mondal, Bivas Mitra
2025 conf
DEXA (1)
Harsh Borse, Utkalika Satpathy, Mainack Mondal, Bivas Mitra
2025 A ed.
SOUPS
Patrick Gage Kelley, Mainack Mondal, Kami Vaniea
2025 J jnl
IACR Cryptol. ePrint Arch.
Easwar Vivek Mangipudi, Panagiotis Chatzigiannis, Konstantinos Chalkias, Aniket Kate, Mohsen Minaei, Mainack Mondal
2024 A* conf
CHI
Garrett Smith, Sarah Carson, Rhea G. Vengurlekar, Stephanie Morales, Yun-Chieh Tsai, Rachel George, Josh Bedwell, Trevor Jones, Mainack Mondal, Brian Smith, Norman Makoto Su, Bart P. Knijnenburg, Xinru Page
2024 A* conf
USENIX Security Symposium
Rohit Raj, Mridul Newar, Mainack Mondal
2024 J jnl
CoRR
Rohit Raj, Mridul Newar, Mainack Mondal
2024 conf
EMNLP (Findings)
Gunjan Balde, Soumyadeep Roy, Mainack Mondal, Niloy Ganguly
2024 J jnl
CoRR
Gunjan Balde, Soumyadeep Roy, Mainack Mondal, Niloy Ganguly
2024 conf
IUI Workshops
Tzu-Yu Weng, Ananya Gupta, Bart P. Knijnenburg, Mainack Mondal, Nancy Fulda, Xinru Page
2024 A* conf
IJCAI
Gunjan Balde, Soumyadeep Roy, Mainack Mondal, Niloy Ganguly
2024 J jnl
CoRR
Gunjan Balde, Soumyadeep Roy, Mainack Mondal, Niloy Ganguly
2024 A conf
EuroS&P
Maied Almansoori, Mazharul Islam, Saptarshi Ghosh, Mainack Mondal, Rahul Chatterjee
2024 A conf
ICDCS
Harsh Borse, Utkalika Satapathy, Mainack Mondal, Bivas Mitra
2024 conf
WebSci
Brisha Jain, Mainack Mondal
2023 A conf
ICWSM
Utkarsh Patel, Animesh Mukherjee, Mainack Mondal
2023 conf
SPACE
Rohit Raj, Biplab Roy, Abir Das, Mainack Mondal
2023 J jnl
CoRR
Gunjan Balde, Aryendra Singh, Niloy Ganguly, Mainack Mondal
2023 J jnl
CoRR
Mainack Mondal, Anju Punuru, Tyng-Wen Scott Cheng, Kenneth Vargas, Chaz Gundry, Nathan S. Driggs, Noah Schill, Nathaniel Carlson, Josh Bedwell, Jaden Q. Lorenc, Isha Ghosh, Yao Li, Nancy Fulda, Xinru Page
2023 J jnl
Proc. ACM Hum. Comput. Interact.
Mainack Mondal, Anju Punuru, Tyng-Wen Scott Cheng, Kenneth Vargas, Chaz Gundry, Nathan S. Driggs, Noah Schill, Nathaniel Carlson, Josh Bedwell, Jaden Q. Lorenc, Isha Ghosh, Yao Li, Nancy Fulda, Xinru Page
2023 A conf
AsiaCCS
Avirup Mukherjee, Kousshik Murali, Shivam Kumar Jha, Niloy Ganguly, Rahul Chatterjee, Mainack Mondal
2023 J jnl
CoRR
Avirup Mukherjee, Kousshik Murali, Shivam Kumar Jha, Niloy Ganguly, Rahul Chatterjee, Mainack Mondal
2023 J jnl
Comput. Commun.
Harsh Borse, Bikash Sahoo, Prateek Chanda, Soumik Sinha, Mainack Mondal, Bivas Mitra
2023 J jnl
IACR Cryptol. ePrint Arch.
Panagiotis Chatzigiannis, Konstantinos Chalkias, Aniket Kate, Easwar Vivek Mangipudi, Mohsen Minaei, Mainack Mondal
2023 J jnl
CoRR
Brisha Jain, Mainack Mondal
2023 A* conf
CCS
Easwar Vivek Mangipudi, Udit Desai, Mohsen Minaei, Mainack Mondal, Aniket Kate
2022 J jnl
CoRR
Utkarsh Patel, Animesh Mukherjee, Mainack Mondal
2022 conf
CSCW Companion
Kirsten Chapman, Melanie Klimes, Braden Wellman, Garrett Smith, Mainack Mondal, Staci Smith, Yunan Chen, Haijing Hao, Xinru Page
2022 conf
HCI (3)
Isaac Criddle, Amanda Hardy, Garrett Smith, Thomas Ranck, Mainack Mondal, Xinru Page
2022 A* conf
USENIX Security Symposium
Mohsen Minaei, Mainack Mondal, Aniket Kate
2022 ed.
SPACE
Lejla Batina, Stjepan Picek, Mainack Mondal
2022 ed.
SPACE
Lejla Batina, Stjepan Picek, Mainack Mondal
2022 J jnl
IACR Cryptol. ePrint Arch.
Easwar Vivek Mangipudi, Udit Desai, Mohsen Minaei, Mainack Mondal, Aniket Kate
2022 A* conf
USENIX Security Symposium
Vandit Sharma, Mainack Mondal
2022 B conf
ASONAM
Avinash Tulasi, Mainack Mondal, Arun Balaji Buduru, Ponnurangam Kumaraguru
2022 conf
EuroUSEC
Ashutosh Kumar Singh, Nisarg Upadhyaya, Arka Seth, Xuehui Hu, Nishanth Sastry, Mainack Mondal
2022 A conf
ICWSM
Soham Poddar, Mainack Mondal, Janardan Misra, Niloy Ganguly, Saptarshi Ghosh
2021 conf
WebSci
Xuehui Hu, Nishanth Sastry, Mainack Mondal
2021 A* conf
NDSS
Mohsen Minaei, S. Chandra Mouli, Mainack Mondal, Bruno Ribeiro, Aniket Kate
2021 A conf
ICWSM
Günce Su Yilmaz, Fiona Gasaway, Blase Ur, Mainack Mondal
2021 J jnl
CoRR
Vandit Sharma, Mainack Mondal
2021 J jnl
CoRR
Soham Poddar, Mainack Mondal, Janardan Misra, Niloy Ganguly, Saptarshi Ghosh
2020 J jnl
CoRR
Mohsen Minaei, Mainack Mondal, Aniket Kate
2020 J jnl
CoRR
Soham Poddar, Mainack Mondal, Saptarshi Ghosh
2020 conf
HT
Mainack Mondal, Denzil Correa, Fabrício Benevenuto
2020 conf
CSCW Companion
Anju Punuru, Tyng-Wen Cheng, Isha Ghosh, Xinru Page, Mainack Mondal
2020 J jnl
CoRR
Mohsen Minaei, S. Chandra Mouli, Mainack Mondal, Bruno Ribeiro, Aniket Kate
2020 ed.
SPACE
Lejla Batina, Stjepan Picek, Mainack Mondal
2019 J jnl
Proc. Priv. Enhancing Technol.
Mohsen Minaei, Mainack Mondal, Patrick Loiseau, Krishna P. Gummadi, Aniket Kate
2019 A* conf
CCS
Mainack Mondal, Günce Su Yilmaz, Noah Hirsch, Mohammad Taha Khan, Michael Tang, Christopher Tran, Chris Kanich, Blase Ur, Elena Zheleva
2019 A* conf
CCS
Ben Weinshel, Miranda Wei, Mainack Mondal, Euirim Choi, Shawn Shan, Claire Dolin, Michelle L. Mazurek, Blase Ur
2018 J jnl
New Rev. Hypermedia Multim.
Mainack Mondal, Leandro Araújo Silva, Denzil Correa, Fabrício Benevenuto
2018 conf
HILDA@SIGMOD
Will Brackenbury, Rui Liu, Mainack Mondal, Aaron J. Elmore, Blase Ur, Kyle Chard, Michael J. Franklin
2017 conf
HT
Mainack Mondal, Leandro Araújo Silva, Fabrício Benevenuto
2017 conf
HT (Extended Proceedings)
Mainack Mondal
2017 J jnl
CoRR
Mohsen Minaei, Mainack Mondal, Patrick Loiseau, Krishna P. Gummadi, Aniket Kate
2017 J jnl
IEEE Internet Comput.
Mainack Mondal, Johnnatan Messias, Saptarshi Ghosh, Krishna P. Gummadi, Aniket Kate
2017
Mainack Mondal
2016 A conf
ICWSM
Leandro Araújo, Mainack Mondal, Denzil Correa, Fabrício Benevenuto, Ingmar Weber
2016 J jnl
CoRR
Leandro Araújo, Mainack Mondal, Denzil Correa, Fabrício Benevenuto, Ingmar Weber
2016 A conf
SOUPS
Mainack Mondal, Johnnatan Messias, Saptarshi Ghosh, Krishna P. Gummadi, Aniket Kate
2015 A conf
ICWSM
Denzil Correa, Leandro Araújo, Mainack Mondal, Fabrício Benevenuto, Krishna P. Gummadi
2014 A conf
CSCW
Parantapa Bhattacharya, Saptarshi Ghosh, Juhi Kulshrestha, Mainack Mondal, Muhammad Bilal Zafar, Niloy Ganguly, Krishna P. Gummadi
2014 A conf
SOUPS
Mainack Mondal, Yabing Liu, Bimal Viswanath, Krishna P. Gummadi, Alan Mislove
2012 A conf
EuroSys
Bimal Viswanath, Mainack Mondal, P. Krishna Gummadi, Alan Mislove, Ansley Post
2012 A conf
CoNEXT
Mainack Mondal, Bimal Viswanath, Allen Clement, Peter Druschel, Krishna P. Gummadi, Alan Mislove, Ansley Post
2012 Misc conf
COMSNETS
Bimal Viswanath, Mainack Mondal, Allen Clement, Peter Druschel, P. Krishna Gummadi, Alan Mislove, Ansley Post
2012 conf
WWW (Companion Volume)
Yabing Liu, Bimal Viswanath, Mainack Mondal, P. Krishna Gummadi, Alan Mislove
2011 A* conf
SIGCOMM
Mainack Mondal, Bimal Viswanath, Allen Clement, Peter Druschel, P. Krishna Gummadi, Alan Mislove, Ansley Post
2011 J jnl
IACR Cryptol. ePrint Arch.
Mainack Mondal, Avik Chakraborti, Nilanjan Datta, Debdeep Mukhopadhyay
2010 Misc conf
VLSI Design
Chester Rebeiro, Mainack Mondal, Debdeep Mukhopadhyay
redb/extractors/decompiler/apk/smali_normalization.py
← Index redb/extractors/decompiler/apk/smali_normalization.py python
"""Semantic normalization of Dalvik/smali instructions.

Analogous to Binary Ninja's LLIL normalization: strips register allocation
noise and instruction encoding variants while preserving semantic operations.

Three normalization levels (most aggressive to most detailed):
  - 'category':    semantic category only (MOV, ALU, CALL, ...)
  - 'opcode':      base opcode, width-invariant (add, sub, invoke, ...)
  - 'opcode_api':  opcode category + API method/field references for
                   invoke/field/alloc instructions (default for MinHash)

References:
  - Smali+ 12-category reduction (Canfora et al.)
  - MOSDroid opcode family grouping
  - DroidSIFT/DroidSim API-sensitive similarity
"""

import re
from typing import List

# ---------------------------------------------------------------------------
# Dalvik opcode -> semantic category mapping
# ---------------------------------------------------------------------------
# Prefix-matched against instruction opcodes. Order matters for overlapping
# prefixes (longer/more-specific prefixes should come first in iteration,
# but since we use startswith and break on first match, we order by
# specificity within the list).

OPCODE_CATEGORIES = {
    # Arithmetic/logic
    "add": "ALU", "sub": "ALU", "mul": "ALU", "div": "ALU",
    "rem": "ALU", "and": "ALU", "or": "ALU", "xor": "ALU",
    "shl": "ALU", "shr": "ALU", "ushr": "ALU", "neg": "ALU",
    "not": "ALU",
    # Data movement
    "move": "MOV", "const": "CONST",
    # Memory access (field/array)
    "iget": "LOAD", "sget": "LOAD", "aget": "LOAD",
    "iput": "STORE", "sput": "STORE", "aput": "STORE",
    # Invocations
    "invoke": "CALL",
    # Control flow
    "if": "BRANCH", "goto": "JMP",
    "switch": "SWITCH",
    "return": "RET",
    # Object/type
    "new": "ALLOC", "check": "TYPE", "instance": "TYPE",
    # Array
    "fill": "ARR", "array": "ARR",
    # Comparison
    "cmpl": "CMP", "cmpg": "CMP", "cmp": "CMP",
    # Exception / synchronization
    "throw": "EXC", "monitor": "SYNC",
    # Conversion (int-to-long, float-to-int, etc.)
    "int-to": "CONV", "long-to": "CONV", "float-to": "CONV",
    "double-to": "CONV",
}

# Pre-compiled regexes for operand extraction
_METHOD_REF_RE = re.compile(r"(L[\w/$]+;->[\w<>]+\(.*?\)[\w/$;\[]*)")
_FIELD_REF_RE = re.compile(r"(L[\w/$]+;->[\w]+:[\w/$;\[]+)")
_CLASS_REF_RE = re.compile(r"(L[\w/$]+;)")
_CONST_STRING_RE = re.compile(r'^const-string(?:/jumbo)?\s')


def categorize_opcode(opcode: str) -> str:
    """Map a Dalvik opcode to its semantic category.

    Prefix-matched: 'add-int/2addr' matches 'add' -> 'ALU'.
    Returns 'OTHER' for unrecognized opcodes.
    """
    for prefix, cat in OPCODE_CATEGORIES.items():
        if opcode.startswith(prefix):
            return cat
    return "OTHER"


# Mapping from semantic categories to the ACFG feature vector indices
# used by Binary Ninja's build_block_features (cfg_features.py).
# This enables cross-platform ACFG feature comparison.
CATEGORY_TO_ACFG_INDEX = {
    "ALU": 0,       # CAT_ARITHMETIC
    "CONV": 0,      # arithmetic-adjacent
    "CMP": 4,       # CAT_COMPARISON
    "MOV": 2,       # CAT_TRANSFER
    "CONST": 2,     # transfer-adjacent (loading constants)
    "LOAD": 5,      # CAT_MEMORY
    "STORE": 5,     # CAT_MEMORY
    "CALL": 3,      # CAT_CALL
    "BRANCH": 1,    # CAT_LOGIC (conditional logic)
    "JMP": 1,       # CAT_LOGIC
    "SWITCH": 1,    # CAT_LOGIC
    "RET": 2,       # CAT_TRANSFER
    "ALLOC": 5,     # CAT_MEMORY (heap allocation)
    "TYPE": 6,      # CAT_OTHER
    "ARR": 5,       # CAT_MEMORY
    "EXC": 6,       # CAT_OTHER
    "SYNC": 6,      # CAT_OTHER
    "OTHER": 6,     # CAT_OTHER
}


def normalize_instruction(line: str, level: str = "opcode_api") -> str:
    """Normalize a single smali instruction line.

    Args:
        line: A single smali instruction (whitespace-stripped).
        level: Normalization level:
            'category'   - most aggressive: just semantic category
            'opcode'     - base opcode only, width/addressing-mode invariant
            'opcode_api' - category + API references for invoke/field/alloc
                          (default, best for MinHash similarity)

    Returns:
        Normalized instruction string, or empty string for non-instructions.
    """
    stripped = line.strip()
    if not stripped:
        return ""

    parts = stripped.split(None, 1)
    opcode = parts[0]
    operands = parts[1] if len(parts) > 1 else ""

    if level == "category":
        return categorize_opcode(opcode)

    if level == "opcode":
        # Strip type/width suffixes for invariance:
        # add-int, add-long, add-float -> 'add'
        # add-int/2addr -> 'add'
        base = re.split(r"[-/]", opcode)[0]
        return base

    if level == "opcode_api":
        # const-string: preserve string content (encrypted strings are a
        # key malware indicator)
        if _CONST_STRING_RE.match(stripped):
            # Extract the string literal
            str_match = re.search(r'"(.*)"', operands)
            if str_match:
                return f"CONST_STR \"{str_match.group(1)}\""
            return "CONST_STR"

        # invoke-*: preserve method reference
        if opcode.startswith("invoke"):
            ref = _METHOD_REF_RE.search(operands)
            if ref:
                return f"CALL {ref.group(1)}"
            return "CALL"

        # Field access: preserve field reference
        if opcode.startswith(("iget", "iput", "sget", "sput")):
            ref = _FIELD_REF_RE.search(operands)
            if ref:
                cat = "LOAD" if "get" in opcode else "STORE"
                return f"{cat} {ref.group(1)}"
            # Fallback: try space-separated format from androguard
            # e.g. "iget v0, p0, Lcom/Foo;->field Ljava/lang/String;"
            space_ref = re.search(
                r"(L[\w/$]+;->[\w]+)\s+([\w/$;\[]+)", operands
            )
            if space_ref:
                cat = "LOAD" if "get" in opcode else "STORE"
                return f"{cat} {space_ref.group(1)}:{space_ref.group(2)}"
            cat = "LOAD" if "get" in opcode else "STORE"
            return cat

        # new-instance: preserve allocated type
        if opcode.startswith("new-instance") or opcode == "new-array":
            ref = _CLASS_REF_RE.search(operands)
            if ref:
                return f"ALLOC {ref.group(1)}"
            return "ALLOC"

        # Everything else: just the category
        return categorize_opcode(opcode)

    # Unknown level: return raw opcode
    return opcode


def normalize_method_body(
    body: str, level: str = "opcode_api"
) -> List[str]:
    """Normalize all instructions in a smali method body.

    Filters out directives (.), labels (:), comments (#), and blank lines.
    Returns a list of normalized instruction strings.

    Args:
        body: Raw smali method body text.
        level: Normalization level (see normalize_instruction).

    Returns:
        List of normalized instruction strings (no empty strings).
    """
    normalized = []
    for line in body.split("\n"):
        stripped = line.strip()
        # Skip non-instructions
        if not stripped:
            continue
        if stripped.startswith((".",":", "#")):
            continue
        result = normalize_instruction(stripped, level)
        if result:
            normalized.append(result)
    return normalized