Joe Roybal

Computer Science Graduate Working at the University of Arkansas

Portfolio

PokeDisplay

In the past, I had a magic mirror (2-way mirror w/ monitor and raspberry pi behind it) and one of my favorite addons for the software was a Daily pokemon addon. I decided to create a web app that was inspired by this. PokeDisplay is something I whipped up over a weekend that satisfied my very basic needs of displaying information. While I wanted to wait to post this until I had a picture of it running on my mirror, I am currently troubleshooting some issues with the mirror :). I welcome recommendations for features and contributions through Github. Great side project! If you want to talk about it as well I am excited to discuss it in the comments.

P.S. You can do something similar to this if you want! Read the code, ask questions, do some research, and learn some new things! (Title hyperlinked to GitHub repo)

Southwestern University Garden Club Website

A website designed by my peers and me to help assist the Southwestern University Garden Club with documentation and maintenance of the greenhouse and the plants involved. Can be found at http://sugarden.club/

Rock Paper Scissors Game in Python

Created a rock paper scissors game using the PyQt5 Python library.

Port Scanner in Python

import argparse
import socket
from threading import *
# From project outlines
semLock = Semaphore(value=1)


def connScan(tgtHost, tgtPort):
    #  connScan will be the function run as a thread and args will be the arguments used by
    #  the function
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # create socket
        s.settimeout(0.5)
        s.connect((tgtHost, tgtPort))  # connect
        semLock.acquire()
        print(tgtPort, " /tcp port open")  # print that that port is open
        s.close()  # close the connection
    except:
        semLock.acquire()
        print(tgtPort,  "is filtered or closed")
    finally:
        semLock.release()


def portScan(tgtHost, tgtPorts):  # Code from class
    try:
        tgtIP = socket.gethostbyname(tgtHost)
        print(tgtIP)
    except:
        print("[-] Cannot resolve", tgtHost, ": Unknown Host")
        return

    for tgtPort in tgtPorts:  # Outlined in Project guidelines
        t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
        t.start()


def main():  # code from class
    parser = argparse.ArgumentParser()
    parser.add_argument('-H', dest='tgtHost', required=True,
                        help='specify target host')
    parser.add_argument('-p', dest='tgtPorts',
                        default='21, 22, 23, 25, 80, 443', help='specify target port(s)')

    args = parser.parse_args()
    tgtHost = args.tgtHost
    tgtPorts = str(args.tgtPorts).split(', ')

    portScan(tgtHost, tgtPorts)

if __name__ == "__main__":
    main()

Brute Force Password Hash Cracker in Python

# Used for reference 
#root:$1$h0oYf/69$l4JuFV3DF5bCyI2Maifaa/:16467:0:99999:7::: 
#sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::
import crypt 
def brutePass(salt, passHashed): 
	salt = "$1$"+salt 
	passHashed = salt+"$"+passHashed 
	dictFile = open('rockyou.txt', 'r') 
	for password in dictFile.readlines():
                password = password.strip('\n') 
		foundPassword = crypt.crypt(password, salt) 
		if passHashed == foundPassword:
                        return password 

def main(): 
	fname = open('shadow.txt','r') 
	for x in fname.readlines():
                line = x.strip() 
		user = line.split(':')[0] 
		salt = line.split('$')[2] 
                hash = line.split('$')[3].split(':')[0] 
		print "User: ",user,"\t","Salt: ",salt,"\t","Hash: ",hash 
			password = brutePass(salt, hash) 
			if password:
                       		print "The password is ", password 
			else: 
				print "no password found"
        fname.close() 

if __name__== "__main__": 
	main()

Riddle Me This

The program is a bit difficult to capture, so enjoy this graphic!

This is a side project that I was working on in my spare time. I wanted to take the same aspects and functions of ransomware and instead of locking information behind a paywall I wanted to have the user complete a series of riddles and questions in order to retrieve access to their files. This was not meant to be used anywhere other than on my machine only targeting a few specific files. The purpose was to learn python by doing something unusual with it.

Caesar Shift Cipher

A Caesar shift cipher program that will be able to encrypt and decrypt a text file and also encrypt and decrypt a text input based on a user-chosen key. This program also has the functionality to brute-force guess a Caesar Shift Cipher if the key is unknown.


Contraception Calculator

The Contraception Calculator is an interactive web page that was designed for one of my classes. The web page is easy to navigate since it is based on a familiar user interface (a calculator) and also provides useful information. it works as a basic calculator for determining the chance of getting pregnant based on the forms of contraception selected. It could be improved in several ways to make it a solid source of information.


The Six Degrees of Discrete

The aim of this project was to show the connections between our Discrete mathematics course and other courses. I picked up the idea of using JavaScript (p5.JS) to show my visual map with the various connections to my other courses that I had previously taken. Connecting each node to the previous node with the topic that I feel most related to the previous node. Each node represents the course and topic that is related to the previous node’s course. The choice to use red is the “important” color because this signifies that the user has reached the end and sixth degree on the separation of the visual map. There should be 12 red endings in the visual map. The significance of Kevin Bacon’s head is a dedication to the idea I received for the final product of the visual map. An obstacle I had to overcome was the fact that I didn’t know how to code in JavaScript. So I learned how to and I truly enjoyed this portion, learning a new language and being able to test this knowledge with a cool project. The final product came out to around 600 lines of code.