V. Michael Bove Jr.

54 papers A* 5A 2B 4C 2Journal 16Unranked 22
YearRankTypeTitle / Venue / Authors
2019 conf
CHI Extended Abstracts
Xinlei Zhang, Ali Shtarbanov, Jiani Zeng, Valerie K. Chen, V. Michael Bove Jr., Pattie Maes, Jun Rekimoto
2019 A conf
Conference on Designing Interactive Systems (Companion Volume)
Philippa Mothersill, V. Michael Bove Jr.
2018 conf
CHI Extended Abstracts
Ali Shtarbanov, V. Michael Bove Jr.
2018 conf
CHI Extended Abstracts
Irmandy Wicaksono, Caroline Rozendo, Runzhou Ye, Jaleesa Trapp, V. Michael Bove Jr., Canan Dagdeviren, Hiroshi Ishii
2016 J jnl
Multim. Tools Appl.
Paula Viana, Teresa Chambel, V. Michael Bove Jr., Sharon Strover, Graham Thomas
2016 conf
PerCom Workshops
Arata Miyamoto, Valerio Panzica La Manna, V. Michael Bove Jr.
2016 J jnl
Int. J. Hum. Comput. Stud.
Wei Xiang, Shi Chen, Lingyun Sun, Shiwei Cheng, V. Michael Bove Jr.
2015 conf
PerCom Workshops
Arata Miyamoto, Daniel J. Dubois, Yosuke Bando, Konosuke Watanabe, V. Michael Bove Jr.
2015 J jnl
Interactions
Philippa Mothersill, V. Michael Bove Jr.
2015 A* conf
ACM Multimedia
Teresa Chambel, Paula Viana, V. Michael Bove Jr., Sharon Strover, Graham Thomas
2015 conf
CHI Extended Abstracts
Edwina Portocarrero, Gershon Dublon, Joseph A. Paradiso, V. Michael Bove Jr.
2015 ed.
ImmersiveME@ACM Multimedia
Teresa Chambel, Paula Viana, V. Michael Bove Jr., Sharon Strover, Graham Thomas
2015 conf
CCNC
Daniel J. Dubois, Yosuke Bando, Konosuke Watanabe, Arata Miyamoto, Munehiko Sato, William Papper, V. Michael Bove Jr.
2015 conf
CHI Extended Abstracts
Philippa Mothersill, V. Michael Bove Jr.
2014 A* conf
ACM Multimedia
Teresa Chambel, Paula Viana, V. Michael Bove Jr., Sharon Strover, Graham Thomas
2014 ed.
ImmersiveMe@MM
Teresa Chambel, Paula Viana, V. Michael Bove Jr., Sharon Strover, Graham Thomas
2013 conf
3DTV-Conference
V. Michael Bove Jr., James Barabas, Sundeep Jolly, Daniel Smalley
2013 A* conf
ACM Multimedia
Teresa Chambel, V. Michael Bove Jr., Sharon Strover, Paula Viana, Graham Thomas
2013 conf
HCI (29)
Kasia Hayden, Dan Novy, Catherine Havasi, V. Michael Bove Jr., Santiago Alfaro, Robyn Speer
2013 ed.
ImmersiveMe@ACM Multimedia
Teresa Chambel, V. Michael Bove Jr., Sharon Strover, Paula Viana, Graham Thomas
2012 J jnl
Proc. IEEE
V. Michael Bove Jr.
2011 C conf
ICIDS
Edwina Portocarrero, Ye Wang, V. Michael Bove Jr.
2011 B conf
TEI
Edwina Portocarrero, David Cranor, V. Michael Bove Jr.
2011 B conf
TEI
David Cranor, Amanda Peyton, Arlene Persaud, Rajiv Bhatia, Sinbae Kim, V. Michael Bove Jr.
2011 C conf
ICIDS
Santiago Alfaro, V. Michael Bove Jr.
2010 conf
CHI Extended Abstracts
Ana Luisa Santos, V. Michael Bove Jr.
2009 A* conf
CHI
Brandon T. Taylor, V. Michael Bove Jr.
2008 B conf
TEI
Jeevan J. Kalanithi, V. Michael Bove Jr.
2008 conf
CHI Extended Abstracts
Brandon T. Taylor, V. Michael Bove Jr.
2006 conf
CCNC
V. Michael Bove Jr.
2006 conf
CCNC
V. Michael Bove Jr.
2005 J jnl
EURASIP J. Adv. Signal Process.
Darren E. Butler, V. Michael Bove Jr., Sridha Sridharan
2004 B conf
MUM
Gauri Nanda, Adrian Cable, V. Michael Bove Jr., Moneta Ho, Han Hoang
2003 conf
ICASSP (3)
Darren E. Butler, Sridha Sridharan, V. Michael Bove Jr.
2003 A conf
ICME
Darren E. Butler, Sridha Sridharan, V. Michael Bove Jr.
2003 J jnl
IEEE Multim.
Stefan Agamanolis, V. Michael Bove Jr.
2001 J jnl
Commun. ACM
V. Michael Bove Jr.
2001 J jnl
IEEE Multim.
V. Michael Bove Jr.
2001 conf
PICS
V. Michael Bove Jr.
2001 conf
Eurographics Multimedia Workshop
William Butera, V. Michael Bove Jr.
2000 J jnl
IBM Syst. J.
V. Michael Bove Jr., Jonathan Dakss, Edmond Chalom, Stefan Agamanolis
2000 J jnl
IEEE Trans. Circuits Syst. Video Technol.
William Butera, V. Michael Bove Jr.
1997 J jnl
Parallel Comput.
John A. Watlington, V. Michael Bove Jr.
1997 conf
Human Vision and Electronic Imaging
Jeffrey L. Newbern, V. Michael Bove Jr.
1997 J jnl
IEEE Multim.
Stefan Agamanolis, V. Michael Bove Jr.
1996 conf
EUSIPCO
V. Michael Bove Jr.
1996 J jnl
IBM Syst. J.
V. Michael Bove Jr.
1996 A* ed.
ACM Multimedia
Philippe Aigrain, Wendy Hall, Thomas D. C. Little, V. Michael Bove Jr.
1996 conf
ICIP (2)
Edmond Chalom, V. Michael Bove Jr.
1995 J jnl
IEEE Trans. Circuits Syst. Video Technol.
V. Michael Bove Jr., John A. Watlington
1994 J jnl
IEEE Trans. Commun.
Kenji Tsunashima, Joseph B. Stampleman, V. Michael Bove Jr.
1994 conf
ICMCS
V. Michael Bove Jr., Brett D. Granger, John A. Watlington
1993 conf
ICASSP (1)
V. Michael Bove Jr.
1993 J jnl
IEEE J. Sel. Areas Commun.
Abha Singh, V. Michael Bove Jr.
redb/extractors/decompiler/bninja/analysis/medium_level.py
← Index redb/extractors/decompiler/bninja/analysis/medium_level.py python
import time

from binaryninja import (
    MediumLevelILOperation as MLIL_OP,
)

try:
    from ..function_type import FunctionTypeAnalysis
    from ..similarity.minhasher import MinHasher, TokenKind
    from ..utils.hashes import calculate_sha256, calculate_tlsh
    from .medium_level_normalization import MediumLevelNormalization
except ImportError:
    from redb.extractors.decompiler.bninja.analysis.medium_level_normalization import MediumLevelNormalization
    from redb.extractors.decompiler.bninja.similarity.minhasher import MinHasher
    from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256, calculate_tlsh


_MLIL_CALL_OPS = (
    MLIL_OP.MLIL_CALL,
    MLIL_OP.MLIL_CALL_SSA,
    MLIL_OP.MLIL_CALL_UNTYPED,
    MLIL_OP.MLIL_CALL_UNTYPED_SSA,
    MLIL_OP.MLIL_TAILCALL,
    MLIL_OP.MLIL_TAILCALL_SSA,
    MLIL_OP.MLIL_TAILCALL_UNTYPED,
    MLIL_OP.MLIL_TAILCALL_UNTYPED_SSA,
)

_MLIL_CONTROL_FLOW_OPS = (
    MLIL_OP.MLIL_IF,
    MLIL_OP.MLIL_GOTO,
    MLIL_OP.MLIL_JUMP,
    MLIL_OP.MLIL_JUMP_TO,
    MLIL_OP.MLIL_RET,
    MLIL_OP.MLIL_RET_HINT,
    MLIL_OP.MLIL_NORET,
) + _MLIL_CALL_OPS


class MediumLevelAnalysis:
    def __init__(self, function, bv, logger):
        self.function = function
        self.name = function.name
        self.start = function.start
        self.mlil_func = function.mlil
        self.bv = bv
        self.logger = logger
        self.errors = []

    def log_error(self, message, function_name, address, exception=None, error_location="unknown"):
        error_msg = f"Error in function {function_name} at {address}: {message}"
        if exception:
            error_msg += f" - {str(exception)}"
        self.logger.error(error_msg)

        error = {
            "function_name": function_name,
            "function_address": str(address),
            "error_location": error_location,
            "error_message": message,
            "error_details": str(exception) if exception else "",
            "error_type": type(exception).__name__ if exception else "Unknown",
            "timestamp": int(time.time() * 1000),
        }
        self.errors.append(error)

    def _collect_mlil_skeleton_and_typed(self):
        mlil = self.mlil_func
        if not mlil:
            return [], [], [], []

        start = self.start
        norm = MediumLevelNormalization()

        skeleton = []
        skeleton_with_addr = []
        typed = []
        typed_with_addr = []

        for il in mlil.instructions:
            skel_norm = norm.normalize_instruction_all_levels(il)
            typed_norm = norm.normalize_instr_with_operands(il)

            skeleton.append(skel_norm)
            typed.append(typed_norm)

            offset = il.address - start
            if offset < 0:
                offset = 0

            skeleton_with_addr.append((offset, skel_norm))
            typed_with_addr.append((offset, typed_norm))

        return skeleton, skeleton_with_addr, typed, typed_with_addr

    def analyze(self):
        (
            instr_skeleton,
            body_mlil_skeleton_vector,
            instr_typed,
            body_mlil_typed_vector,
        ) = self._collect_mlil_skeleton_and_typed()

        instr_skeleton_str = str(instr_skeleton)
        sha256_skeleton = calculate_sha256(instr_skeleton_str)
        tlsh_skeleton = calculate_tlsh(instr_skeleton_str)

        instr_typed_str = str(instr_typed)
        sha256_typed = calculate_sha256(instr_typed_str)
        tlsh_typed = calculate_tlsh(instr_typed_str)

        seed = 0xdeadbeef
        minhash_mlil_skeleton = MinHasher(seed, self.mlil_func, TokenKind.MLIL).calculateMinHash()
        minhash_mlil_typed = MinHasher(seed, self.mlil_func, TokenKind.TYPED_MLIL).calculateMinHash()

        medium_level_json = {
            "function_address": self.start,
            "body_mlil_skeleton_vector": body_mlil_skeleton_vector,
            "sha256_mlil_skeleton": sha256_skeleton,
            "tlsh_mlil_skeleton": tlsh_skeleton,
            "minhash_mlil_skeleton": minhash_mlil_skeleton,
            "body_mlil_typed_vector": body_mlil_typed_vector,
            "sha256_mlil_typed": sha256_typed,
            "tlsh_mlil_typed": tlsh_typed,
            "minhash_mlil_typed": minhash_mlil_typed,
        }

        return medium_level_json, self.errors