Victor K. Wei

54 papers A* 1A 1B 1C 7Misc 5Journal 38Unranked 1
YearRankTypeTitle / Venue / Authors
2008 J jnl
IEEE Secur. Priv.
Yuen-Yan Chan, Victor K. Wei
2007 A conf
AsiaCCS
Victor K. Wei
2006 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei, Tsz Hon Yuen
2006 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei
2005 J jnl
IACR Cryptol. ePrint Arch.
Tsz Hon Yuen, Victor K. Wei
2005 B conf
CT-RSA
Tsz Hon Yuen, Victor K. Wei
2005 Misc conf
ACISP
Victor K. Wei, Tsz Hon Yuen, Fangguo Zhang
2005 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei, Tsz Hon Yuen, Fangguo Zhang
2005 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei
2005 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei, Tsz Hon Yuen
2005 J jnl
IACR Cryptol. ePrint Arch.
Sherman S. M. Chow, Joseph K. Liu, Victor K. Wei, Tsz Hon Yuen
2005 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei
2005 C conf
ISPEC
Patrick P. Tsang, Victor K. Wei
2005 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei
2005 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei
2005 C conf
ISC
Victor K. Wei
2004 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei
2004 conf
ESAS
Tony K. Chan, Karyin Fung, Joseph K. Liu, Victor K. Wei
2004 Misc conf
WISA
Joseph K. Liu, Victor K. Wei, Duncan S. Wong
2004 J jnl
IACR Cryptol. ePrint Arch.
Joseph K. Liu, Victor K. Wei, Duncan S. Wong
2004 J jnl
IACR Cryptol. ePrint Arch.
Tsz Hon Yuen, Victor K. Wei
2004 J jnl
IACR Cryptol. ePrint Arch.
Man Ho Au, Victor K. Wei
2004 Misc conf
ACISP
Joseph K. Liu, Victor K. Wei, Duncan S. Wong
2004 J jnl
IACR Cryptol. ePrint Arch.
Joseph K. Liu, Victor K. Wei, Duncan S. Wong
2004 J jnl
IEEE Trans. Inf. Theory
Fang-Wei Fu, A. J. Han Vinck, Victor K. Wei, Raymond W. Yeung
2004 Misc conf
INDOCRYPT
Patrick P. Tsang, Victor K. Wei, Tony K. Chan, Man Ho Au, Joseph K. Liu, Duncan S. Wong
2004 J jnl
IACR Cryptol. ePrint Arch.
Patrick P. Tsang, Victor K. Wei, Tony K. Chan, Man Ho Au, Joseph K. Liu, Duncan S. Wong
2004 J jnl
IACR Cryptol. ePrint Arch.
Patrick P. Tsang, Victor K. Wei
2004 J jnl
IACR Cryptol. ePrint Arch.
Victor K. Wei
2003 Misc conf
ICISC
Joseph K. Liu, Victor K. Wei, Duncan S. Wong
2003 J jnl
Discret. Appl. Math.
Fang-Wei Fu, Torleiv Kløve, Luo Yuan, Victor K. Wei
2003 C conf
ICICS
Duncan S. Wong, Karyin Fung, Joseph K. Liu, Victor K. Wei
2002 C conf
WETICE
T. C. Lam, Victor K. Wei
2002 C conf
WETICE
K. Shum, Victor K. Wei
2002 C conf
ICICS
Jeff S. L. Cheng, Victor K. Wei
2002 C conf
WETICE
P. C. Chan, Victor K. Wei
2002 J jnl
Des. Codes Cryptogr.
Fang-Wei Fu, Victor K. Wei
2001 J jnl
Electron. Notes Discret. Math.
Fang-Wei Fu, Torleiv Kløve, Yuan Luo, Victor K. Wei
2001 J jnl
IEEE Trans. Inf. Theory
Fang-Wei Fu, Torleiv Kløve, Luo Yuan, Victor K. Wei
2001 J jnl
Inf. Process. Lett.
Lusheng Chen, Fang-Wei Fu, Victor K. Wei
2001 J jnl
Discret. Appl. Math.
Fang-Wei Fu, Victor K. Wei, Raymond W. Yeung
1997 J jnl
IEEE Trans. Inf. Theory
Zhen Zhang, En-Hui Yang, Victor K. Wei
1995 J jnl
Des. Codes Cryptogr.
Tuvi Etzion, Victor K. Wei, Zhen Zhang
1995 A* conf
SODA
Dennis Grinberg, Sivaramakrishnan Rajagopalan, Ramarathnam Venkatesan, Victor K. Wei
1994 J jnl
IEEE Trans. Computers
T. V. Lakshman, Victor K. Wei
1994 J jnl
Perform. Evaluation
Venkat Anantharam, Michael L. Honig, U. Madhov, Victor K. Wei
1989 J jnl
IEEE Trans. Inf. Theory
Fan R. K. Chung, Jawad A. Salehi, Victor K. Wei
1988 J jnl
J. Graph Theory
Victor K. Wei
1986 J jnl
Commun. ACM
Jon Louis Bentley, Daniel Dominic Sleator, Robert Endre Tarjan, Victor K. Wei
1986 J jnl
Discret. Math.
János Körner, Victor K. Wei
1986 J jnl
Graphs Comb.
Fan R. K. Chung, Peter C. Fishburn, Victor K. Wei
1985 J jnl
IEEE Trans. Commun.
A. Robert Calderbank, James E. Mazo, Victor K. Wei
1984 J jnl
Discret. Math.
János Körner, Victor K. Wei
1980 J jnl
SIAM J. Algebraic Discret. Methods
Edward A. Bertram, Victor K. Wei
redb/extractors/decompiler/bninja/analysis/scores.py
← Index redb/extractors/decompiler/bninja/analysis/scores.py python
from collections import deque
from binaryninja import highlevelil
from binaryninja.enums import HighLevelILOperation


class ObfuscationScores:
    def __init__(self, hlil_function):
        self.function = hlil_function
        self._basic_blocks = list(hlil_function.basic_blocks) if hlil_function and hlil_function.basic_blocks else []
        self._block_count = len(self._basic_blocks)

    def flattened_score(self):
        """
        A heuristic for detecting control flow flattening from Tim Blazytko.
        Source: https://www.synthesis.to/2021/03/03/flattening_detection.html
        """
        if self._block_count == 0:
            return 0.0

        max_flattening_ratio = 0.0

        for basic_block in self._basic_blocks:
            dominated = get_dominated_by(basic_block)
            if not any(edge.source in dominated for edge in basic_block.incoming_edges):
                continue
            ratio = len(dominated) / self._block_count
            if ratio > max_flattening_ratio:
                max_flattening_ratio = ratio

        return max_flattening_ratio

    def MBA_score(self):
        """
        Score for MBA is obtained by the number of instructions that have at least one arithmetic operation and
        one logic operation DIVIDED by the number of instructions.
        """
        total = 0
        mba_count = 0

        for ins in self.function.instructions:
            total += 1
            if uses_mba(ins):
                mba_count += 1

        if total == 0:
            return 0.0

        return mba_count / total

def get_dominated_by(dominator):
    """
    Get the dominators that are dominated by the given dominator.
    (To recall the theory, a basic block B is called dominator for A if every path from START
    to A must include B)
    """
    result = set()
    worklist = deque([dominator])

    while worklist:
        block = worklist.popleft()
        if block in result:
            continue
        result.add(block)
        worklist.extend(block.dominator_tree_children)

    return result

_ARITHMETIC_OPS = frozenset({
    HighLevelILOperation.HLIL_ADD,
    HighLevelILOperation.HLIL_NEG,
    HighLevelILOperation.HLIL_SUB,
    HighLevelILOperation.HLIL_MUL,
    HighLevelILOperation.HLIL_DIVS,
    HighLevelILOperation.HLIL_MODS,
})

_LOGIC_OPS = frozenset({
    HighLevelILOperation.HLIL_NOT,
    HighLevelILOperation.HLIL_AND,
    HighLevelILOperation.HLIL_OR,
    HighLevelILOperation.HLIL_XOR,
    HighLevelILOperation.HLIL_LSR,
    HighLevelILOperation.HLIL_LSL,
})

_MBA_OPS = _ARITHMETIC_OPS | _LOGIC_OPS

def uses_mba(hlil_instruction):
    uses_logic = False
    uses_arithmetic = False
    stack = [hlil_instruction]

    while stack:
        instruction = stack.pop()

        if not isinstance(instruction, highlevelil.HighLevelILInstruction):
            continue

        op = instruction.operation

        if op not in _MBA_OPS:
            for operand in instruction.operands:
                if isinstance(operand, highlevelil.HighLevelILInstruction):
                    stack.append(operand)
            continue

        if op in _ARITHMETIC_OPS:
            uses_arithmetic = True
        else:
            uses_logic = True

        if uses_logic and uses_arithmetic:
            return True

        for operand in instruction.operands:
            if isinstance(operand, highlevelil.HighLevelILInstruction):
                stack.append(operand)

    return False