Wayne Wei-Ming Dai

64 papers A* 10A 21B 1C 5Misc 2Journal 10Unranked 15
YearRankTypeTitle / Venue / Authors
2006 conf
ASP-DAC
Fangyi Luo, Yongbo Jia, Wayne Wei-Ming Dai
2005 conf
ASP-DAC
Anru Wang, Wayne Wei-Ming Dai
2005 conf
ISQED
Anru Wang, Wayne Wei-Ming Dai
2004 A conf
DATE
Beibei Ren, Anru Wang, Joyopriya Bakshi, Kai Liu, Wei Li, Wayne Wei-Ming Dai
2004 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Xiaohai Wu, Xianlong Hong, Yici Cai, Zuying Luo, Chung-Kuan Cheng, Jun Gu, Wayne Wei-Ming Dai
2004 conf
ASP-DAC
Hao Ji, Qingjian Yu, Wayne Wei-Ming Dai
2003 conf
ISQED
Michael X. Wang, Katsuharu Suzuki, Wayne Wei-Ming Dai
2003 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Shuo Zhang, Wayne Wei-Ming Dai
2002 A* conf
DAC
Paul B. Morton, Wayne Wei-Ming Dai
2002 conf
ISPD
Shuo Zhang, Wayne Wei-Ming Dai
2001 A conf
ICCAD
Xiaohai Wu, Xianlong Hong, Yici Cai, Chung-Kuan Cheng, Jun Gu, Wayne Wei-Ming Dai
2001 conf
ASP-DAC
Hidetoshi Onodera, Andrew B. Kahng, Wayne Wei-Ming Dai, Sani R. Nassif, Juho Kim, Akira Tanabe, Toshihiro Hattori
2001 A conf
ICCAD
Minqing Liu, Tiejun Yu, Wayne Wei-Ming Dai
2001 conf
ASP-DAC
Hao Ji, Anirudh Devgan, Wayne Wei-Ming Dai
2000 Misc conf
FCCM
Katsuharu Suzuki, Michael X. Wang, Zhao Fang, Wayne Wei-Ming Dai
2000 A conf
ICCAD
Anirudh Devgan, Hao Ji, Wayne Wei-Ming Dai
2000 conf
ASP-DAC
Michael X. Wang, Katsuharu Suzuki, Wayne Wei-Ming Dai, Yee L. Low, Kevin J. O'Conner, King L. Tai
2000 conf
ASP-DAC
Minqing Liu, Wayne Wei-Ming Dai
1999 conf
ISPD
Paul B. Morton, Wayne Wei-Ming Dai
1998 A conf
ICCAD
Maggie Zhiwei Kang, Wayne Wei-Ming Dai
1998 A* conf
DAC
Jinsong Zhao, Wayne Wei-Ming Dai, Sharad Kapur, David E. Long
1998 conf
ISPD
Maggie Zhiwei Kang, Wayne Wei-Ming Dai
1997 conf
ASP-DAC
Tsuyoshi Isshiki, Wayne Wei-Ming Dai, Hiroaki Kunieda
1997 A* conf
DAC
Wayne Wei-Ming Dai
1997 A conf
ICCAD
Wayne Wei-Ming Dai, Howard L. Kalter, Rob Roy, Wayne H. Wolf
1997 A conf
ICCAD
Maggie Zhiwei Kang, Wayne Wei-Ming Dai, Tom Dillinger, David P. LaPotin
1997 conf
ASP-DAC
Maggie Zhiwei Kang, Wayne Wei-Ming Dai
1997 A conf
ICCAD
Jeffrey Z. Su, Wayne Wei-Ming Dai
1997 J jnl
J. VLSI Signal Process.
Joe G. Xi, Wayne Wei-Ming Dai
1996 A conf
FPGA
Joel Darnauer, Wayne Wei-Ming Dai
1996 A conf
ICCAD
Wei Hong II, Weikai Sun, Zhenhai Zhu, Hao Ji, Ben Song, Wayne Wei-Ming Dai
1996 Misc conf
FCCM
Tsuyoshi Isshiki, Wayne Wei-Ming Dai
1996 A* conf
DAC
Weikai Sun, Wayne Wei-Ming Dai, Wei Hong II
1996 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Qing Zhu, Wayne Wei-Ming Dai
1996 A conf
ICCAD
Man-Fai Yu, Joel Darnauer, Wayne Wei-Ming Dai
1996 A conf
ICCAD
Joe G. Xi, Wayne Wei-Ming Dai
1996 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Qing Zhu, Wayne Wei-Ming Dai
1996 A* conf
DAC
Joe G. Xi, Wayne Wei-Ming Dai
1995 A* conf
DAC
Joe G. Xi, Wayne Wei-Ming Dai
1995 A conf
FPGA
Vijayshri Maheshwari, Joel Darnauer, John Ramirez, Wayne Wei-Ming Dai
1995 A conf
FPGA
Tsuyoshi Isshiki, Wayne Wei-Ming Dai
1995 A conf
ICCAD
Haifang Liao, Wayne Wei-Ming Dai
1995 conf
ASP-DAC
Man-Fai Yu, Wayne Wei-Ming Dai
1995 A conf
ICCAD
Man-Fai Yu, Wayne Wei-Ming Dai
1995 C conf
ICCD
Jimmy Shinn-Hwa Wang, Wayne Wei-Ming Dai
1995 C conf
ICCD
Jimmy Shinn-Hwa Wang, Wayne Wei-Ming Dai
1994 A conf
ICCAD
Haifang Liao, Wayne Wei-Ming Dai
1994 B conf
FPL
Tsuyoshi Isshiki, Wayne Wei-Ming Dai
1994 C conf
ICCD
Jimmy Shinn-Hwa Wang, Wayne Wei-Ming Dai
1993 J jnl
IEEE Des. Test Comput.
Wayne Wei-Ming Dai, Kwang-Ting (Tim) Cheng
1993 C conf
ISCAS
Wayne Wei-Ming Dai, Yoji Kajitani, Yorihiko Hirata
1993 A conf
ICCAD
Qing Zhu, Wayne Wei-Ming Dai, Joe G. Xi
1993 A* conf
DAC
Haifang Liao, Wayne Wei-Ming Dai, Rui Wang, Fung-Yuel Chang
1993 C conf
ISCAS
Haifang Liao, Rui Wang, Rajit Chandra, Wayne Wei-Ming Dai
1993 J jnl
IEEE Des. Test Comput.
David Staepelaere, Jeffrey Jue, Tal Dayan, Wayne Wei-Ming Dai
1992 A conf
ICCAD
Qing Zhu, Wayne Wei-Ming Dai
1991 A* conf
DAC
Wayne Wei-Ming Dai, Raymond Kong, Masao Sato
1991 A* conf
DAC
Wayne Wei-Ming Dai, Tal Dayan, David Staepelaere
1990 A conf
ICCAD
Wayne Wei-Ming Dai, Raymond Kong, Jeffrey Jue
1989 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Wayne Wei-Ming Dai
1988 A conf
ICCAD
Bernhard Eschermann, Wayne Wei-Ming Dai, Ernest S. Kuh, Massoud Pedram
1987 A* conf
DAC
Wayne Wei-Ming Dai, Masao Sato, Ernest S. Kuh
1987 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Wayne Wei-Ming Dai, Ernest S. Kuh
1985 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Wayne Wei-Ming Dai, Tetsuo Asano, Ernest S. Kuh
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