Kang Zhao

55 papers C 1Journal 35Unranked 19
YearRankTypeTitle / Venue / Authors
2024 J jnl
IEEE Access
Jianhao Zhang, Wei Jiang, Kang Zhao
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Jie Bai, Kang Zhao, Linjing Li, Daniel Dajun Zeng, Qiudan Li, Fan Yang, Quannan Zu
2024 J jnl
Decis. Support Syst.
Saike He, Weiguang Zhang, Jun Luo, Peijie Zhang, Kang Zhao, Daniel Dajun Zeng
2022 J jnl
Electron. Commer. Res. Appl.
Kang Zhao, Junjie Wu, Dirk Neumann
2022 J jnl
INFORMS J. Comput.
Hu Tian, Xiaolong Zheng, Kang Zhao, Maggie Wenjing Liu, Daniel Dajun Zeng
2022 J jnl
Decis. Support Syst.
Yanwu Yang, Kang Zhao, Daniel Dajun Zeng, Bernard Jim Jansen
2022 J jnl
J. Assoc. Inf. Sci. Technol.
Xiangyu Wang, Min Zhang, Weiguo Fan, Kang Zhao
2021 J jnl
ACM Trans. Manag. Inf. Syst.
Kang Zhao, Qingpeng Zhang, Sean H. Y. Yuan, Kelvin Kam-fai Tsoi
2021 J jnl
IEEE Intell. Syst.
Wanting Wen, Daniel Dajun Zeng, Jie Bai, Kang Zhao, Ziqiang Li
2021 J jnl
J. Assoc. Inf. Sci. Technol.
Xiangyu Wang, Andrew High, Xi Wang, Kang Zhao
2021 J jnl
J. Assoc. Inf. Sci. Technol.
Zhiya Zuo, Kang Zhao
2020 J jnl
CoRR
Yanwu Yang, Kang Zhao, Daniel Zeng, Bernard Jim Jansen
2020 J jnl
ACM Trans. Manag. Inf. Syst.
Xiangyu Wang, Kang Zhao, Xun Zhou, W. Nick Street
2019 J jnl
IEEE Access
Li Sun, Kang Zhao, Congying Han, Ziwen Liu
2019 J jnl
Big Data
Kristina Gavin Bigsby, Jeffrey W. Ohlmann, Kang Zhao
2019 J jnl
Decis. Support Syst.
Xi Wang, Kang Zhao, Sarah Cha, Michael S. Amato, Amy M. Cohn, Jennifer Pearson, George D. Papandonatos, Amanda Lenhart
2019 J jnl
J. Informetrics
Zhiya Zuo, Kang Zhao, Chaoqun Ni
2019 J jnl
IEEE Trans. Engineering Management
Kang Zhao, Kevin P. Scheibe, Jennifer Blackhurst, Akhil Kumar
2019 J jnl
Decis. Support Syst.
Kristina Gavin Bigsby, Jeffrey W. Ohlmann, Kang Zhao
2018 conf
JCDL
Zhiya Zuo, Kang Zhao
2018 conf
ASIST
Zhiya Zuo, Kang Zhao
2018 J jnl
J. Informetrics
Zhiya Zuo, Kang Zhao
2017 J jnl
Decis. Anal.
Kristina Gavin Bigsby, Jeffrey W. Ohlmann, Kang Zhao
2017 conf
ASIST
Zhiya Zuo, Kang Zhao
2017 J jnl
J. Assoc. Inf. Sci. Technol.
Zhiya Zuo, Kang Zhao, David Eichmann
2016 J jnl
J. Manag. Inf. Syst.
Michael T. Lash, Kang Zhao
2016 conf
SocInfo (2)
Xi Wang, Zhiya Zuo, Yang Zhang, Kang Zhao, Yung-Chun Chang, Chin-Shun Chou
2016 conf
WWW (Companion Volume)
Zhiya Zuo, Xi Wang, David Eichmann, Kang Zhao
2015 J jnl
CoRR
Shiyao Wang, Tianbo Yang, Qi Zhang, Kang Zhao
2015 conf
SBP
Michael T. Lash, Sunyang Fu, Shiyao Wang, Kang Zhao
2015 J jnl
CoRR
Michael T. Lash, Kang Zhao
2015 J jnl
Inf. Syst. E Bus. Manag.
Kang Zhao, Greta E. Greer, John Yen, Prasenjit Mitra, Kenneth Portier
2015 conf
ICHI
Xi Wang, Zhiya Zuo, Kang Zhao, W. Nick Street
2015 J jnl
IEEE Intell. Syst.
Kang Zhao, Yao Xie, Kwok-Leung Tsui, Qingming Wei, Wenpo Huang, Wei Jiang, Yanting Li, Su Gon Cho, Seoung Bum Kim, Kaibo Liu, Jianjun Shi, Young-Seon Jeong, Byunghoon Kim, Seung Hoon Tong, In-Kap Chang, Myong Kee Jeong, Florent Charruaud, Lishuai Li
2015 conf
ICHI
Xi Wang, Zhiya Zuo, Kang Zhao
2015 conf
PACIS
Xi Wang, Zhiya Zuo, Kang Zhao
2014 conf
ICSH
Xi Wang, Kang Zhao, W. Nick Street
2014 conf
PACIS
Xi Wang, Kang Zhao
2014 J jnl
IEEE Intell. Syst.
Kang Zhao, Xi Wang, Mo Yu, Bo Gao
2013 C conf
ICIS
Akhil Kumar, Kang Zhao
2013 conf
SBP
Mo Yu, Kang Zhao, John Yen, Derek Kreager
2013 J jnl
CoRR
Kang Zhao, Xi Wang, Mo Yu, Bo Gao
2013 J jnl
World Wide Web
Kang Zhao, Akhil Kumar
2012 J jnl
CoRR
Kang Zhao, Greta E. Greer, Baojun Qiu, Prasenjit Mitra, Kenneth Portier, John Yen
2012 J jnl
Simul.
Kang Zhao, John Yen, Louis-Marie Ngamassi Tchouakeu, Carleen F. Maitland, Andrea Hoplight Tapia
2011 J jnl
IEEE Trans. Engineering Management
Kang Zhao, Akhil Kumar, John Yen
2011 J jnl
IEEE Syst. J.
Kang Zhao, Akhil Kumar, Terry P. Harrison, John Yen
2011 J jnl
Int. J. Inf. Syst. Soc. Chang.
Louis-Marie Ngamassi Tchouakeu, Edgar A. Maldonado, Kang Zhao, Harold R. Robinson, Carleen F. Maitland, Andrea H. Tapia
2011 conf
SocialCom/PASSAT
Baojun Qiu, Kang Zhao, Prasenjit Mitra, Dinghao Wu, Cornelia Caragea, John Yen, Greta E. Greer, Kenneth Portier
2010 conf
ISCRAM
Louis-Marie Ngamassi Tchouakeu, Carleen F. Maitland, Andrea H. Tapia, Kang Zhao, Kartikeya Bajpai
2010 conf
SBP
Kang Zhao, Louis-Marie Ngamassi Tchouakeu, John Yen, Carleen F. Maitland, Andrea Hoplight Tapia
2010 conf
AMCIS
Kartikeya Bajpai, Louis-Marie Ngamassi Tchouakeu, Carleen F. Maitland, Kang Zhao, Andrea Hoplight Tapia
2010 conf
SocialCom/PASSAT
Kang Zhao, John Yen, Louis-Marie Ngamassi Tchouakeu, Carleen F. Maitland, Andrea Hoplight Tapia
2010 conf
ISCRAM
Carleen F. Maitland, Andrea H. Tapia, Louis-Marie Ngamassi Tchouakeu, Kang Zhao, Edgar A. Maldonado
2009 conf
SpringSim
Kang Zhao, John Yen, Carleen F. Maitland, Andrea Hoplight Tapia, Louis-Marie Ngamassi Tchouakeu
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