Rajesh Bordawekar

85 papers A* 5A 10B 6Journal 23Unranked 19
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Selim Furkan Tekin, Rajesh Bordawekar
2025 conf
SIGMOD Conference Companion
Renata Borovica-Gajic, Manisha Luthra, Ryan Marcus, Rajesh Bordawekar, Oded Shmueli
2024 conf
SIGMOD Conference Companion
Rajesh Bordawekar, Oded Shmueli, Yael Amsterdamer, Renata Borovica-Gajic, Donatella Firmani
2023 J jnl
CoRR
Prabhakar Kudva, Rajesh Bordawekar, Apoorva Nitsure
2023 ed.
VLDB Workshops
Rajesh Bordawekar, Cinzia Cappiello, Vasilis Efthymiou, Lisa Ehrlinger, Vijay Gadepally, Sainyam Galhotra, Sandra Geisler, Sven Groppe, Le Gruenwald, Alon Y. Halevy, Hazar Harmouch, Oktie Hassanzadeh, Ihab F. Ilyas, Ernesto Jiménez-Ruiz, Sanjay Krishnan, Tirthankar Lahiri, Guoliang Li, Jiaheng Lu, Wolfgang Mauerer, Umar Farooq Minhas, Felix Naumann, M. Tamer Özsu, El Kindi Rezig, Kavitha Srinivas, Michael Stonebraker, Satyanarayana R. Valluri, Maria-Esther Vidal, Haixun Wang, Jiannan Wang, Yingjun Wu, Xun Xue, Mohamed Zaït, Kai Zeng
2023 ed.
aiDM@SIGMOD
Rajesh Bordawekar, Oded Shmueli, Yael Amsterdamer, Donatella Firmani, Andreas Kipf
2023 conf
SIGMOD Conference Companion
Rajesh Bordawekar, Oded Shmueli, Yael Amsterdamer, Donatella Firmani, Andreas Kipf
2022 J jnl
SIGMOD Rec.
Manos Athanassoulis, Peter Triantafillou, Raja Appuswamy, Rajesh Bordawekar, Badrish Chandramouli, Xuntao Cheng, Ioana Manolescu, Yannis Papakonstantinou, Nesime Tatbul
2022 ed.
ADMS@VLDB
Rajesh Bordawekar, Tirthankar Lahiri
2022 ed.
aiDM@SIGMOD
Rajesh Bordawekar, Oded Shmueli, Yael Amsterdamer, Donatella Firmani, Ryan Marcus
2022 conf
SIGMOD Conference
Rajesh Bordawekar, Yael Amsterdamer, Donatella Firmani, Ryan Marcus, Oded Shmueli
2021 J jnl
CoRR
Rajesh Bordawekar, Bülent Abali, Ming-Hung Chen
2021 ed.
ADMS@VLDB
Rajesh Bordawekar, Tirthankar Lahiri
2021 ed.
aiDM@SIGMOD
Rajesh Bordawekar, Yael Amsterdamer, Oded Shmueli, Nesime Tatbul
2020 ed.
ADMS@VLDB
Rajesh Bordawekar, Tirthankar Lahiri
2020 ed.
aiDM@SIGMOD
Rajesh Bordawekar, Oded Shmueli, Nesime Tatbul, Tin Kam Ho
2019 ed.
ADMS@VLDB
Rajesh Bordawekar, Tirthankar Lahiri
2019 A conf
CIDR
Rajesh Bordawekar, Oded Shmueli
2019 conf
SIGMOD Conference
Rajesh Bordawekar, Oded Shmueli
2019 ed.
aiDM@SIGMOD
Rajesh Bordawekar, Oded Shmueli
2018 ed.
ADMS@VLDB
Rajesh Bordawekar, Tirthankar Lahiri
2018 ed.
aiDM@SIGMOD
Rajesh Bordawekar, Oded Shmueli
2018 conf
TPCTC
Cédric Bourrasset, France Boillod-Cerneux, Ludovic Sauge, Myrtille Deldossi, Francois Wellenreiter, Rajesh Bordawekar, Susan Malaika, Jean-Armand Broyelle, Marc West, Brian M. Belgodere
2017 J jnl
CoRR
Rajesh Bordawekar, Bortik Bandyopadhyay, Oded Shmueli
2017 ed.
ADMS/IMDM@VLDB
Spyros Blanas, Rajesh Bordawekar, Tirthankar Lahiri, Justin J. Levandoski, Andrew Pavlo
2017 ed.
ADMS@VLDB
Rajesh Bordawekar, Tirthankar Lahiri
2017 conf
DEEM@SIGMOD
Rajesh Bordawekar, Oded Shmueli
2016 J jnl
CoRR
Rajesh Bordawekar, Oded Shmueli
2015 book
Rajesh Bordawekar, Bob Blainey, Ruchir Puri
2015 A conf
INTERSPEECH
Ewout van den Berg, Daniel Brand, Rajesh Bordawekar, Leonid Rachevsky, Bhuvana Ramabhadran
2015 ed.
ADMS@VLDB
Rajesh Bordawekar, Tirthankar Lahiri, Bugra Gedik, Christian A. Lang
2015 J jnl
Proc. VLDB Endow.
Minsik Cho, Daniel Brand, Rajesh Bordawekar, Ulrich Finkler, Vincent KulandaiSamy, Ruchir Puri
2014 J jnl
IEEE Trans. Knowl. Data Eng.
Bugra Gedik, Rajesh Bordawekar
2014 ed.
ADMS@VLDB
Rajesh Bordawekar, Tirthankar Lahiri, Bugra Gedik, Christian A. Lang
2013 J jnl
SIGMOD Rec.
Rajesh Bordawekar, Bob Blainey, Chidanand Apté
2013 ed.
ADMS@VLDB
Rajesh Bordawekar, Christian A. Lang, Bugra Gedik
2012 ed.
ADMS@VLDB
Rajesh Bordawekar, Christian A. Lang
2012 conf
SC Companion
Rajesh Bordawekar
2011 B conf
Image Processing
A. Ravishankar Rao, Rajesh Bordawekar, Guillermo A. Cecchi
2011 ed.
ADMS@VLDB
Rajesh Bordawekar, Christian A. Lang
2010 B conf
PACT
Rajesh Bordawekar, Uday Bondhugula, Ravi Rao
2010 ed.
ADMS@VLDB
Rajesh Bordawekar, Christian A. Lang
2010 J jnl
IBM J. Res. Dev.
Erik R. Altman, Matthew Arnold, Rajesh Bordawekar, Robert M. Delmonico, Nick Mitchell, Peter F. Sweeney
2010 B conf
EDBT
Rajesh Bordawekar, Lipyeow Lim, Anastasios Kementsietsidis, Bryant Wei-Lun Kok
2009 J jnl
VLDB J.
Bugra Gedik, Rajesh Bordawekar, Philip S. Yu
2009 J jnl
Concurr. Comput. Pract. Exp.
Peng Wu, Maged M. Michael, Christoph von Praun, Takuya Nakaike, Rajesh Bordawekar, Harold W. Cain, Calin Cascaval, Siddhartha Chatterjee, Stefanie Chiras, Rui Hou, Mark F. Mergen, Xiaowei Shen, Michael F. Spear, Huayong Wang, Kun Wang
2009 A* conf
ICDE
Dina Thomas, Rajesh Bordawekar, Charu C. Aggarwal, Philip S. Yu
2009 B conf
EDBT
Rajesh Bordawekar, Lipyeow Lim, Oded Shmueli
2008 J jnl
Inf. Process. Lett.
Rajesh Bordawekar, Oded Shmueli
2008 B conf
PPoPP
Christoph von Praun, Rajesh Bordawekar, Calin Cascaval
2008 conf
WIDM
Lila Shnaiderman, Oded Shmueli, Rajesh Bordawekar
2007 A* conf
VLDB
Bugra Gedik, Rajesh Bordawekar, Philip S. Yu
2007 A* conf
VLDB
Bugra Gedik, Philip S. Yu, Rajesh Bordawekar
2006 conf
PLAN-X
Rajesh Bordawekar, Michael G. Burke, Igor Peshansky, Mukund Raghavachari
2005 J jnl
SIGMOD Rec.
Rajesh Bordawekar, Christian A. Lang
2005 A* conf
WWW
Matthew Harren, Mukund Raghavachari, Oded Shmueli, Michael G. Burke, Rajesh Bordawekar, Igor Pechtchanski, Vivek Sarkar
2005 conf
OOPSLA Companion
Rajesh Bordawekar, Michael G. Burke, Igor Peshansky, Mukund Raghavachari
2004 conf
XSym
Rajesh Bordawekar, Oded Shmueli
2004 conf
EDBT Workshops
Yi Chen, George A. Mihaila, Rajesh Bordawekar, Sriram Padmanabhan
2004 conf
XSym
Kanda Runapongsa, Jignesh M. Patel, Rajesh Bordawekar, Sriram Padmanabhan
2004 conf
WWW (Alternate Track Papers & Posters)
Matthew Harren, Mukund Raghavachari, Oded Shmueli, Michael G. Burke, Vivek Sarkar, Rajesh Bordawekar
2003 conf
DBPL
Oded Shmueli, Mukund Raghavachari, Vivek Sarkar, Rajesh Bordawekar, Michael G. Burke
2002 A* conf
POPL
Yefim Shuf, Manish Gupta, Rajesh Bordawekar, Jaswinder Pal Singh
2000 J jnl
IBM Syst. J.
Donna N. Dillenberger, Rajesh Bordawekar, Clarence W. Clark III, Donald Durand, David Emmes, Osamu Gohda, Sally Howard, Michael F. Oliver, Frank Samuel, Robert W. St. John
2000 J jnl
IEEE Trans. Parallel Distributed Syst.
Rajesh Bordawekar
2000 A conf
OOPSLA
Mauricio J. Serrano, Rajesh Bordawekar, Samuel P. Midkiff, Manish Gupta
1998 J jnl
ACM SIGOPS Oper. Syst. Rev.
Rajesh Bordawekar
1998 J jnl
Parallel Comput.
Mahmut T. Kandemir, Alok N. Choudhary, J. Ramanujam, Rajesh Bordawekar
1998 A conf
HPDC
John K. Salmon, Thomas L. Sterling, Rajesh Bordawekar, Christopher Stein
1997 conf
IPPS
Mahmut T. Kandemir, Rajesh Bordawekar, Alok N. Choudhary
1997 J jnl
SIGMETRICS Perform. Evaluation Rev.
Rajesh Bordawekar, Steven Landherr, Don Capps, Mark Davis
1997 conf
PP
Mahmut T. Kandemir, Rajesh Bordawekar, Alok N. Choudhary
1997 A conf
International Conference on Supercomputing
Rajesh Bordawekar
1996 conf
Euro-Par, Vol. I
Rajesh Bordawekar, Alok N. Choudhary, J. Ramanujam
1996 A conf
International Conference on Supercomputing
Rajesh Bordawekar, Alok N. Choudhary, J. Ramanujam
1996 J jnl
J. Parallel Distributed Comput.
Rajesh Bordawekar, Alok N. Choudhary, J. Ramanujam
1996 ch.
Input/Output in Parallel and Distributed Computer Systems
Rajesh Bordawekar, Alok N. Choudhary
1996 J jnl
Computer
Rajeev Thakur, Alok N. Choudhary, Rajesh Bordawekar, Sachin More, Sivaramakrishna Kuditipudi
1995 B conf
PPoPP
Rajesh Bordawekar, Alok N. Choudhary, Ken Kennedy, Charles Koelbel, Michael H. Paleczny
1995 A conf
International Conference on Supercomputing
Rajesh Bordawekar, Alok N. Choudhary
1994 J jnl
SIGARCH Comput. Archit. News
Rajeev Thakur, Rajesh Bordawekar, Alok N. Choudhary
1994 A conf
International Conference on Supercomputing
Rajeev Thakur, Rajesh Bordawekar, Alok N. Choudhary
1993 A conf
International Conference on Supercomputing
Rajesh Bordawekar, Alok N. Choudhary, Juan Miguel del Rosario
1993 A conf
SC
Rajesh Bordawekar, Juan Miguel del Rosario, Alok N. Choudhary
1993 J jnl
SIGARCH Comput. Archit. News
Juan Miguel del Rosario, Rajesh Bordawekar, Alok N. Choudhary
redb/extractors/apk_extractors/apk_dex.py
← Index redb/extractors/apk_extractors/apk_dex.py python
import hashlib
import inspect
import json
from collections import Counter
from datetime import datetime, timezone
from typing import Any

import tlsh

from redb.extractors.enum import Tag
from redb.extractors.apk_extractor import APKExtractor
from redb.models.dataclasses import APKDexFile

# Sensitive API patterns categorized for malware analysis
SENSITIVE_API_CATEGORIES = {
    "reflection": [
        "Ljava/lang/reflect/Method;->invoke",
        "Ljava/lang/reflect/Field;->get",
        "Ljava/lang/reflect/Field;->set",
        "Ljava/lang/reflect/Constructor;->newInstance",
        "Ljava/lang/Class;->forName",
        "Ljava/lang/Class;->getMethod",
        "Ljava/lang/Class;->getDeclaredMethod",
        "Ljava/lang/Class;->getDeclaredField",
        "Ljava/lang/ClassLoader;->loadClass",
    ],
    "crypto": [
        "Ljavax/crypto/Cipher;->getInstance",
        "Ljavax/crypto/Cipher;->init",
        "Ljavax/crypto/spec/SecretKeySpec;-><init>",
        "Ljavax/crypto/spec/IvParameterSpec;-><init>",
        "Ljava/security/MessageDigest;->getInstance",
        "Ljava/security/KeyStore;->getInstance",
        "Ljavax/crypto/Mac;->getInstance",
    ],
    "dynamic_loading": [
        "Ldalvik/system/DexClassLoader;-><init>",
        "Ldalvik/system/PathClassLoader;-><init>",
        "Ldalvik/system/InMemoryDexClassLoader;-><init>",
        "Ldalvik/system/BaseDexClassLoader;-><init>",
        "Ljava/lang/Runtime;->exec",
        "Ljava/lang/ProcessBuilder;->start",
    ],
    "telephony": [
        "Landroid/telephony/TelephonyManager;->getDeviceId",
        "Landroid/telephony/TelephonyManager;->getSubscriberId",
        "Landroid/telephony/TelephonyManager;->getLine1Number",
        "Landroid/telephony/TelephonyManager;->getSimSerialNumber",
        "Landroid/telephony/TelephonyManager;->getNetworkOperator",
        "Landroid/telephony/TelephonyManager;->getSimOperator",
    ],
    "sms": [
        "Landroid/telephony/SmsManager;->sendTextMessage",
        "Landroid/telephony/SmsManager;->sendMultipartTextMessage",
        "Landroid/telephony/SmsManager;->sendDataMessage",
    ],
    "network": [
        "Ljava/net/HttpURLConnection;->connect",
        "Ljava/net/URL;->openConnection",
        "Lokhttp3/OkHttpClient;-><init>",
        "Lokhttp3/Request$Builder;->build",
        "Lorg/apache/http/client/HttpClient;->execute",
        "Landroid/webkit/WebView;->loadUrl",
        "Landroid/webkit/WebView;->setWebViewClient",
    ],
    "native": [
        "Ljava/lang/System;->loadLibrary",
        "Ljava/lang/System;->load",
        "Ljava/lang/Runtime;->loadLibrary",
    ],
    "device_info": [
        "Landroid/os/Build;->FINGERPRINT",
        "Landroid/os/Build;->MODEL",
        "Landroid/os/Build;->MANUFACTURER",
        "Landroid/os/Build;->PRODUCT",
        "Landroid/os/Build;->BRAND",
        "Landroid/os/Build;->DEVICE",
        "Landroid/os/Build;->HARDWARE",
        "Landroid/os/Build;->SERIAL",
        "Landroid/os/Build$VERSION;->SDK_INT",
        "Landroid/provider/Settings$Secure;->getString",
    ],
    "file_io": [
        "Ljava/io/FileOutputStream;-><init>",
        "Ljava/io/FileInputStream;-><init>",
        "Landroid/content/SharedPreferences;->edit",
        "Landroid/database/sqlite/SQLiteDatabase;->execSQL",
        "Landroid/database/sqlite/SQLiteDatabase;->rawQuery",
    ],
    "ipc": [
        "Landroid/content/ContentResolver;->query",
        "Landroid/content/ContentResolver;->insert",
        "Landroid/content/ContentResolver;->delete",
        "Landroid/content/Intent;-><init>",
        "Landroid/content/Context;->sendBroadcast",
        "Landroid/content/Context;->startService",
        "Landroid/content/Context;->bindService",
    ],
}


class APKDexExtractor(APKExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False,
        apk=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, apk,
        )
        self.dex_files = []
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.APK_DEX.value

    def _analyze_api_usage(self, dex):
        """Categorize sensitive API calls found in DEX bytecode."""
        api_usage = {cat: set() for cat in SENSITIVE_API_CATEGORIES}

        try:
            for method in dex.get_encoded_methods():
                code = method.get_code()
                if not code:
                    continue
                try:
                    bytecode = code.get_bc()
                    if not bytecode:
                        continue
                    for instruction in bytecode.get_instructions():
                        op_name = instruction.get_name()
                        if not op_name or not op_name.startswith("invoke"):
                            continue
                        output = instruction.get_output()
                        if not output:
                            continue
                        for category, patterns in SENSITIVE_API_CATEGORIES.items():
                            for pattern in patterns:
                                if pattern in output:
                                    api_usage[category].add(output.strip())
                                    break
                except Exception:
                    continue
        except Exception as e:
            self.log.warning(f"Error analyzing API usage: {e}")

        # Convert sets to sorted lists
        return {cat: sorted(calls) for cat, calls in api_usage.items() if calls}

    def _compute_obfuscation_indicators(self, classes, methods):
        """Compute obfuscation indicators from class/method names."""
        class_names = []
        for cls in classes:
            try:
                name = cls.get_name()
                if name:
                    class_names.append(name)
            except Exception:
                continue

        method_names = []
        for m in methods:
            try:
                name = m.get_name()
                if name and name not in ("<init>", "<clinit>"):
                    method_names.append(name)
            except Exception:
                continue

        if not class_names:
            return None

        # Short class names: extract just the class part from Dalvik notation
        short_class = 0
        for n in class_names:
            simple = n.split("/")[-1].rstrip(";")
            if len(simple) <= 2:
                short_class += 1

        short_method = sum(1 for n in method_names if len(n) <= 2)

        return {
            "short_class_names_pct": round(short_class / max(len(class_names), 1), 4),
            "short_method_names_pct": round(short_method / max(len(method_names), 1), 4),
            "non_ascii_identifiers": sum(1 for n in class_names if not n.isascii()),
            "avg_class_name_length": round(
                sum(len(n) for n in class_names) / max(len(class_names), 1), 2
            ),
        }

    def _compute_top_packages(self, classes):
        """Compute top packages by class count."""
        package_counter = Counter()
        for cls in classes:
            try:
                name = cls.get_name()  # "Lcom/example/foo/Bar;"
                if not name:
                    continue
                parts = name[1:].replace("/", ".").rsplit(".", 1)
                if len(parts) > 1:
                    package = parts[0]
                else:
                    package = "(default)"
                package_counter[package] += 1
            except Exception:
                continue

        return [
            {"package": pkg, "class_count": count}
            for pkg, count in package_counter.most_common(20)
        ]

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        from androguard.core.dex import DEX

        try:
            dex_names = list(self.apk.get_dex_names() or [])
        except Exception as e:
            self.log.warning(f"Error getting DEX names for {self.hash.sha256}: {e}")
            dex_names = []

        try:
            dex_buffers = list(self.apk.get_all_dex() or [])
        except Exception as e:
            self.log.error(f"Error getting DEX buffers for {self.hash.sha256}: {e}")
            return None

        if not dex_buffers:
            self.log.debug("No DEX files found in APK")
            return None

        self.dex_files = []
        for i, dex_data in enumerate(dex_buffers):
            dex_name = dex_names[i] if i < len(dex_names) else f"classes{i}.dex"

            dex_sha256 = hashlib.sha256(dex_data).hexdigest()
            dex_tlsh = None
            if len(dex_data) >= 50:
                try:
                    dex_tlsh = tlsh.hash(dex_data) or None
                except Exception:
                    pass

            try:
                d = DEX(dex_data)
            except Exception as e:
                self.log.warning(f"Failed to parse DEX {dex_name}: {e}")
                continue

            try:
                classes = list(d.get_classes() or [])
            except Exception as e:
                self.log.warning(f"Error getting classes from {dex_name}: {e}")
                classes = []
            try:
                methods = list(d.get_methods() or [])
            except Exception as e:
                self.log.warning(f"Error getting methods from {dex_name}: {e}")
                methods = []
            try:
                strings = list(d.get_strings() or [])
            except Exception as e:
                self.log.warning(f"Error getting strings from {dex_name}: {e}")
                strings = []

            try:
                top_packages = self._compute_top_packages(classes)
            except Exception as e:
                self.log.warning(f"Error computing top packages for {dex_name}: {e}")
                top_packages = []
            try:
                api_usage = self._analyze_api_usage(d)
            except Exception as e:
                self.log.warning(f"Error analyzing API usage for {dex_name}: {e}")
                api_usage = {}
            try:
                obfuscation_indicators = self._compute_obfuscation_indicators(classes, methods)
            except Exception as e:
                self.log.warning(f"Error computing obfuscation indicators for {dex_name}: {e}")
                obfuscation_indicators = None

            self.dex_files.append(APKDexFile(
                filename=dex_name,
                sha256=dex_sha256,
                class_count=len(classes),
                method_count=len(methods),
                string_count=len(strings),
                tlsh=dex_tlsh,
                top_packages=top_packages,
                api_usage=api_usage if api_usage else None,
                obfuscation_indicators=obfuscation_indicators,
            ))

        return self.dex_files if self.dex_files else None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.dex_files:
                return None

            current_time = datetime.now(timezone.utc)

            # DEX table: one row per DEX file
            dex_data = []
            for dex in self.dex_files:
                dex_data.append([
                    self.sha256,
                    dex.sha256,
                    dex.filename,
                    dex.tlsh,
                    dex.class_count,
                    dex.method_count,
                    dex.string_count,
                    json.dumps(dex.top_packages) if dex.top_packages else None,
                    json.dumps(dex.obfuscation_indicators) if dex.obfuscation_indicators else None,
                    current_time,
                ])

            # API usage table: one row per category per DEX
            api_data = []
            for dex in self.dex_files:
                if dex.api_usage:
                    for category, api_calls in dex.api_usage.items():
                        api_data.append([
                            self.sha256,
                            dex.sha256,
                            category,
                            api_calls,
                            current_time,
                        ])

            return {
                'multi_table': True,
                'dex': {
                    'table': 'redb_apk_dex',
                    'data': dex_data,
                    'column_names': [
                        'sha256', 'dex_sha256', 'dex_filename', 'dex_tlsh',
                        'dex_class_count', 'dex_method_count', 'dex_string_count',
                        'dex_top_packages', 'dex_obfuscation_indicators',
                        'analysis_date',
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(64)', 'String', 'Nullable(String)',
                        'UInt32', 'UInt32', 'UInt32',
                        'Nullable(String)', 'Nullable(String)',
                        "DateTime64(3, 'UTC')",
                    ],
                },
                'api_usage': {
                    'table': 'redb_apk_dex_api_usage',
                    'data': api_data,
                    'column_names': [
                        'sha256', 'dex_sha256', 'api_category',
                        'api_calls', 'analysis_date',
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(64)', 'LowCardinality(String)',
                        'Array(String)', "DateTime64(3, 'UTC')",
                    ],
                },
            }

    def get_clickhouse_table(self) -> str:
        return "redb_apk_dex"