Om Jee Pandey

69 papers Misc 2Journal 49Unranked 18
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Consumer Electron.
Anand Prakash Rawal, Vaibhav Agarwal, Om Jee Pandey, Prasenjit Chanak
2026 J jnl
IEEE Trans. Artif. Intell.
Vikash Kumar Bhardwaj, Abhishek Singh, Omm Prakash Sahoo, Mahendra Kumar Shukla, Om Jee Pandey
2026 J jnl
IEEE Trans. Netw. Serv. Manag.
Archana Ojha, Om Jee Pandey, Prasenjit Chanak
2026 J jnl
IEEE Wirel. Commun. Lett.
Ankesh Gupta, Parthkumar Mungra, Ayush Vishwakarma, Md Adil, Mahendra Kumar Shukla, Om Jee Pandey
2026 J jnl
IEEE Commun. Lett.
Tonmoy Rajkhowa, Sanjeev Sharma, Kuntal Deka, Om Jee Pandey
2026 J jnl
IEEE Netw. Lett.
Muthiah Sivavelan S., Astitva Kamble, Mahendra Kumar Shukla, Om Jee Pandey
2025 conf
ANTS
Vikash Kumar Bhardwaj, Mahendra Kumar Shukla, Om Jee Pandey
2025 J jnl
IEEE Trans. Netw. Serv. Manag.
Muhammad Wasim Abbas Ashraf, Shivanshu Shrivastava, Om Jee Pandey, Arvind R. Singh, Khuhawar Arif Raza
2025 J jnl
IEEE Trans. Reliab.
Shraddha Tripathi, Faheem Nizar, Om Jee Pandey, Tushar Sandhan, Rajesh M. Hegde
2025 J jnl
IEEE Trans. Consumer Electron.
Archana Ojha, Prasenjit Chanak, Om Jee Pandey
2025 J jnl
IEEE Trans. Consumer Electron.
Neha Sharma, Udit Agarwal, Kuldeep Singh, Prasenjit Chanak, Om Jee Pandey
2025 J jnl
IEEE Trans. Netw. Serv. Manag.
Vikash Kumar Bhardwaj, Aagat Shukla, Om Jee Pandey
2025 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Vikash Kumar Bhardwaj, Omm Prakash Sahoo, Mahendra Kumar Shukla, Om Jee Pandey
2025 conf
ANTS
Vikash Kumar Bhardwaj, Abhishek Singh, Mahendra Kumar Shukla, Om Jee Pandey
2025 conf
ANTS
Shraddha Tripathi, Vikash Kumar Bhardwaj, Om Jee Pandey, Rajesh M. Hegde
2025 J jnl
IEEE Trans. Artif. Intell.
Shubham Dwivedi, Kartikeya Pandey, Kumar Shubham, Om Jee Pandey, Achyut Mani Tripathi, Tushar Sandhan, Rajesh M. Hegde
2025 J jnl
IEEE Trans. Netw. Serv. Manag.
Vikash Kumar Bhardwaj, Gagan Mundada, Omm Prakash Sahoo, Mahendra Kumar Shukla, Om Jee Pandey
2025 J jnl
IEEE Netw. Lett.
Sankalp, Lata, Gaurang Sondur, Mahendra Kumar Shukla, Om Jee Pandey, Maxime Guillaud
2025 Misc conf
ICASSP
Tonmoy Rajkhowa, Amartya Roy Chowdhury, Achyut Mani Tripathi, Sanjeev Sharma, Om Jee Pandey
2025 J jnl
IEEE Netw. Lett.
Saransh Shankar, Divjot Singh, Anurag Badoni, Mahendra Kumar Shukla, Om Jee Pandey, Nadjib Aitsaadi
2025 conf
NCC
Shubham Dwivedi, Om Jee Pandey, Rajesh M. Hegde
2024 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Aadi Shukla, Akshat Sood, Om Jee Pandey
2024 J jnl
IEEE Trans. Sustain. Comput.
Aman Mishra, Yash Garg, Om Jee Pandey, Mahendra Kumar Shukla, Athanasios V. Vasilakos, Rajesh M. Hegde
2024 conf
ANTS
Neha Sharma, Prajjwal Pandey, Aryan, Prateek Rathore, Om Jee Pandey
2024 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Deepali Kushwaha, Manan Kalavadia, Vinayaka Hegde, Om Jee Pandey
2024 J jnl
IEEE Trans. Netw. Serv. Manag.
Sreenivasa Reddy Yeduri, Sindhusha Jeeru, Om Jee Pandey, Linga Reddy Cenkeramaddi
2024 conf
ANTS
Neha Sharma, Prateek Rathore, Mahendra Kumar Shukla, Om Jee Pandey
2024 J jnl
IEEE Open J. Commun. Soc.
Vaibhav Tiwari, Chandrasen Pandey, Satyendra Singh Yadav, Diptendu Sinha Roy, Om Jee Pandey, Linga Reddy Cenkeramaddi
2024 conf
ANTS
Neha Sharma, Aryaman Gupta, Sivala Deepak, Om Jee Pandey
2024 J jnl
IEEE Trans. Netw. Serv. Manag.
Neha Sharma, Venkata Saai Praneeth Thota, Tankala Yuvaraj, Shraddha Tripathi, Om Jee Pandey
2024 J jnl
IEEE Trans. Netw. Serv. Manag.
Shraddha Tripathi, Om Jee Pandey, Rajesh M. Hegde
2024 J jnl
IEEE J. Sel. Areas Commun.
Yalin Liu, Hong-Ning Dai, Qubeijian Wang, Om Jee Pandey, Yaru Fu, Ning Zhang, Dusit Niyato, Chi Chung Lee
2024 J jnl
IEEE Internet Things J.
Debbarni Sarkar, Yogita, Satyendra Singh Yadav, Linga Reddy Cenkeramaddi, Om Jee Pandey
2024 J jnl
IEEE Open J. Commun. Soc.
Sreenivasa Reddy Yeduri, Neha Sharma, Om Jee Pandey, Linga Reddy Cenkeramaddi
2024 conf
ICPR (8)
Shubham Dwivedi, Tushar Sandhan, Om Jee Pandey, Rajesh M. Hegde
2023 J jnl
IEEE Trans. Netw. Serv. Manag.
Shraddha Tripathi, Om Jee Pandey, Linga Reddy Cenkeramaddi, Rajesh M. Hegde
2023 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Shraddha Tripathi, Om Jee Pandey, Rajesh M. Hegde
2023 conf
ANTS
Roshan Kumar, Om Jee Pandey, Rajesh M. Hegde
2023 J jnl
Comput. Networks
Naveen Kumar Gupta, Rama Shankar Yadav, Rajendra Kumar Nagaria, Deepak Gupta, Achyut Mani Tripathi, Om Jee Pandey
2023 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Achyut Mani Tripathi, Om Jee Pandey
2023 J jnl
IEEE Internet Things J.
Sreenivasa Reddy Yeduri, Naga Srinivasarao Chilamkurthy, Om Jee Pandey, Linga Reddy Cenkeramaddi
2023 J jnl
IEEE Trans. Netw. Serv. Manag.
Neha Sharma, Udit Agarwal, Sunny Shaurya, Shashank Mishra, Om Jee Pandey
2023 J jnl
IEEE Internet Things J.
Naga Srinivasarao Chilamkurthy, Niteesh Karna, Vamsidhar Vuddagiri, Satish K. Tiwari, Anirban Ghosh, Linga Reddy Cenkeramaddi, Om Jee Pandey
2023 J jnl
IEEE Commun. Lett.
Amit Kumar Shrivastava, Upendra K. Agrawal, Mahendra Kumar Shukla, Om Jee Pandey
2023 conf
NCC
Shraddha Tripathi, Om Jee Pandey, Rajesh M. Hegde
2023 conf
ICCCNT
Shubham Dwivedi, Tushar Sandhan, Om Jee Pandey, Rajesh M. Hegde
2022 conf
WF-IoT
Shraddha Tripathi, Om Jee Pandey, Rajesh M. Hegde
2022 J jnl
IEEE Trans. Cogn. Commun. Netw.
Om Jee Pandey, Tankala Yuvaraj, Joseph K. Paul, Ha H. Nguyen, Karthikay Gundepudi, Mahendra Kumar Shukla
2022 J jnl
IEEE Trans. Netw. Serv. Manag.
Tushar Bose, Aala Suresh, Om Jee Pandey, Linga Reddy Cenkeramaddi, Rajesh M. Hegde
2022 conf
SPCOM
Shraddha Tripathi, Om Jee Pandey, Rajesh M. Hegde
2022 J jnl
IEEE Access
Naga Srinivasarao Chilamkurthy, Om Jee Pandey, Anirban Ghosh, Linga Reddy Cenkeramaddi, Hong-Ning Dai
2022 conf
WF-IoT
Shraddha Tripathi, Om Jee Pandey, Rajesh M. Hegde
2022 conf
SAM
Shraddha Tripathi, Om Jee Pandey, Linga Reddy Cenkeramaddi, Rajesh M. Hegde
2022 J jnl
IEEE Netw. Lett.
Sateeshkrishna Dhuli, Fouzul Atik, Firdoshi Parveen, Om Jee Pandey
2022 conf
iSES
Rakesh Reddy Yakkati, Bethi Pardhasaradhi, Sreenivasa Reddy Yeduri, Om Jee Pandey, Linga Reddy Cenkeramaddi
2022 J jnl
Pervasive Mob. Comput.
Yeduri Sreenivasa Reddy, Abhinav Kumar, Om Jee Pandey, Linga Reddy Cenkeramaddi
2021 J jnl
CoRR
Abhishek Gupta, Om Jee Pandey, Mahendra Kumar Shukla, Anjali Dadhich, Samar Mathur, Anup Ingle
2020 J jnl
IEEE Trans. Netw. Serv. Manag.
Om Jee Pandey, Ved Gautam, Ha H. Nguyen, Mahendra Kumar Shukla, Rajesh M. Hegde
2020 J jnl
IEEE Trans. Green Commun. Netw.
Mahendra Kumar Shukla, Ha H. Nguyen, Om Jee Pandey
2020 J jnl
IEEE Access
Mahendra Kumar Shukla, Ha H. Nguyen, Om Jee Pandey
2020 J jnl
IEEE Commun. Lett.
Om Jee Pandey, Ved Gautam, Saket Jha, Mahendra Kumar Shukla, Rajesh M. Hegde
2018 J jnl
IET Wirel. Sens. Syst.
Om Jee Pandey, Rajesh M. Hegde
2018 J jnl
IEEE Trans. Veh. Technol.
Om Jee Pandey, Akshay Mahajan, Rajesh Mahanand Hegde
2018 J jnl
IEEE Trans. Veh. Technol.
Om Jee Pandey, Rajesh M. Hegde
2017 Misc conf
COMSNETS
Om Jee Pandey, Akshay Mahajan, Rajesh M. Hegde
2017 J jnl
Wirel. Pers. Commun.
Om Jee Pandey, Richika Sharan, Rajesh M. Hegde
2017 J jnl
Ad Hoc Networks
Om Jee Pandey, Rajesh M. Hegde
2013 conf
WOCN
Om Jee Pandey, Aditya Trivedi, Mahendra Kumar Shukla
2013 conf
ICACCI
Mahendra Kumar Shukla, Aditya Trivedi, Om Jee Pandey
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