Malware Analyzer

A group project made for my Senior Projects assignment. The application uses a machine learning algorithm that scans a file and predicts whether it's a virus or a safe file. The technologies used include Python, the Dash framework, and Digital Ocean to host the web application. My main jobs within the group was to integrate my group members code, build the web application and UI, and create the documentation for the project such as the SRS, UML Class Diagram, and UML Flow Diagram.

Click here to demo GitHub
programming picture
Stock App Image

Features and highlights

  • Scans file to determine whether it is a virus or not
  • Applies a Machine Learning Algorithm written by Kenneth Witzenman
  • Uses a file disassembly script that was written by Cameron Pierce
  • Allows a user to upload a file to scan
  • Web application is deployed and hosted on Digital Ocean

Goals for project

The goal for this project was to work with our assigned group members to document, design, and implement a software application. Kenneth Witzenman was the project leader and the one who came up with the project idea. Kenneth was responsible for communicating the technical details of the program and creating the machine learning algorithm and training the model. I was responsible for making the web application, integration of our group member's code, documentation, and deployment of the web application. Cameron Pierce, another member of our group was responsible for creating the script that would disassemble a file and write the contents of it to a text file. He also was in charge of formatting the text file so that an array of weights could be applied and used on the text file to make a prediction. The files needed to train the machine learning algorithm were hosted and available on a web server he had at home.

What I learned

While developing this malware analyzer application, I spent a good amount of time with Linux. When I first deployed the application, the disassembly script didn't work because I didn't have the necessary dependencies to run the objdump command. So upon discovering this, I learned how to connect to the Linux server via SSH so I could install the binutils package for the objdump command. Dynamic callback functions, functions that are executed whenever an event like a changed value or server control is used, were something that I had to get better with for this application as it had multiple processes and inputs. Lastly, I got more hands-on experience with producing the documentation while working on this group project. Decomposing the different processes and required functionality into classes and methods really helped with making the integration of all our code mostly pain and headache free.