Hello, nice to meet you!

My name is Vivian Yu.

About me

I am a senior at the University of Michigan currently working towards a Bachelor of Science in Computer Science and a minor in music in the College of Literature, Sciences and the Arts. I am passionate about working with AI, data science, cybersecurity and backend software developement as well as learning about new technologies. I also have a passion for piano and have studied and performed competitively for 16 years. My other hobbies include web design, graphic design, watercolor and acrylic painting, photography, and writing stories and music.

Projects

Individual Projects

Computer Organization

Projects in C:

  • A fictional assembly language, LC2K, was used for this course as well as a limited subset of ARMv8. LC2K resembled a limited subset of MIPS.

  • Basic assembler and simulator for LC2K.

  • Advanced assembler for LC2K with support for multiple source files and external references. Implemented a symbol table and relocation table.

  • Linker for multiple LC2K source files.

  • Pipelined simulator for LC2K. Implemented a 5-stage pipeline with forwarding to resolve data hazards and simple branch prediction and rollback for control hazards.

  • Cache simulator for LC2K with variable number of lines, block size, and associativity; writeback policy and LRU.

Projects in Assembly:

  • Multiplier for LC2K, which lacks a multiplication instruction. Uses long multiplication with bit shifting for speed.

  • Binomial coefficient calculator using stack frames and recursion.

Other project work:

  • For most (if not all) projects above, students were instructed to devise their own test cases, handwritten or randomly generated. The test cases were graded against a set of buggy instructor implementations for their ability to catch bugs.

Data Structures and Algorithms

Projects in C++:

  • Word morph solver. Takes a start word, end word, dictionary, and rulebook. Implemented with stacks, queues, and deques.

  • Mine escape solver implemented with priority queues.

  • Binary heap and pairing heap implementations from scratch.

  • Hash table implementation from scratch.

  • AVL balanced binary search tree implementation from scratch.

  • SQL simulator for a limited subset of commands. Implemented with a mix of hash tables, arrays, and maps.

  • Minimum spanning tree generator and traveling salesperson problem solver with heuristics. Employs backtracking and branch-and-bound designs.

Other project work:

  • For most (if not all) projects above, students were instructed to devise their own test cases, handwritten or randomly generated. The test cases were graded against a set of buggy instructor implementations for their ability to catch bugs.

  • Projects in this class were graded for correctness and also for performance. Runtime, peak memory usage, and memory leaks were measured.

Group Projects

Thread Library

  • Created a thread library from scratch in C++ with two other group members that can be used in multithreaded programs.

  • Implemented thread functionality such as thread creation, deletion, join and yield functions, and working with mutexes and CVs

iOS Block App

  • Develop an AR iOS app in Swift in a team of four using ARKit and GPS location to visualize buildings with pins and building names to help students better identify buildings on the University of Michigan campus

  • Market app with team and app got featured on the official University of Michigan app

Computer Security

  • A Vigenere deciphering tool. Uses variance in ciphertext letter frequency to estimate key length, and either simple frequency analysis or chi-square test to guess the key.

  • A length extension attack on MD5 hashes, and a collision attack composed of two binaries with identical MD5 hashes but wildly different behavior.

  • RSA signature forgery implementing Bleichenbacher’s attack.

  • A padding oracle attack against cipher block chaining, modeled after the vulnerability in earlier versions of TLS/SSL.

  • SQL injection against inadequate sanitation and hashed user input fields.

  • Port scanning detector using the dpkt library to parse packet captures.

  • Buffer overflow attacks for C programs. Encompasses shellcode, bypassing DEP and ASLR, and return oriented programming.

  • A fuzzer for black box testing on an instructor program that parses JSON input.

Projects in JavaScript and jQuery:

  • XSS attacks that send user data to a remote server. Implemented against increasing levels of sanitation, and coupled with CSRF attacks.

Other project work:

  • Analyzed network traffic with Wireshark to find vulnerabilities.

  • Wrote a phishing email to a simulated helpdesk.

  • A penetration test on a simulated corporate network, and digital forensics using Autopsy and various other tools. Due to the open ended nature of those projects, I am unable to disclose their components or methods.

Contact

Feel free to contact me for a resume