Varun Narayanan

46 papers A 1B 5Journal 21Unranked 19
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Inf. Theory
Neha Sangwan, Varun Narayanan, Vinod M. Prabhakaran
2025 B conf
ISIT
Hari Krishnan P. Anilkumar, Neha Sangwan, Varun Narayanan, Vinod M. Prabhakaran
2025 J jnl
CoRR
Hari Krishnan P. Anilkumar, Neha Sangwan, Varun Narayanan, Vinod M. Prabhakaran
2025 conf
CRYPTO (4)
David Heath, Vladimir Kolesnikov, Varun Narayanan, Rafail Ostrovsky, Akash Shah
2025 J jnl
IACR Cryptol. ePrint Arch.
David Heath, Vladimir Kolesnikov, Varun Narayanan, Rafail Ostrovsky, Akash Shah
2025 A conf
ITC
Tamar Ben David, Varun Narayanan, Olga Nissenbaum, Anat Paskin-Cherniavsky
2025 conf
EUROCRYPT (4)
Yuval Ishai, Eyal Kushilevitz, Varun Narayanan, Rafail Ostrovsky, Akash Shah
2024 conf
EUROCRYPT (5)
Damiano Abram, Jack Doerner, Yuval Ishai, Varun Narayanan
2024 conf
ASIACRYPT (7)
Kaartik Bhushan, Rishab Goyal, Venkata Koppula, Varun Narayanan, Manoj Prabhakaran, Mahesh Sreekumar Rajasree
2024 J jnl
IACR Cryptol. ePrint Arch.
Tamar Ben David, Varun Narayanan, Olga Nissenbaum, Anat Paskin-Cherniavsky
2024 conf
ASIACRYPT (7)
Hari Krishnan P. Anilkumar, Varun Narayanan, Manoj Prabhakaran, Vinod M. Prabhakaran
2024 J jnl
IACR Cryptol. ePrint Arch.
Hari Krishnan P. Anilkumar, Varun Narayanan, Manoj Prabhakaran, Vinod M. Prabhakaran
2024 conf
TCC (4)
Varun Narayanan, Shubham Vivek Pawar, Akshayaram Srinivasan
2024 J jnl
IACR Cryptol. ePrint Arch.
Varun Narayanan, Shubham Vivek Pawar, Akshayaram Srinivasan
2024 conf
TCC (4)
Giovanni Deligios, Anders Konring, Chen-Da Liu-Zhang, Varun Narayanan
2024 J jnl
IACR Cryptol. ePrint Arch.
Giovanni Deligios, Anders Konring, Chen-Da Liu-Zhang, Varun Narayanan
2023 J jnl
IACR Cryptol. ePrint Arch.
Varun Narayanan, Vinod M. Prabhakaran, Neha Sangwan, Shun Watanabe
2023 conf
EUROCRYPT (2)
Varun Narayanan, Vinod M. Prabhakaran, Neha Sangwan, Shun Watanabe
2023 conf
TCC (1)
Damiano Abram, Amos Beimel, Yuval Ishai, Eyal Kushilevitz, Varun Narayanan
2023 J jnl
IACR Cryptol. ePrint Arch.
Damiano Abram, Amos Beimel, Yuval Ishai, Eyal Kushilevitz, Varun Narayanan
2023 conf
IFIPIoT (1)
Varun Narayanan, Sriram Sankaran
2023 conf
CRYPTO (1)
Yuval Ishai, Mahimna Kelkar, Varun Narayanan, Liav Zafar
2023 J jnl
IACR Cryptol. ePrint Arch.
Yuval Ishai, Mahimna Kelkar, Varun Narayanan, Liav Zafar
2023 conf
CRYPTO (1)
Bernardo David, Giovanni Deligios, Aarushi Goel, Yuval Ishai, Anders Konring, Eyal Kushilevitz, Chen-Da Liu-Zhang, Varun Narayanan
2023 J jnl
IACR Cryptol. ePrint Arch.
Bernardo David, Anders Konring, Yuval Ishai, Eyal Kushilevitz, Varun Narayanan
2023 B conf
ISIT
Hari Krishnan P. Anilkumar, Aayush Rajesh, Varun Narayanan, Manoj M. Prabhakaran, Vinod M. Prabhakaran
2023 J jnl
CoRR
Hari Krishnan P. Anilkumar, Aayush Rajesh, Varun Narayanan, Manoj M. Prabhakaran, Vinod M. Prabhakaran
2022 B conf
ISIT
Neha Sangwan, Varun Narayanan, Vinod M. Prabhakaran
2022 J jnl
CoRR
Neha Sangwan, Varun Narayanan, Vinod M. Prabhakaran
2022 conf
TCC (3)
Saumya Goyal, Varun Narayanan, Manoj Prabhakaran
2022 J jnl
IACR Cryptol. ePrint Arch.
Saumya Goyal, Varun Narayanan, Manoj Prabhakaran
2022 J jnl
IEEE Trans. Inf. Theory
Varun Narayanan, Jithin Ravi, Vivek K. Mishra, Bikash Kumar Dey, Nikhil Karamchandani, Vinod M. Prabhakaran
2022 J jnl
IACR Cryptol. ePrint Arch.
Kaartik Bhushan, Ankit Kumar Misra, Varun Narayanan, Manoj Prabhakaran
2022 J jnl
IACR Cryptol. ePrint Arch.
Pratyush Agarwal, Varun Narayanan, Shreya Pathak, Manoj Prabhakaran, Vinod M. Prabhakaran, Mohammad Ali Rehan
2022 conf
TCC (2)
Kaartik Bhushan, Ankit Kumar Misra, Varun Narayanan, Manoj Prabhakaran
2022 conf
EUROCRYPT (3)
Pratyush Agarwal, Varun Narayanan, Shreya Pathak, Manoj Prabhakaran, Vinod M. Prabhakaran, Mohammad Ali Rehan
2021 conf
CRYPTO (2)
Shweta Agrawal, Yuval Ishai, Eyal Kushilevitz, Varun Narayanan, Manoj Prabhakaran, Vinod M. Prabhakaran, Alon Rosen
2020 conf
ASIACRYPT (3)
Shweta Agrawal, Yuval Ishai, Eyal Kushilevitz, Varun Narayanan, Manoj Prabhakaran, Vinod M. Prabhakaran, Alon Rosen
2020 J jnl
CoRR
Varun Narayanan, Jithin Ravi, Vivek K. Mishra, Bikash Kumar Dey, Nikhil Karamchandani, Vinod M. Prabhakaran
2020 B conf
ISIT
Varun Narayanan, Manoj Mishra, Vinod M. Prabhakaran
2020 J jnl
CoRR
Varun Narayanan, Manoj Mishra, Vinod M. Prabhakaran
2020 conf
TCC (3)
Varun Narayanan, Manoj Prabhakaran, Vinod M. Prabhakaran
2020 J jnl
IACR Cryptol. ePrint Arch.
Varun Narayanan, Manoj Prabhakaran, Vinod M. Prabhakaran
2018 conf
TCC (1)
Varun Narayanan, Vinod M. Prabhakaran
2018 J jnl
IACR Cryptol. ePrint Arch.
Varun Narayanan, Vinod M. Prabhakaran
2018 B conf
ISIT
Varun Narayanan, Vinod M. Prabhakaran, Jithin Ravi, Vivek K. Mishra, Bikash Kumar Dey, Nikhil Karamchandani
redb/extractors/decompiler/_archive/ghidra-test.py
← Index redb/extractors/decompiler/_archive/ghidra-test.py python
import subprocess
import json
import os
import tempfile
import uuid
import shutil
import sys
import time


def run_command(cmd, env=None):
    try:
        print(f"Starting command: {' '.join(cmd)}")
        start_time = time.time()
        process = subprocess.Popen(
            cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
        )

        while True:
            output = process.stdout.readline()
            if output:
                print(output.strip())
            if process.poll() is not None:
                break

        stdout, stderr = process.communicate()
        end_time = time.time()

        print(f"Command finished. Execution time: {end_time - start_time:.2f} seconds")
        print(f"Return code: {process.returncode}")

        if process.returncode != 0:
            print(f"Error output:\n{stderr}")
            return None
        return stdout
    except Exception as e:
        print(f"Error running command {' '.join(cmd)}: {e}")
        return None


def analyze_binary(ghidra_path, binary_path, java_script_path):
    print(f"Ghidra path: {ghidra_path}")
    print(f"Binary path: {binary_path}")
    print(f"Java script path: {java_script_path}")

    # Check if Java script exists
    if not os.path.exists(java_script_path):
        print(f"Error: Java script not found at {java_script_path}")
        return None

    # Set up environment variables
    env = os.environ.copy()
    java_home = "/usr/lib/jvm/java-17-openjdk-amd64"  # Adjust this path if needed
    env["JAVA_HOME"] = java_home
    env["PATH"] = f"{java_home}/bin:{env['PATH']}"
    env["LD_LIBRARY_PATH"] = f"{java_home}/lib:{env.get('LD_LIBRARY_PATH', '')}"

    # Print environment variables for debugging
    print(f"JAVA_HOME: {env['JAVA_HOME']}")
    print(f"PATH: {env['PATH']}")
    print(f"LD_LIBRARY_PATH: {env['LD_LIBRARY_PATH']}")

    # Check Ghidra installation
    analyzeHeadless_path = f"{ghidra_path}/support/analyzeHeadless"
    print(f"analyzeHeadless exists: {os.path.exists(analyzeHeadless_path)}")

    print(f"Binary file exists: {os.path.exists(binary_path)}")

    # Check Java
    java_version = run_command(["java", "-version"], env=env)
    print(f"Java version: {java_version}")

    # Create a temporary project directory
    project_path = tempfile.gettempdir() + "/ghidra_" + str(uuid.uuid4())
    os.makedirs(project_path, exist_ok=True)
    print(f"Created temporary project path: {project_path}")
    output_file = ""

    try:
        # Run Ghidra's headless analyzer
        analyze_cmd = [
            analyzeHeadless_path,
            project_path,
            "TempProject",
            "-import",
            binary_path,
            "-postScript",
            java_script_path,
            "-deleteProject",
        ]

        result = run_command(analyze_cmd, env=env)
        if result is None:
            return None

        # Read the output JSON file
        output_file = "ghidra_output.json"
        if os.path.exists(output_file):
            with open(output_file, "r") as f:
                functions = json.load(f)
            return functions
        else:
            print(
                f"Output file {output_file} not found. Ghidra analysis may have failed."
            )
            # List files in the current directory
            print("Files in the current directory:")
            print("\n".join(os.listdir(".")))
            return None
    finally:
        # Clean up
        if os.path.exists(output_file):
            os.remove(output_file)
        if os.path.exists(project_path):
            shutil.rmtree(project_path)


# Example usage
if __name__ == "__main__":
    # if len(sys.argv) != 4:
    #     print("Usage: python script.py <ghidra_path> <binary_path> <java_script_path>")
    #     sys.exit(1)

    # ghidra_path = sys.argv[1]
    # binary_path = sys.argv[2]
    # java_script_path = sys.argv[3]

    ghidra_path = "/opt/ghidra"
    binary_path = "/home/p4c0/dev/redb/test_files/hello"
    java_script_path = (
        "/opt/ghidra/Ghidra/Features/Base/ghidra_scripts/GhidraDecompilerScript.java"
    )

    functions = analyze_binary(ghidra_path, binary_path, java_script_path)

    if functions:
        print(f"Extracted functions from {binary_path}:")
        for func in functions:
            print(f"\nFunction: {func['name']}")
            print(f"Address: {func['address']}")
            print(f"Decompiled code:\n{func['decompiled']}")
    else:
        print("Failed to extract functions.")