Search for question
Question

Project 3 Introduction This project aims to familiarize students with navigating and manipulating Unix file systems in a cybersecurity context. You are restricted to using C, C++, or Rust for this project. Extra credit will be given to submissions in Rust. Like Project 1, knowledge of software collaborative workflows, code testing, and code documentation is still necessary to achieve full points. Students are allowed to work in groups of up to 3 students. Resources such as ChatGPT and Stack Overflow are allowed. Necessary Tools Some of the tools you'll need to complete this lab are: A text editor (such as VSCode) • If you're using C: ○ A C compiler such as: • о Microsoft Visual Studio with C tools (windows) Clang (Mac OS) Gcc (Unix) C documentation tools such as Doxygen C unit testing tools such as Unity If you're using C++: о A C compiler such as: Microsoft Visual Studio with C++ tools (windows) ■ Clang (Mac OS) G++ (Unix) ○ C documentation tools such as Doxygen о C unit testing tools such as CLion If you're using Rust: Just rust Project Initialization Your project can be initialized in the following steps: 1.) Create a GitHub repository with your initial commit to initialize your project. If you're using C or C++, your project will likely be created from scratch with an empty folder. If you're using Rust, your project should be initialized by entering ONE of the following commands in the terminal (I recommend the first one): a. Cargo new-lib [project_name] b. Cargo new [project_name] 2.) After uploading your project to GitHub, add your team members and me (username: samonjourus) as collaborators to your project. This is how (1) I will know who your team members are and (2) you can collaborate with your team on the same repository. Project Details For this project, you'll need to create an application that runs on Unix (ubuntu) and find, decrypts, and sends a file to a remote server. Somewhere on the file system, there will be two files (in different locations). The first file is encrypted and called special_file.txt. The second file contains the decryption secret key and is called secret_file.txt. You'll need to traverse the file system to find both files, decrypt the target file, and send the file to a remote server. Details regarding connecting to the remote server will be provided at a later date. Keep in mind that the user of this file system does not have administrative access to the machine. The special file will be encrypted with the AES algorithm. Application Features The features must be enabled in your application: • File scraping • File reading File decryption HTTP requests Project Submission To submit your assignment, tag a GitHub commit as "Release” and have a team member submit the GitHub link to the repository or release on GitHub. If you submit the release, I'll grade that release. If you submit the repository, I'll grade the most recent release. Additional Notes • As a warning: While technically, you could upload the code to GitHub when you're done since points will not be taken off for GitHub etiquette, refusing to learn how to use Git and GitHub will make your life as a software developer much harder. To not disrupt other people working on the code simultaneously, it is recommended that each collaborator works in a different Git branch. Being familiar with managing repositories and their branches is a skill that can come up in interviews, so it is worth learning. о It is common practice to name branches after the feature being implemented. The "proper" sequence for code development is planning, creating tests, developing, testing, and documenting. Doing these steps in a different order tends to create difficulties... • Rust is harder to learn than C/C++, but the tooling is better. In the end, I expect them both to be equal in difficulty. Project Grading Grading will be broken down as follows: Task Points Find files 25 points Get decryption key 25 points Decrypt file 25 points Send file to remote 25 points Testing Documentation 25 points (bonus) 25 points (bonus) User with sudo 15 points (bonus)