project 3 introduction this project aims to familiarize students with
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)