James W. Hong

48 papers A* 1B 9C 6Journal 13Unranked 19
YearRankTypeTitle / Venue / Authors
2020 B conf
CNSM
Suman Pandey, James W. Hong, Jae-Hyoung Yoo
2019 B conf
IM
Seyeon Jeong, Jae-Hyoung Yoo, James W. Hong
2011 J jnl
Int. J. Netw. Manag.
Suman Pandey, Young J. Won, James W. Hong, John Strassner
2011 J jnl
IEEE Commun. Mag.
Byungchul Park, James W. Hong, Young J. Won
2011 C conf
APNOMS
Suman Pandey, Mi-Jung Choi, Myung-Sup Kim, James W. Hong
2010 B conf
NOMS
Jae Yoon Chung, Byungchul Park, Young J. Won, John Strassner, James W. Hong
2009 C conf
APNOMS
Suman Pandey, Young J. Won, Hong-Taek Ju, James W. Hong
2009 C conf
APNOMS
Seong-Cheol Hong, Hong-Taek Ju, James W. Hong
2009 conf
ICOIN
Suman Pandey, Mi-Jung Choi, Sung-Joo Lee, James W. Hong
2009 conf
IPOM
Jae Yoon Chung, Byungchul Park, Young J. Won, John Strassner, James W. Hong
2008 J jnl
Ann. des Télécommunications
Mi-Jung Choi, Hong-Taek Ju, James W. Hong, Dong-Sik Yun
2008 C conf
APNOMS
Byungchul Park, Young J. Won, Mi-Jung Choi, Myung-Sup Kim, James W. Hong
2008 B conf
NOMS
Byung-Chul Park, Young J. Won, Myung-Sup Kim, James W. Hong
2007 B conf
PAM
Young J. Won, Byung-Chul Park, Seong-Cheol Hong, Kwang Bon Jung, Hong-Taek Ju, James W. Hong
2006 conf
E2EMON
Young J. Won, Byung-Chul Park, Hong-Taek Ju, Myung-Sup Kim, James W. Hong
2006 J jnl
Comput. Commun.
Myung-Sup Kim, Young J. Won, James W. Hong
2006 C conf
APNOMS
Sun-Mi Yoo, Hong-Taek Ju, James W. Hong
2004 conf
NOMS (1)
Myung-Sup Kim, Hun-Jeong Kang, Seong-Cheol Hong, Seung-Hwa Chung, James W. Hong
2004 conf
NOMS (1)
Hyoun-Mi Choi, Mi-Jung Choi, James W. Hong
2004 J jnl
IEEE Commun. Mag.
Mi-Jung Choi, Hyoun-Mi Choi, James W. Hong, Hong-Taek Ju
2003 J jnl
Int. J. Netw. Manag.
Jeong-Hyuk Yoon, Hong-Taek Ju, James W. Hong
2002 B conf
NOMS
Hong-Taek Ju, Mi-Jung Choi, Sehee Han, Yunjung Oh, Jeong-Hyuk Yoon, Hyojin Lee, James W. Hong
2002 B conf
NOMS
Myung-Sup Kim, Mi-Jeong Choi, James W. Hong
2001 J jnl
J. Netw. Syst. Manag.
Hong-Taek Ju, Mi-Joung Choi, James W. Hong
2001 J jnl
J. Netw. Syst. Manag.
James W. Hong, Sung-Uk Park, Young-Min Kang, Jong-Tae Park
2000 J jnl
Int. J. Netw. Manag.
Hong-Taek Ju, Mi-Young Choi, James W. Hong
2000 J jnl
J. Netw. Syst. Manag.
Douglas N. Zuckerman, James W. Hong, Robert Weihmayer
1999 J jnl
J. Netw. Syst. Manag.
Young-Hyun Cho, Hiroshi Tokunaga, James W. Hong, Takafumi Chujo
1999 conf
Integrated Network Management
Jae-Young Kim, Seung-Duck Lim, James W. Hong, Seong-Beom Kim, Han-Young Lee
1999 conf
Integrated Network Management
Suk-Kyong An, Mi-Joung Choi, Jae-Young Kim, James W. Hong, Sang-Ki Kim
1998 B conf
NOMS
Jong-Wook Baek, Tae-Joon Ha, Jong-Tae Park, James W. Hong, Seong-Beom Kim
1996 B conf
NOMS
Jong-Tae Park, Su-Ho Ha, James W. Hong, Joong-Goo Song
1995 conf
Integrated Network Management
A. Warren Pratten, James W. Hong, Michael A. Bauer, J. Michael Bennett, Hanan Lutfiyya
1995 conf
CASCON
Stephen L. Howard, James W. Hong, Michael James Katchabaw, Michael A. Bauer
1995 conf
CASCON
Michael James Katchabaw, Meeta M. Khurana, James W. Hong, Michael A. Bauer
1995 conf
FTDCS
Michael A. Bauer, Hanan Lutfiyya, James W. Hong, James P. Black, Thomas Kunz, David J. Taylor, Patrick Martin, Richard B. Bunt, Derek L. Eager, Patrick J. Finnigan, Jerome A. Rolia, C. Murray Woodside, Toby J. Teorey
1995 conf
Integrated Network Management
Graeme S. Perrow, James W. Hong, Hanan Lutfiyya, Michael A. Bauer
1994 J jnl
IBM Syst. J.
Michael A. Bauer, Neil Coburn, Doreen L. Erickson, Patrick J. Finnigan, James W. Hong, Per-Åke Larson, Jan K. Pachl, Jacob Slonim, David J. Taylor, Toby J. Teorey
1994 conf
CASCON
A. Warren Pratten, James W. Hong, J. Michael Bennett, Michael A. Bauer, Hanan Lutfiyya
1994 J jnl
IBM Syst. J.
Michael A. Bauer, Patrick J. Finnigan, James W. Hong, Jerome A. Rolia, Toby J. Teorey, Gerald A. Winters
1994 conf
CASCON
James W. Hong, Michael Katchabaw, Michael A. Bauer, Hanan Lutfiyya
1994 A* conf
ICDE
Daniel L. Silver, James W. Hong, Michael A. Bauer
1993 conf
CASCON
Michael A. Bauer, Neil Coburn, Doreen L. Erickson, Patrick J. Finnigan, James W. Hong, Per-Åke Larson, Jacob Slonim
1993 conf
CASCON
Michael A. Bauer, Patrick J. Finnigan, James W. Hong, Jan K. Pachl, Toby J. Teorey
1993 C conf
ICCI
James W. Hong, Michael A. Bauer, John A. O'Neill
1993 conf
Open Distributed Processing
Jacob Slonim, James W. Hong, Patrick J. Finnigan, Doreen L. Erickson, Neil Coburn, Michael A. Bauer
1993 conf
Integrated Network Management
James W. Hong, Michael A. Bauer, J. Michael Bennett
1992 conf
CASCON
James W. Hong, Michael A. Bauer, J. Michael Bennett
tests/unit/test_decompile_scores.py
← Index tests/unit/test_decompile_scores.py python
"""Unit tests for bninja/analysis/scores.py — ObfuscationScores."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import (
    install_binja_stubs,
    HighLevelILOperation,
)
bn_mock = install_binja_stubs()

from redb.extractors.decompiler.bninja.analysis.scores import (
    ObfuscationScores,
    get_dominated_by,
    uses_mba,
)
import binaryninja.highlevelil as hlil_mod


# ============================================================================
# Helper: Mock HLIL instruction
# ============================================================================

class MockHLILInstruction(hlil_mod.HighLevelILInstruction):
    """Mock HLIL instruction with operation and operands."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class MockHLILBasicBlock:
    """Mock HLIL basic block for flattened score testing."""
    def __init__(self, incoming_edges=None, dominator_tree_children=None):
        self.incoming_edges = incoming_edges or []
        self.dominator_tree_children = dominator_tree_children or []


# ============================================================================
# 5a. ObfuscationScores
# ============================================================================


class TestFlattenedScore:
    def test_flattened_score_no_back_edges(self):
        """Linear CFG with no back edges -> score 0.0."""
        block = MockHLILBasicBlock(incoming_edges=[], dominator_tree_children=[])
        func = MagicMock()
        func.basic_blocks = [block]
        scores = ObfuscationScores(func)
        assert scores.flattened_score() == 0.0

    def test_flattened_score_with_loop(self):
        """CFG with a back edge -> score > 0.0."""
        block = MockHLILBasicBlock(dominator_tree_children=[])
        # Create a back edge: an incoming edge whose source is in the dominated set
        edge = MagicMock()
        edge.source = block  # source IS the dominator -> back edge
        block.incoming_edges = [edge]
        func = MagicMock()
        func.basic_blocks = [block]
        scores = ObfuscationScores(func)
        assert scores.flattened_score() > 0.0

    def test_flattened_score_fully_flat(self):
        """Flattened CFG: one block dominates all -> ratio close to 1.0."""
        children = [MockHLILBasicBlock() for _ in range(4)]
        root = MockHLILBasicBlock(dominator_tree_children=children)
        # Back edge from root incoming
        edge = MagicMock()
        edge.source = root
        root.incoming_edges = [edge]
        all_blocks = [root] + children
        func = MagicMock()
        func.basic_blocks = all_blocks
        scores = ObfuscationScores(func)
        assert scores.flattened_score() == pytest.approx(1.0)


class TestMBAScore:
    def test_mba_score_no_mixed_ops(self):
        """Instructions with only arithmetic -> score 0.0."""
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[])
        func = MagicMock()
        func.instructions = [instr]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() == 0.0

    def test_mba_score_mixed_ops(self):
        """Instructions with arithmetic + logic -> score > 0.0."""
        inner_logic = MockHLILInstruction(HighLevelILOperation.HLIL_XOR, operands=[])
        outer_arith = MockHLILInstruction(
            HighLevelILOperation.HLIL_ADD, operands=[inner_logic]
        )
        func = MagicMock()
        func.instructions = [outer_arith]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() > 0.0

    def test_mba_score_all_mixed(self):
        """Every instruction has both -> score 1.0."""
        inner_logic = MockHLILInstruction(HighLevelILOperation.HLIL_NOT, operands=[])
        outer_arith = MockHLILInstruction(
            HighLevelILOperation.HLIL_SUB, operands=[inner_logic]
        )
        func = MagicMock()
        func.instructions = [outer_arith]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() == 1.0


class TestGetDominatedBy:
    def test_get_dominated_by(self):
        child1 = MockHLILBasicBlock(dominator_tree_children=[])
        child2 = MockHLILBasicBlock(dominator_tree_children=[])
        root = MockHLILBasicBlock(dominator_tree_children=[child1, child2])
        result = get_dominated_by(root)
        assert root in result
        assert child1 in result
        assert child2 in result
        assert len(result) == 3


class TestUsesMBA:
    def test_uses_mba_arithmetic_only(self):
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[])
        assert uses_mba(instr) is False

    def test_uses_mba_logic_only(self):
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_XOR, operands=[])
        assert uses_mba(instr) is False

    def test_uses_mba_mixed(self):
        inner = MockHLILInstruction(HighLevelILOperation.HLIL_AND, operands=[])
        outer = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[inner])
        assert uses_mba(outer) is True