Karen Holtzblatt

63 papers A* 1A 2B 1C 1Misc 2Journal 15Unranked 39
YearRankTypeTitle / Venue / Authors
2022 C conf
CHIRA
Karen Holtzblatt
2022 conf
CHI Extended Abstracts
Karen Holtzblatt, Nicola Marsden
2022 conf
GI-Jahrestagung
Nicola Marsden, Karen Holtzblatt
2022 J jnl
IEEE Softw.
Nicola Marsden, Michael Ahmadi, Volker Wulf, Karen Holtzblatt
2019 conf
CHI Extended Abstracts
Karen Holtzblatt, Michael Ahmadi, Anne Weibert, Nicola Marsden
2018 conf
CHI Extended Abstracts
Karen Holtzblatt, Nicola Marsden
2018 conf
CHI Extended Abstracts
Nicola Marsden, Karen Holtzblatt
2018 conf
ICE/ITMC
Karen Holtzblatt, Nicola Marsden
2018 conf
GenderIT
Karen Holtzblatt
2017 conf
CHI Extended Abstracts
Scott P. Robertson, Nazanin Andalibi, Nicholas Diakopoulos, Andrea Forte, Misa Maruyama, Nova Ahmed, Hrvoje Benko, Susan M. Dray, Geraldine Fitzpatrick, Rubaiat Habib, Björn Hartmann, Karen Holtzblatt, Elizabeth Rosenzweig, Preethi Srinivas, Doug Zytko
2017 conf
CHI Extended Abstracts
Karen Holtzblatt, Bill Kules
2017 conf
CHI Extended Abstracts
Karen Holtzblatt, Carol Farnsworth
2016 conf
CHI Extended Abstracts
Karen Holtzblatt, Aruna Balakrishnan, Troy Effner, Emily Rhodes, Tina Tuan
2016 conf
CHI Extended Abstracts
Carol Farnsworth, Karen Holtzblatt
2015 A conf
RE
Karen Holtzblatt
2014 conf
CHI Extended Abstracts
Karen Holtzblatt, Shoshana Holtzblatt
2014 book
Karen Holtzblatt, Hugh R. Beyer
2014 conf
HCI (11)
Carol Farnsworth, Karen Holtzblatt, Theo Held, Shantanu Pai
2014 conf
CHI Extended Abstracts
Karen Holtzblatt, Ilpo Koskinen, Janaki Kumar, David B. Rondeau, John Zimmerman
2014 conf
CHI Extended Abstracts
Carol Farnsworth, Karen Holtzblatt, Shantanu Pai, Theo Held, Sally Lawler Kennedy, Eli Wylen, Pallavi Kutty, Kelley Wagg
2014 conf
CHI Extended Abstracts
Susan M. Dray, Daniela K. Busse, Anke Marei Brock, Anicia N. Peters, Shaowen Bardzell, Allison Druin, Margaret M. Burnett, Elizabeth F. Churchill, Gayna Williams, Karen Holtzblatt, Dianne Murray
2012 conf
CHI Extended Abstracts
Joseph A. Konstan, Aaron Marcus, Karen Holtzblatt, Eric Schaffer
2011 J jnl
Interactions
Karen Holtzblatt
2010 conf
CHI Extended Abstracts
Karen Holtzblatt, David B. Rondeau, Les Holtzblatt
2009 conf
CHI Extended Abstracts
Karen Holtzblatt, Joshua Barr, Les Holtzblatt
2005 J jnl
Pers. Ubiquitous Comput.
Karen Holtzblatt
2005 Misc conf
OZCHI
Karen Holtzblatt
2005 J jnl
Commun. ACM
Karen Holtzblatt
2005 J jnl
Ubiquity
Karen Holtzblatt, Jessamyn Burns Wendell, Shelley Wood
2005 conf
CHI Extended Abstracts
Karen Holtzblatt, Joerg Beringer, Lisa Baker
2004 conf
XP/Agile Universe
Hugh R. Beyer, Karen Holtzblatt, Lisa Baker
2004 conf
CHI Extended Abstracts
Karen Holtzblatt, Pekka Ketola, Thea Turner
2003 conf
CHI Extended Abstracts
Karen Holtzblatt, Hugh R. Beyer
2003 conf
CHI Extended Abstracts
Karen Holtzblatt, Joerg Beringer
2002 conf
CHI Extended Abstracts
Dennis R. Wixon, Judy Ramey, Karen Holtzblatt, Hugh R. Beyer, JoAnn T. Hackos, Stephanie Rosenbaum, Colleen Page, Sari A. Laakso, Karri-Pekka Laakso
2001 Misc conf
MuC
Karen Holtzblatt
2001 J jnl
Commun. ACM
Karen Holtzblatt
2000 conf
CHI Extended Abstracts
Karen Holtzblatt, Hugh R. Beyer
1999 A conf
RE
Karen Holtzblatt
1999 J jnl
Interactions
Hugh R. Beyer, Karen Holtzblatt
1999 conf
CHI Extended Abstracts
Karen Holtzblatt, Hugh R. Beyer
1999 B conf
INTERACT
Karen Holtzblatt
1999 J jnl
Interactions
Karen Holtzblatt
1998 book
Hugh R. Beyer, Karen Holtzblatt
1998 conf
CHI Conference Summary
Karen Holtzblatt, Hugh R. Beyer
1998 conf
CHI Conference Summary
Karen Holtzblatt, Hugh R. Beyer
1998 conf
CHI Conference Summary
Karen Holtzblatt, Hugh R. Beyer
1997 conf
CHI Extended Abstracts
Karen Holtzblatt, Hugh R. Beyer
1997 conf
CHI Extended Abstracts
Karen Holtzblatt, Hugh R. Beyer
1997 conf
CHI Extended Abstracts
Karen Holtzblatt, Hugh R. Beyer
1996 conf
CHI Conference Companion
Karen Holtzblatt, Hugh R. Beyer
1996 J jnl
Interactions
Hugh R. Beyer, Karen Holtzblatt
1996 conf
CHI Conference Companion
Karen Holtzblatt, Hugh R. Beyer
1995 J jnl
Commun. ACM
Hugh R. Beyer, Karen Holtzblatt
1995 conf
CHI 95 Conference Companion
Karen Holtzblatt, Hugh R. Beyer
1995 conf
CHI 95 Conference Companion
Karen Holtzblatt, Hugh R. Beyer
1995 J jnl
Commun. ACM
Karen Holtzblatt, Hugh R. Beyer
1994 J jnl
IEEE Softw.
Hugh R. Beyer, Karen Holtzblatt
1994 J jnl
Interactions
Karen Holtzblatt
1994 conf
CHI Conference Companion
Karen Holtzblatt
1993 J jnl
Commun. ACM
Karen Holtzblatt, Hugh R. Beyer
1990 A* conf
CHI
Dennis R. Wixon, Karen Holtzblatt, Stephen Knox
1988 J jnl
ACM SIGCHI Bull.
Karen Holtzblatt, Sandy Jones, Michael Good
redb/utils/sort_files_by_type.py
← Index redb/utils/sort_files_by_type.py python
import os
import sys
from collections import defaultdict
import tempfile
from magika import Magika
import py7zr
import pyzipper
import shutil

"""
This script is used to sort files by their type. 
It reads all the files in the provided directory and splits them into different 
directories based on their type. Mainly, it classifies the files into the following types:
- PE Binaries
- Mach-O Binaries
- ELF Binaries
- APK 
- Other Files

It outputs the count of files for each file extension and file type.

Command line example:
nohup python3 sort_files_by_type.py /mnt/samples/consilience/malware/vx-bazaar-expanded/Bazaar.2020.12 \
    /mnt/samples/consilience/malware/_sorted_samples/vx-bazaar/2020/ > \
    /mnt/samples/consilience/malware/ops-logs/20241014-SORT_FILES-bazaar_2020.12.output.log 2>&1 &
"""


def process_zip_file(filepath):
    print(f"[INFO] - Processing zip file: {filepath}")
    with tempfile.TemporaryDirectory() as temp_dir:
        try:
            with pyzipper.AESZipFile(filepath) as zf:
                zf.pwd = b"infected"
                filename = zf.namelist()[0]
                zf.extractall(temp_dir)
                extracted_zip_path = os.path.join(temp_dir, filename)
                return process_binary_file(extracted_zip_path)
        except Exception as e:
            print(f"[ERR] - Error processing zip file {filepath}: {str(e)}")
            return None


def process_7z_file(filepath):
    print(f"[INFO] - Processing 7z file: {filepath}")
    with tempfile.TemporaryDirectory() as temp_dir:
        try:
            with py7zr.SevenZipFile(filepath, mode="r", password="infected") as z:
                z.extractall(path=temp_dir)
                for root, _, files in os.walk(temp_dir):
                    for file in files:
                        extracted_file_path = os.path.join(root, file)
                        return process_binary_file(extracted_file_path)
        except Exception as e:
            print(f"[ERR] - Error processing 7z file {filepath}: {str(e)}")
            return None


def process_binary_file(filepath):
    print(f"[INFO] - Processing binary file: {filepath}")
    try:
        with open(filepath, "rb") as f:
            data = f.read(512 * 1024)  # 512KB
        return Magika().identify_bytes(data).output.ct_label
    except Exception as e:
        print(f"[ERR] - Error processing binary file {filepath}: {str(e)}")
        return "ERROR"


def count_file_extensions(path, dest_dir):
    # A defaultdict to store file extension counts
    extension_count = defaultdict(int)
    filetype_count = defaultdict(int)
    tot_files = 0

    # Walk through the directory
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.startswith("."):
                continue

            tot_files += 1
            # Split the file extension from the file name
            _, ext = os.path.splitext(file)
            ext = ext.lower()

            # Count the extensions
            extension_count[ext] += 1
            filepath = os.path.join(root, file)
            filetype = ""

            if ext == ".7z":
                filetype = process_7z_file(filepath)
            elif ext == ".zip":
                filetype = process_zip_file(filepath)
            else:
                filetype = process_binary_file(filepath)

            filetype_count[filetype] += 1

            if filetype == "pebin":
                dest = os.path.join(dest_dir, "pebin")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "macho":
                dest = os.path.join(dest_dir, "macho")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "elf":
                dest = os.path.join(dest_dir, "elf")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            elif filetype == "apk":
                dest = os.path.join(dest_dir, "apk")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            else:
                dest = os.path.join(dest_dir, "other")
                os.makedirs(dest, exist_ok=True)
                shutil.copy2(filepath, os.path.join(dest, file))
            print(f"[STATUS] - Progres: {tot_files}/{len(files)} files processed")

    # Print the results
    # print("- File Extension Statistics:")
    # for ext, count in extension_count.items():
    #     if ext:  # To exclude files with no extension
    #         print(f"\t{ext}: {count} files")

    # if "" in extension_count:
    #     print(f'\t{extension_count[""]} files with no extension')

    print(f"- Total Number of Files: {tot_files}")
    print("\n- File Type Statistics:")
    for filetype, count in sorted(filetype_count.items()):
        print(f"\t{filetype:<15}{count:>8}")


if __name__ == "__main__":
    # Check if the path was passed as a command-line argument
    if len(sys.argv) != 3:
        print("Usage: python3 script.py <input_path> <dest_dir>")
        sys.exit(1)

    # Get the path from the command-line arguments
    input_path = sys.argv[1]
    dest_dir = sys.argv[2]

    # Check if the provided path is valid
    if not os.path.isdir(input_path):
        print(f"The path '{input_path}' is not a valid directory.")
        sys.exit(1)

    # Call the function to count file extensions
    count_file_extensions(input_path, dest_dir)