Raja Naeem Akram

97 papers A 1B 12C 13Misc 8Journal 22Unranked 35
YearRankTypeTitle / Venue / Authors
2025 J jnl
SN Comput. Sci.
Pakayal Edmond Boar, Pradip Kumar Sharma, Raja Naeem Akram, Wanpeng Li
2024 conf
GCAIoT
Cyrile Verdeyen, Carlton Shepherd, Konstantinos Markantonakis, Raja Naeem Akram, Roger Milroy, Sarah Hani Abu Ghazalah, Damien Sauveron
2024 J jnl
IEEE Access
Konstantinos Markantonakis, Julia A. Meister, Iakovos Gurulian, Carlton Shepherd, Raja Naeem Akram, Sarah Hani Abu Ghazalah, Mumraiz Khan Kasi, Damien Sauveron, Gerhard P. Hancke
2021 J jnl
CoRR
Georges-Axel Jaloyan, Konstantinos Markantonakis, Raja Naeem Akram, David Robin, Keith Mayes, David Naccache
2020 conf
ACNS Workshops
Benjamin Semal, Konstantinos Markantonakis, Raja Naeem Akram, Jan Kalbantner
2020 Misc conf
SEC
Benjamin Semal, Konstantinos Markantonakis, Raja Naeem Akram, Jan Kalbantner
2020 A conf
AsiaCCS
Georges-Axel Jaloyan, Konstantinos Markantonakis, Raja Naeem Akram, David Robin, Keith Mayes, David Naccache
2019 J jnl
ACM Trans. Embed. Comput. Syst.
Robert P. Lee, Konstantinos Markantonakis, Raja Naeem Akram
2019 B conf
ARES
Khuong An Nguyen, Raja Naeem Akram, Konstantinos Markantonakis, Zhiyuan Luo, Chris Watkins
2019 J jnl
Digit. Investig.
Thibaut Heckmann, James P. McEvoy, Konstantinos Markantonakis, Raja Naeem Akram, David Naccache
2018 conf
iThings/GreenCom/CPSCom/SmartData
James Tapsell, Raja Naeem Akram, Konstantinos Markantonakis
2018 J jnl
CoRR
James Tapsell, Raja Naeem Akram, Konstantinos Markantonakis
2018 conf
TrustCom/BigDataSE
James Tapsell, Raja Naeem Akram, Konstantinos Markantonakis
2018 J jnl
CoRR
James Tapsell, Raja Naeem Akram, Konstantinos Markantonakis
2018 C conf
WISTP
Julia A. Meister, Raja Naeem Akram, Konstantinos Markantonakis
2018 J jnl
CoRR
Julia A. Meister, Raja Naeem Akram, Konstantinos Markantonakis
2018 conf
iThings/GreenCom/CPSCom/SmartData
Freya Sheer Hardwick, Apostolos Gioulis, Raja Naeem Akram, Konstantinos Markantonakis
2018 J jnl
CoRR
Freya Sheer Hardwick, Raja Naeem Akram, Konstantinos Markantonakis
2018 conf
TrustCom/BigDataSE
Freya Sheer Hardwick, Raja Naeem Akram, Konstantinos Markantonakis
2018 J jnl
CoRR
Freya Sheer Hardwick, Raja Naeem Akram, Konstantinos Markantonakis
2018 conf
TrustCom/BigDataSE
Iakovos Gurulian, Konstantinos Markantonakis, Eibe Frank, Raja Naeem Akram
2018 C conf
WISTP
Carlton Shepherd, Raja Naeem Akram, Konstantinos Markantonakis
2018 J jnl
CoRR
Carlton Shepherd, Raja Naeem Akram, Konstantinos Markantonakis
2018 J jnl
Future Gener. Comput. Syst.
Raja Naeem Akram, Hsiao-Hwa Chen, Javier López, Damien Sauveron, Laurence T. Yang
2017 C conf
WISTP
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes, Pierre-François Bonnefoi, Amina Cherif, Damien Sauveron, Serge Chaumette
2017 B conf
TrustBus
Carlton Shepherd, Fabien A. P. Petitcolas, Raja Naeem Akram, Konstantinos Markantonakis
2017 ch.
Smart Cards, Tokens, Security and Applications, 2nd Ed.
Gary Waite, Keith Mayes, Raja Naeem Akram
2017 B conf
ARES
Iakovos Gurulian, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes
2017 C conf
WISTP
Carlton Shepherd, Raja Naeem Akram, Konstantinos Markantonakis
2017 J jnl
CoRR
Carlton Shepherd, Raja Naeem Akram, Konstantinos Markantonakis
2017 B conf
ARES
Carlton Shepherd, Raja Naeem Akram, Konstantinos Markantonakis
2017 conf
CPSS@AsiaCCS
Gareth Haken, Konstantinos Markantonakis, Iakovos Gurulian, Carlton Shepherd, Raja Naeem Akram
2017 C conf
CARDIS
Iakovos Gurulian, Gerhard P. Hancke, Konstantinos Markantonakis, Raja Naeem Akram
2017 ch.
Smart Cards, Tokens, Security and Applications, 2nd Ed.
Konstantinos Markantonakis, Raja Naeem Akram
2017 conf
TrustCom/BigDataSE/ICESS
Iakovos Gurulian, Carlton Shepherd, Eibe Frank, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes
2017 C conf
WISTP
Danushka Jayasinghe, Sheila Cobourne, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes
2017 Misc conf
SAC
Iakovos Gurulian, Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2017 B conf
ARES
Robert P. Lee, Konstantinos Markantonakis, Raja Naeem Akram
2017 conf
SECITC
Iakovos Gurulian, Konstantinos Markantonakis, Carlton Shepherd, Eibe Frank, Raja Naeem Akram
2017 J jnl
CoRR
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes, Oussama Habachi, Damien Sauveron, Andreas Steyven, Serge Chaumette
2017 J jnl
CoRR
Collins Mtita, Maryline Laurent, Damien Sauveron, Raja Naeem Akram, Konstantinos Markantonakis, Serge Chaumette
2017 ch.
Smart Cards, Tokens, Security and Applications, 2nd Ed.
Damien Sauveron, Raja Naeem Akram, Konstantinos Markantonakis
2017 conf
IEEE Symposium on Security and Privacy Workshops
Carlton Shepherd, Iakovos Gurulian, Eibe Frank, Konstantinos Markantonakis, Raja Naeem Akram, Emmanouil Panaousis, Keith Mayes
2017 Misc conf
SAC
Carlton Shepherd, Raja Naeem Akram, Konstantinos Markantonakis
2016 J jnl
CoRR
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes, Pierre-François Bonnefoi, Damien Sauveron, Serge Chaumette
2016 conf
CPSS@AsiaCCS
Robert P. Lee, Konstantinos Markantonakis, Raja Naeem Akram
2016 conf
ICEBE
Rashedul Hassan, Konstantinos Markantonakis, Raja Naeem Akram
2016 J jnl
CoRR
Raja Naeem Akram, Konstantinos Markantonakis
2016 J jnl
CoRR
Raja Naeem Akram, Iakovos Gurulian, Carlton Shepherd, Konstantinos Markantonakis, Keith Mayes
2016 conf
RFIDSec
Danushka Jayasinghe, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes
2016 conf
Trustcom/BigDataSE/ISPA
Danushka Jayasinghe, Konstantinos Markantonakis, Iakovos Gurulian, Raja Naeem Akram, Keith Mayes
2016 Misc conf
Inscrypt
Hafizah Mansor, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes, Iakovos Gurulian
2016 conf
Trustcom/BigDataSE/ISPA
Hafizah Mansor, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes, Iakovos Gurulian
2016 J jnl
Pervasive Mob. Comput.
Raja Naeem Akram, Konstantinos Markantonakis, Damien Sauveron
2016 conf
The New Codebreakers
Mehari G. Msgna, Houda Ferradi, Raja Naeem Akram, Konstantinos Markantonakis
2016 conf
Trustcom/BigDataSE/ISPA
Raja Naeem Akram, Pierre-François Bonnefoi, Serge Chaumette, Konstantinos Markantonakis, Damien Sauveron
2016 conf
Trustcom/BigDataSE/ISPA
Carlton Shepherd, Ghada Arfaoui, Iakovos Gurulian, Robert P. Lee, Konstantinos Markantonakis, Raja Naeem Akram, Damien Sauveron, Emmanuel Conchon
2016 J jnl
CoRR
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes, Pierre-François Bonnefoi, Damien Sauveron, Serge Chaumette
2016 J jnl
CoRR
Iakovos Gurulian, Carlton Shepherd, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes
2015 conf
TrustCom/BigDataSE/ISPA (1)
Pierre-François Bonnefoi, Pierre Dusart, Damien Sauveron, Raja Naeem Akram, Konstantinos Markantonakis
2015 J jnl
Inf. Sci.
Raja Naeem Akram, Konstantinos Markantonakis, Damien Sauveron
2015 B conf
ARES
Hafizah Mansor, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes
2015 conf
TrustCom/BigDataSE/ISPA (1)
Danushka Jayasinghe, Raja Naeem Akram, Konstantinos Markantonakis, Konstantinos Rantos, Keith Mayes
2015 conf
ESORICS (2)
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2015 conf
TrustCom/BigDataSE/ISPA (1)
Raja Naeem Akram, Konstantinos Markantonakis, Damien Sauveron, Keith Mayes
2015 C ed.
WISTP
Raja Naeem Akram, Sushil Jajodia
2015 B conf
NSS
Hafizah Mansor, Konstantinos Markantonakis, Raja Naeem Akram, Keith Mayes
2015 conf
SECITC
Konstantinos Markantonakis, Raja Naeem Akram, Mehari G. Msgna
2014 ch.
Secure Smart Embedded Devices, Platforms and Applications
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2014 ch.
Secure Smart Embedded Devices, Platforms and Applications
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2014 B conf
TrustCom
Raja Naeem Akram, Konstantinos Markantonakis, Damien Sauveron
2014 Misc conf
IRI
Raja Naeem Akram, Ryan K. L. Ko, Tsz Fung Law
2014 B conf
TrustCom
Raja Naeem Akram, Ryan K. L. Ko
2014 C conf
WISTP
Raja Naeem Akram, Ryan K. L. Ko
2014 conf
HCI (24)
Raja Naeem Akram, Konstantinos Markantonakis
2014 conf
NTMS
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2014 B conf
TrustCom
Raja Naeem Akram, Ryan K. L. Ko
2013 conf
TrustCom/ISPA/IUCC
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2013 conf
HPCC/EUC
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2013 conf
RFIDSec Asia
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2013 C conf
ICICS
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2013 conf
ISSPIT
Raja Naeem Akram, Konstantinos Markantonakis
2013 conf
ICEBE
Mehari Msgna, Konstantinos Markantonakis, Keith Mayes, Raja Naeem Akram
2012 B conf
TrustCom
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2012
Raja Naeem Akram
2012 C conf
CIS
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2012 C conf
ICICS
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2012 conf
NTMS
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2011 Misc conf
ACISP
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2011 B conf
TrustCom
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2011 conf
ICEBE
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2010 Misc conf
SEC
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2010 conf
ICCSA Workshops
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2010 C conf
CARDIS
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2010 C conf
EUC
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2009 Misc conf
WISA
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
2009 conf
OTM Workshops
Raja Naeem Akram, Konstantinos Markantonakis, Keith Mayes
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