Hakjoo Oh

79 papers A* 22A 3B 10Misc 1Journal 35Unranked 7
YearRankTypeTitle / Venue / Authors
2026 B ed.
SAS
Hakjoo Oh, Yulei Sui
2025 J jnl
Proc. ACM Program. Lang.
Donguk Kim, Minseok Jeon, Doha Hwang, Hakjoo Oh
2025 J jnl
Proc. ACM Program. Lang.
Dowon Song, Hakjoo Oh
2025 J jnl
Proc. ACM Program. Lang.
Donguk Kim, Minseok Jeon, Doha Hwang, Hakjoo Oh
2024 A* conf
ASE
Myungho Lee, Jiseong Bak, Seokhyeon Moon, Yoonchan Jhi, Hakjoo Oh
2024 J jnl
Proc. ACM Program. Lang.
Minseok Jeon, Jihyeok Park, Hakjoo Oh
2024 J jnl
Proc. ACM Program. Lang.
Seungmin Jeon, Kyeongmin Cho, Chan Gu Kang, Janggun Lee, Hakjoo Oh, Jeehoon Kang
2024 J jnl
Proc. ACM Program. Lang.
Chan Gu Kang, Joonghoon Lee, Hakjoo Oh
2024 A* conf
ASE
Wonseok Oh, Hakjoo Oh
2023 A conf
ICST
Jinkook Kim, Minseok Jeon, Sejeong Jang, Hakjoo Oh
2023 A* conf
ICSE
JongWook Kim, Sunbeom So, Hakjoo Oh
2023 A* conf
ICSE
Myungho Lee, Sooyoung Cha, Hakjoo Oh
2023 A* conf
ICSE
Yoonseok Ko, Hakjoo Oh
2023 J jnl
Proc. ACM Program. Lang.
Chan Gu Kang, Hakjoo Oh
2023 J jnl
ACM Trans. Program. Lang. Syst.
DongKwon Lee, Woosuk Lee, Hakjoo Oh, Kwangkeun Yi
2023 conf
ESEC/SIGSOFT FSE
Sunbeom So, Hakjoo Oh
2023 A* conf
USENIX Security Symposium
Seunghoon Woo, Eunjin Choi, Heejo Lee, Hakjoo Oh
2022 J jnl
IEEE Trans. Software Eng.
Sooyoung Cha, Seongjoon Hong, Jiseong Bak, Jingyoung Kim, Junhee Lee, Hakjoo Oh
2022 A* conf
ICSE
Junhee Lee, Seongjoon Hong, Hakjoo Oh
2022 conf
ESEC/SIGSOFT FSE
Wonseok Oh, Hakjoo Oh
2022 J jnl
Proc. ACM Program. Lang.
Minseok Jeon, Hakjoo Oh
2022 A* conf
ICSE
Sooyoung Cha, Myungho Lee, Seokhyun Lee, Hakjoo Oh
2021 J jnl
Inf. Softw. Technol.
Donghoon Jeon, Minseok Jeon, Hakjoo Oh
2021 J jnl
CoRR
Seunghoon Woo, Sunghan Park, Seulbae Kim, Heejo Lee, Hakjoo Oh
2021 A* conf
ICSE
Seunghoon Woo, Sunghan Park, Seulbae Kim, Heejo Lee, Hakjoo Oh
2021 conf
ESEC/SIGSOFT FSE
Dowon Song, Woosuk Lee, Hakjoo Oh
2021 B ed.
APLAS
Hakjoo Oh
2021 A* conf
USENIX Security Symposium
Sunbeom So, Seongjoon Hong, Hakjoo Oh
2020 A conf
ISSTA
Seokhyun Lee, Sooyoung Cha, Dain Lee, Hakjoo Oh
2020 J jnl
Proc. ACM Program. Lang.
Minseok Jeon, Myungho Lee, Hakjoo Oh
2020 conf
ESEC/SIGSOFT FSE
Sooyoung Cha, Hakjoo Oh
2020 A* conf
PLDI
DongKwon Lee, Woosuk Lee, Hakjoo Oh, Kwangkeun Yi
2020 ed.
TAPAS@SPLASH
Hakjoo Oh, Yulei Sui
2020 A* conf
ICSE
Seongjoon Hong, Junhee Lee, Jeongsoo Lee, Hakjoo Oh
2020 A* conf
SP
Sunbeom So, Myungho Lee, Jisu Park, Heejo Lee, Hakjoo Oh
2019 J jnl
ACM Trans. Program. Lang. Syst.
Minseok Jeon, Sehun Jeong, Sung Deok Cha, Hakjoo Oh
2019 J jnl
Proc. ACM Program. Lang.
Dowon Song, Myungho Lee, Hakjoo Oh
2019 conf
ESEC/SIGSOFT FSE
Sooyoung Cha, Hakjoo Oh
2019 J jnl
CoRR
Sooyoung Cha, Seongjoon Hong, Jingyoung Kim, Junhee Lee, Hakjoo Oh
2019 A* conf
ICSE
Kihong Heo, Hakjoo Oh, Hongseok Yang
2019 J jnl
CoRR
Sunbeom So, Myungho Lee, Jisu Park, Heejo Lee, Hakjoo Oh
2018 J jnl
Inf. Softw. Technol.
Sooyoung Cha, Sehun Jeong, Hakjoo Oh
2018 J jnl
ACM Trans. Program. Lang. Syst.
Kihong Heo, Hakjoo Oh, Hongseok Yang, Kwangkeun Yi
2018 J jnl
Proc. ACM Program. Lang.
Junho Lee, Dowon Song, Sunbeom So, Hakjoo Oh
2018 A* conf
ICSE
Sooyoung Cha, Seongjoon Hong, Junhee Lee, Hakjoo Oh
2018 J jnl
Formal Methods Syst. Des.
Kihong Heo, Hakjoo Oh, Hongseok Yang
2018 conf
ESEC/SIGSOFT FSE
Junhee Lee, Seongjoon Hong, Hakjoo Oh
2018 J jnl
Proc. ACM Program. Lang.
Minseok Jeon, Sehun Jeong, Hakjoo Oh
2018 A* conf
IJCAI
Sunbeom So, Hakjoo Oh
2018 A* conf
ASE
Sooyoung Cha, Seonho Lee, Hakjoo Oh
2017 J jnl
Proc. ACM Program. Lang.
Kwonsoo Chae, Hakjoo Oh, Kihong Heo, Hongseok Yang
2017 J jnl
Proc. ACM Program. Lang.
Sehun Jeong, Minseok Jeon, Sung Deok Cha, Hakjoo Oh
2017 A* conf
IJCAI
Minje Choi, Sehun Jeong, Hakjoo Oh, Jaegul Choo
2017 J jnl
CoRR
Minje Choi, Sehun Jeong, Hakjoo Oh, Jaegul Choo
2017 A* conf
ICSE
Kihong Heo, Hakjoo Oh, Kwangkeun Yi
2017 J jnl
Softw. Pract. Exp.
Kihong Heo, Hakjoo Oh, Kwangkeun Yi
2017 J jnl
ACM Trans. Program. Lang. Syst.
Woosuk Lee, Wonchan Lee, Dongok Kang, Kihong Heo, Hakjoo Oh, Kwangkeun Yi
2017 J jnl
CoRR
Sunbeom So, Hakjoo Oh
2017 B conf
SAS
Sunbeom So, Hakjoo Oh
2017 A* conf
IEEE Symposium on Security and Privacy
Seulbae Kim, Seunghoon Woo, Heejo Lee, Hakjoo Oh
2016 Misc conf
SEC
Hongzhe Li, Jaesang Oh, Hakjoo Oh, Heejo Lee
2016 J jnl
CoRR
Kwonsoo Chae, Hakjoo Oh, Kihong Heo, Hongseok Yang
2016 B conf
APLAS
Sooyoung Cha, Sehun Jeong, Hakjoo Oh
2016 B conf
SAS
Kihong Heo, Hakjoo Oh, Hongseok Yang
2016 J jnl
ACM Trans. Program. Lang. Syst.
Hakjoo Oh, Wonchan Lee, Kihong Heo, Hongseok Yang, Kwangkeun Yi
2016 B conf
GPCE
Mina Lee, Sunbeom So, Hakjoo Oh
2016 J jnl
Softw. Pract. Exp.
Sol Kim, Kihong Heo, Hakjoo Oh, Kwangkeun Yi
2015 A conf
OOPSLA
Hakjoo Oh, Hongseok Yang, Kwangkeun Yi
2014 B conf
SAS
Woosuk Lee, Hakjoo Oh, Kwangkeun Yi
2014 J jnl
Comput. Lang. Syst. Struct.
Yoonseok Ko, Kihong Heo, Hakjoo Oh
2014 J jnl
ACM Trans. Program. Lang. Syst.
Hakjoo Oh, Kihong Heo, Wonchan Lee, Woosuk Lee, Daejun Park, Jeehoon Kang, Kwangkeun Yi
2014 A* conf
PLDI
Hakjoo Oh, Wonchan Lee, Kihong Heo, Hongseok Yang, Kwangkeun Yi
2013 J jnl
Sci. Comput. Program.
Hakjoo Oh, Kwangkeun Yi
2012 A* conf
PLDI
Hakjoo Oh, Kihong Heo, Wonchan Lee, Woosuk Lee, Kwangkeun Yi
2011 B conf
VMCAI
Hakjoo Oh, Lucas Brutschy, Kwangkeun Yi
2011 B conf
APLAS
Hakjoo Oh, Kwangkeun Yi
2010 J jnl
Softw. Pract. Exp.
Hakjoo Oh, Kwangkeun Yi
2009 conf
CIKM-DSMM
Yungbum Jung, Hakjoo Oh, Kwangkeun Yi
2009 B conf
APLAS
Hakjoo Oh
redb/extractors/decompiler/bninja/analysis/medium_level.py
← Index redb/extractors/decompiler/bninja/analysis/medium_level.py python
import time

from binaryninja import (
    MediumLevelILOperation as MLIL_OP,
)

try:
    from ..function_type import FunctionTypeAnalysis
    from ..similarity.minhasher import MinHasher, TokenKind
    from ..utils.hashes import calculate_sha256, calculate_tlsh
    from .medium_level_normalization import MediumLevelNormalization
except ImportError:
    from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import MediumLevelNormalization
    from redb.extractors.decompiler.bninja.similarity.minhasher import MinHasher
    from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256, calculate_tlsh


_MLIL_CALL_OPS = (
    MLIL_OP.MLIL_CALL,
    MLIL_OP.MLIL_CALL_SSA,
    MLIL_OP.MLIL_CALL_UNTYPED,
    MLIL_OP.MLIL_CALL_UNTYPED_SSA,
    MLIL_OP.MLIL_TAILCALL,
    MLIL_OP.MLIL_TAILCALL_SSA,
    MLIL_OP.MLIL_TAILCALL_UNTYPED,
    MLIL_OP.MLIL_TAILCALL_UNTYPED_SSA,
)

_MLIL_CONTROL_FLOW_OPS = (
    MLIL_OP.MLIL_IF,
    MLIL_OP.MLIL_GOTO,
    MLIL_OP.MLIL_JUMP,
    MLIL_OP.MLIL_JUMP_TO,
    MLIL_OP.MLIL_RET,
    MLIL_OP.MLIL_RET_HINT,
    MLIL_OP.MLIL_NORET,
) + _MLIL_CALL_OPS


class MediumLevelAnalysis:
    def __init__(self, function, bv, logger):
        self.function = function
        self.name = function.name
        self.start = function.start
        self.mlil_func = function.mlil
        self.bv = bv
        self.logger = logger
        self.errors = []

    def log_error(self, message, function_name, address, exception=None, error_location="unknown"):
        error_msg = f"Error in function {function_name} at {address}: {message}"
        if exception:
            error_msg += f" - {str(exception)}"
        self.logger.error(error_msg)

        error = {
            "function_name": function_name,
            "function_address": str(address),
            "error_location": error_location,
            "error_message": message,
            "error_details": str(exception) if exception else "",
            "error_type": type(exception).__name__ if exception else "Unknown",
            "timestamp": int(time.time() * 1000),
        }
        self.errors.append(error)

    def _collect_mlil_skeleton_and_typed(self):
        mlil = self.mlil_func
        if not mlil:
            return [], [], [], []

        start = self.start
        norm = MediumLevelNormalization()

        skeleton = []
        skeleton_with_addr = []
        typed = []
        typed_with_addr = []

        for il in mlil.instructions:
            skel_norm = norm.normalize_instruction_all_levels(il)
            typed_norm = norm.normalize_instr_with_operands(il)

            skeleton.append(skel_norm)
            typed.append(typed_norm)

            offset = il.address - start
            if offset < 0:
                offset = 0

            skeleton_with_addr.append((offset, skel_norm))
            typed_with_addr.append((offset, typed_norm))

        return skeleton, skeleton_with_addr, typed, typed_with_addr

    def analyze(self):
        (
            instr_skeleton,
            body_mlil_skeleton_vector,
            instr_typed,
            body_mlil_typed_vector,
        ) = self._collect_mlil_skeleton_and_typed()

        instr_skeleton_str = str(instr_skeleton)
        sha256_skeleton = calculate_sha256(instr_skeleton_str)
        tlsh_skeleton = calculate_tlsh(instr_skeleton_str)

        instr_typed_str = str(instr_typed)
        sha256_typed = calculate_sha256(instr_typed_str)
        tlsh_typed = calculate_tlsh(instr_typed_str)

        seed = 0xdeadbeef
        minhash_mlil_skeleton = MinHasher(seed, self.mlil_func, TokenKind.MLIL).calculateMinHash()
        minhash_mlil_typed = MinHasher(seed, self.mlil_func, TokenKind.TYPED_MLIL).calculateMinHash()

        medium_level_json = {
            "function_address": self.start,
            "body_mlil_skeleton_vector": body_mlil_skeleton_vector,
            "sha256_mlil_skeleton": sha256_skeleton,
            "tlsh_mlil_skeleton": tlsh_skeleton,
            "minhash_mlil_skeleton": minhash_mlil_skeleton,
            "body_mlil_typed_vector": body_mlil_typed_vector,
            "sha256_mlil_typed": sha256_typed,
            "tlsh_mlil_typed": tlsh_typed,
            "minhash_mlil_typed": minhash_mlil_typed,
        }

        return medium_level_json, self.errors