Olena Vynokurova

34 papers C 2Misc 1Journal 7Unranked 22
YearRankTypeTitle / Venue / Authors
2025 conf
ITTAP
Danylo Stukhliak, Oleg Totosko, Petro Stukhliak, Olena Vynokurova, Danyl Zhytnyk
2025 conf
ITTAP
Oleksandr Povstianoi, Olena Vynokurova, Viktor Denysiuk, Yurii Lapchenko, Roman Hrudetskij
2024 conf
ISDMCI (2)
Olena Vynokurova, Dmytro Peleshko, Marta Peleshko, Maksym Kapys, Serhii Shatilo
2024 conf
BAIT
Petro Stukhliak, Oleg Totosko, Olena Vynokurova, Danulo Stukhlyak
2024 conf
ITTAP
Petro Stukhliak, Oleg Totosko, Danulo Stukhlyak, Olena Vynokurova, Iaroslav Lytvynenko
2020 conf
DSMP
Alexander Vlasenko, Yuriy Rashkevych, Nataliia Vlasenko, Dmytro Peleshko, Olena Vynokurova
2020 conf
DSMP (Selected Papers)
Alexander Vlasenko, Nataliia Vlasenko, Olena Vynokurova, Dmytro Peleshko
2020 ed.
DSMP (Selected Papers)
Sergii Babichev, Dmytro Peleshko, Olena Vynokurova
2020 conf
DSMP (Selected Papers)
Olena Vynokurova, Dmytro Peleshko, Marta Peleshko
2020 conf
DSMP
Olena Vynokurova, Dmytro Peleshko, Oleksandr Bondarenko, Vadim Ilyasov, Vladislav Serzhantov, Marta Peleshko
2020 conf
DSMP
Olena Vynokurova, Dmytro Peleshko
2020 ed.
ISDMCI
Volodymyr Lytvynenko, Sergii Babichev, Waldemar Wójcik, Olena Vynokurova, Svetlana Vyshemyrskaya, Svetlana Radetskaya
2020 conf
ISDMCI
Olena Vynokurova, Dmytro Peleshko, Polina Zhernova, Iryna Perova, Andrii Kovalenko
2019 J jnl
Data
Alexander Vlasenko, Nataliia Vlasenko, Olena Vynokurova, Yevgeniy V. Bodyanskiy, Dmytro Peleshko
2018 conf
DSMP
Alexander Vlasenko, Olena Vynokurova, Nataliia Vlasenko, Marta Peleshko
2018 J jnl
Data
Alexander Vlasenko, Nataliia Vlasenko, Olena Vynokurova, Dmytro Peleshko
2018 conf
DepCoS-RELCOMEX
Yevgeniy V. Bodyanskiy, Artem Dolotov, Dmytro Peleshko, Yuriy Rashkevych, Olena Vynokurova
2018 C conf
FedCSIS
Yevgeniy V. Bodyanskiy, Galina Setlak, Olena Vynokurova, Iryna Pliss, Olena O. Boiko
2018 conf
DSMP
Olena Vynokurova, Dmytro Peleshko, Yuriy Borzov, Semen Oskerko, Viktor Voloshyn
2018 conf
DSMP
Yevgeniy V. Bodyanskiy, Dmytro Peleshko, Yuriy Rashkevych, Olena Vynokurova
2018 conf
ACIT
Yevgeniy V. Bodyanskiy, Iryna Pliss, Olena Vynokurova
2017 conf
EUSFLAT/IWIFSGN (3)
Galina Setlak, Yevgeniy V. Bodyanskiy, Iryna Pliss, Olena Vynokurova, Dmytro Peleshko, Illya Kobylin
2017 J jnl
Neurocomputing
Yevgeniy V. Bodyanskiy, Olena Vynokurova, Galina Setlak, Dmytro Peleshko, Pavlo Mulesa
2017 conf
DepCoS-RELCOMEX
Yevgeniy V. Bodyanskiy, Olena Vynokurova, Iryna Pliss, Dmytro Peleshko, Yuriy Rashkevych
2016 conf
DSMP
Yevgeniy V. Bodyanskiy, Olena Vynokurova, Zdzislaw Szymanski, Illya Kobylin, Oleg Kobylin
2016 C conf
FedCSIS
Galina Setlak, Yevgeniy V. Bodyanskiy, Olena Vynokurova, Iryna Pliss
2016 conf
DSMP
Yevgeniy V. Bodyanskiy, Olena Vynokurova, Iryna Pliss, Galina Setlak, Pavlo Mulesa
2016 conf
DepCoS-RELCOMEX
Yevgeniy V. Bodyanskiy, Olena Vynokurova, Iryna Pliss, Dmytro Peleshko, Yuriy Rashkevych
2016 J jnl
CoRR
Yevgeniy V. Bodyanskiy, Olena Vynokurova, Volodymyr Savvo, Tatiana Tverdokhlib, Pavlo Mulesa
2015 conf
IDAACS
Yevgeniy V. Bodyanskiy, Galina Setlak, Dmytro Peleshko, Olena Vynokurova
2015 Misc conf
CSIT
Yevgeniy V. Bodyanskiy, Olena Vynokurova, Galina Setlak, Iryna Pliss
2014 J jnl
Appl. Soft Comput.
Yevgeniy V. Bodyanskiy, Artem Dolotov, Olena Vynokurova
2013 J jnl
Inf. Sci.
Yevgeniy V. Bodyanskiy, Olena Vynokurova
2005 J jnl
Expert Syst. J. Knowl. Eng.
Yevgeniy V. Bodyanskiy, Nataliya Lamonova, Irina Pliss, Olena Vynokurova
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.")