Haehyun Cho

44 papers A* 8A 4Misc 4Journal 23Unranked 5
YearRankTypeTitle / Venue / Authors
2025 A* conf
EMNLP
Minyeong Choe, Haehyun Cho, Changho Seo, Hyunil Kim
2025 J jnl
CoRR
Minyeong Choe, Haehyun Cho, Changho Seo, Hyunil Kim
2025 J jnl
Comput. Secur.
Hongjoo Jin, Sumin Yang, Haehyun Cho, Dong Hoon Lee
2025 J jnl
IEEE Access
Kyungmin Sim, Honyeong Heo, Haehyun Cho
2025 A* conf
CCS
Seongyun Jeong, Minseong Choi, Haehyun Cho, Seokwoo Choi, Hyungsub Kim, Yuseok Jeon
2025 J jnl
Future Internet
Daegyeom Kim, Sehwan O, Younghoon Ban, Jungsoo Park, Kyungho Joo, Haehyun Cho
2025 J jnl
IEEE Access
Sehwan O, Minho Kim, Younghoon Ban, Haehyun Cho
2024 J jnl
Future Internet
Kyungmin Sim, Honyeong Heo, Haehyun Cho
2024 Misc conf
SEC
Minseong Choi, Yubin Im, Steven Y. Ko, Yonghwi Kwon, Yuseok Jeon, Haehyun Cho
2024 Misc conf
SEC
Hongjoo Jin, Sumin Yang, Moon Chan Park, Haehyun Cho, Dong Hoon Lee
2023 J jnl
Comput. Syst. Sci. Eng.
Younghoon Ban, Jeong Hyun Yi, Haehyun Cho
2023 A* conf
SP
Marzieh Bitaab, Haehyun Cho, Adam Oest, Zhuoer Lyu, Wei Wang, Jorij Abraham, Ruoyu Wang, Tiffany Bao, Yan Shoshitaishvili, Adam Doupé
2023 J jnl
Intell. Autom. Soft Comput.
Byeori Kim, Minseong Choi, Taek-Young Youn, Jeong Hyun Yi, Haehyun Cho
2023 J jnl
Intell. Autom. Soft Comput.
Seungmin Lee, Hyunghoon Kim, Haehyun Cho, Hyo Jin Jo
2022 J jnl
IEEE Secur. Priv.
Penghui Zhang, Adam Oest, Haehyun Cho, Zhibo Sun, RC Johnson, Brad Wardman, Shaown Sarker, Alexandros Kapravelos, Tiffany Bao, Ruoyu Wang, Yan Shoshitaishvili, Adam Doupé, Gail-Joon Ahn
2022 J jnl
IEICE Trans. Inf. Syst.
Haehyun Cho
2022 Misc conf
WISA
Bora Lee, Kyungchan Lim, Jiho Lee, Chijung Jung, Doowon Kim, Kyu Hyung Lee, Haehyun Cho, Yonghwi Kwon
2022 J jnl
IEEE Access
Younghoon Ban, Sunjun Lee, Dokyung Song, Haehyun Cho, Jeong Hyun Yi
2022 J jnl
IEICE Trans. Inf. Syst.
Geochang Jeon, Jeong Hyun Yi, Haehyun Cho
2022 A* conf
CCS
Penghui Zhang, Zhibo Sun, Sukwha Kyung, Hans Walter Behrens, Zion Leonahenahe Basque, Haehyun Cho, Adam Oest, Ruoyu Wang, Tiffany Bao, Yan Shoshitaishvili, Gail-Joon Ahn, Adam Doupé
2022 J jnl
IEEE Access
Minho Kim, Haehyun Cho, Jeong Hyun Yi
2022 J jnl
Int. J. Inf. Sec.
Jinsung Kim, Younghoon Ban, Eunbyeol Ko, Haehyun Cho, Jeong Hyun Yi
2022 A* conf
USENIX Security Symposium
Kyle Zeng, Yueqi Chen, Haehyun Cho, Xinyu Xing, Adam Doupé, Yan Shoshitaishvili, Tiffany Bao
2022 A* conf
ASPLOS
Haehyun Cho, Jinbum Park, Adam Oest, Tiffany Bao, Ruoyu Wang, Yan Shoshitaishvili, Adam Doupé, Gail-Joon Ahn
2021 J jnl
IEEE Access
Geochang Jeon, Minseong Choi, Sunjun Lee, Jeong Hyun Yi, Haehyun Cho
2021 A* conf
SP
Penghui Zhang, Adam Oest, Haehyun Cho, Zhibo Sun, RC Johnson, Brad Wardman, Shaown Sarker, Alexandros Kapravelos, Tiffany Bao, Ruoyu Wang, Yan Shoshitaishvili, Adam Doupé, Gail-Joon Ahn
2021 A* conf
NDSS
Sung Ta Dinh, Haehyun Cho, Kyle Martin, Adam Oest, Kyle Zeng, Alexandros Kapravelos, Gail-Joon Ahn, Tiffany Bao, Ruoyu Wang, Adam Doupé, Yan Shoshitaishvili
2021 J jnl
CoRR
Marzieh Bitaab, Haehyun Cho, Adam Oest, Penghui Zhang, Zhibo Sun, Rana Pourmohamad, Doowon Kim, Tiffany Bao, Ruoyu Wang, Yan Shoshitaishvili, Adam Doupé, Gail-Joon Ahn
2021 A conf
AsiaCCS
Doowon Kim, Haehyun Cho, Yonghwi Kwon, Adam Doupé, Sooel Son, Gail-Joon Ahn, Tudor Dumitras
2020 conf
WOOT @ USENIX Security Symposium
Haehyun Cho, Jinbum Park, Joonwon Kang, Tiffany Bao, Ruoyu Wang, Yan Shoshitaishvili, Adam Doupé, Gail-Joon Ahn
2020 conf
eCrime
Marzieh Bitaab, Haehyun Cho, Adam Oest, Penghui Zhang, Zhibo Sun, Rana Pourmohamad, Doowon Kim, Tiffany Bao, Ruoyu Wang, Yan Shoshitaishvili, Adam Doupé, Gail-Joon Ahn
2020 A conf
MobiSys
Haehyun Cho, Jinbum Park, Donguk Kim, Ziming Zhao, Yan Shoshitaishvili, Adam Doupé, Gail-Joon Ahn
2019 Misc conf
SAC
Penghui Zhang, Haehyun Cho, Ziming Zhao, Adam Doupé, Gail-Joon Ahn
2018 J jnl
IEEE Access
Haehyun Cho, Jeong Hyun Yi, Gail-Joon Ahn
2018 A conf
ACSAC
Haehyun Cho, Penghui Zhang, Donguk Kim, Jinbum Park, Choong-Hoon Lee, Ziming Zhao, Adam Doupé, Gail-Joon Ahn
2018 conf
CODASPY
Penghui Zhang, Bernard Ngabonziza, Haehyun Cho, Ziming Zhao, Adam Doupé, Gail-Joon Ahn
2018 A conf
ACSAC
Jaejong Baek, Sukwha Kyung, Haehyun Cho, Ziming Zhao, Yan Shoshitaishvili, Adam Doupé, Gail-Joon Ahn
2017 J jnl
Int. J. Serv. Technol. Manag.
Haehyun Cho, Hyunki Kim, Jongsu Lim, Junghwan Lee, Jeong Hyun Yi
2016 J jnl
J. Supercomput.
Haehyun Cho, Jongsu Lim, Hyunki Kim, Jeong Hyun Yi
2016 J jnl
J. Supercomput.
Haehyun Cho, Jiwoong Bang, Myeongju Ji, Jeong Hyun Yi
2016 J jnl
J. Comput. Secur.
Yiming Jing, Gail-Joon Ahn, Hongxin Hu, Haehyun Cho, Ziming Zhao
2016 conf
CIC
Bernard Ngabonziza, Daniel Martin, Anna Bailey, Haehyun Cho, Sarah Martin
2015 J jnl
Entropy
Jongwon Choi, Haehyun Cho, Jeong Hyun Yi
2015 conf
ICCE-Berlin
Jiwoong Bang, Haehyun Cho, Myeongju Ji, Taejoo Cho, Jeong Hyun Yi
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.")