Magdalena Wojcieszak

30 papers A 3Journal 24Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Jonathan Stray, Ian Baker, George Beknazar-Yuzbashev, Ceren Budak, Julia Kamin, Kylan Rutherford, Mateusz Stalinski, Tin Acosta, Chris Bailey, Michael S. Bernstein, Mark Brandt, Amy Bruckman, Anshuman Chhabra, Soham De, Kayla Duskin, Sara Fish, Beth Goldberg, Andy Guess, Dylan Hadfield-Menell, Muhammad Haroon, Safwan Hossain, Michael Inzlicht, Gauri Jain, Yanchen Jiang, Alexander P. Landry, Yph Lelkes, Hongfan Lu, Peter Mason, Jennifer McCoy, Smitha Milli, Paul Resnick, Emily Saltz, Martin Saveski, Lisa Schirch, Max Spohn, Siddarth Srinivasan, Alexis Tatore, Luke Thorburn, Joshua A. Tucker, Robb Willer, Magdalena Wojcieszak, Manuel Wüthrich, Sylvan Zheng
2025 conf
IJCNLP-AACL (Findings)
Muhammad Haroon, Magdalena Wojcieszak, Anshuman Chhabra
2025 J jnl
CoRR
Muhammad Haroon, Magdalena Wojcieszak, Anshuman Chhabra
2025 J jnl
CoRR
Szymon Talaga, Erin Wertz, Dominik Batorski, Magdalena Wojcieszak
2025 A conf
ICWSM
Claire Wonjeong Jo, Magdalena Wojcieszak
2025 J jnl
CoRR
Claire Wonjeong Jo, Magdalena Wojcieszak
2025 J jnl
CoRR
Szymon Talaga, Dominik Batorski, Magdalena Wojcieszak
2025 A conf
ICWSM
Ashwin Rao, Rong-Ching Chang, Qiankun Zhong, Kristina Lerman, Magdalena Wojcieszak
2025 conf
ACL (1)
Rajvardhan Oak, Muhammad Haroon, Claire Wonjeong Jo, Magdalena Wojcieszak, Anshuman Chhabra
2025 J jnl
CoRR
Rajvardhan Oak, Muhammad Haroon, Claire Wonjeong Jo, Magdalena Wojcieszak, Anshuman Chhabra
2025 J jnl
CoRR
Akash Bonagiri, Lucen Li, Rajvardhan Oak, Zeerak Babar, Magdalena Wojcieszak, Anshuman Chhabra
2025 J jnl
CoRR
Max Falkenberg, Matteo Cinelli, Alessandro Galeazzi, Christopher A. Bail, Rosa M. Benito, Axel Bruns, Anatoliy A. Gruzd, David Lazer, Jae K. Lee, Jennifer McCoy, Kikuko Nagayoshi, David G. Rand, Antonio Scala, Alexandra Siegel, Sander van der Linden, Onur Varol, Ingmar Weber, Magdalena Wojcieszak, Fabiana Zollo, Andrea Baronchelli, Walter Quattrociocchi
2024 J jnl
CoRR
Claire Wonjeong Jo, Miki Wesolowska, Magdalena Wojcieszak
2024 J jnl
CoRR
Hadi Askari, Anshuman Chhabra, Bernhard Clemm von Hohenberg, Michael Heseltine, Magdalena Wojcieszak
2023 A conf
ICWSM
Rong-Ching Chang, Ashwin Rao, Qiankun Zhong, Magdalena Wojcieszak, Kristina Lerman
2023 J jnl
CoRR
Rong-Ching Chang, Ashwin Rao, Qiankun Zhong, Magdalena Wojcieszak, Kristina Lerman
2023 J jnl
New Media Soc.
Brian E. Weeks, Ericka Menchen-Trevino, Christopher Calabrese, Andreu Casas, Magdalena Wojcieszak
2023 J jnl
Inf. Soc.
Ericka Menchen-Trevino, Thomas Struett, Brian E. Weeks, Magdalena Wojcieszak
2023 J jnl
CoRR
Ashwin Rao, Rong-Ching Chang, Qiankun Zhong, Kristina Lerman, Magdalena Wojcieszak
2022 J jnl
CoRR
Muhammad Haroon, Anshuman Chhabra, Xin Liu, Prasant Mohapatra, Zubair Shafiq, Magdalena Wojcieszak
2021 J jnl
J. Comput. Mediat. Commun.
Magdalena Wojcieszak, Arti Thakur, João Fernando Ferreira Gonçalves, Andreu Casas, Ericka Menchen-Trevino, Miriam L. Boon
2020 conf
WOAH
Sam Davidson, Qiusi Sun, Magdalena Wojcieszak
2018 J jnl
Comput. Hum. Behav.
Nuri Kim, Magdalena Wojcieszak
2017 J jnl
Commun. Res.
Magdalena Wojcieszak, Rachid Azrout, Hajo G. Boomgaarden, Amanda Paz Alencar, Penelope Sheets
2016 J jnl
Commun. Res.
Magdalena Wojcieszak, Nuri Kim
2016 J jnl
J. Comput. Mediat. Commun.
JungHwan Yang, Hernando Rojas, Magdalena Wojcieszak, Toril Aalberg, Sharon Coen, James Curran, Kaori Hayashi, Shanto Iyengar, Paul K. Jones, Gianpietro Mazzoleni, Stylianos Papathanassopoulos, June Woong Rhee, David Rowe, Stuart Soroka, Rodney Tiffen
2014 J jnl
New Media Soc.
Magdalena Wojcieszak, Briar Smith
2012 J jnl
New Media Soc.
Young Min Baek, Magdalena Wojcieszak, Michael X. Delli Carpini
2010 J jnl
New Media Soc.
Magdalena Wojcieszak
2009 J jnl
Commun. Res.
Young Min Baek, Magdalena Wojcieszak
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