This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
gensec-westgate-djw2/hw5/app.py
2024-05-14 12:52:18 -07:00

76 lines
2.3 KiB
Python

from langchain_community.document_loaders.generic import GenericLoader
from langchain_community.document_loaders.parsers import LanguageParser
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_community.document_loaders import AsyncHtmlLoader
from dotenv import load_dotenv
import requests
from validators import url
from time import time
"""
This application attempts to automatically solve CTF levels for CS492/CS592 Malware Reverse Engineering.
"""
load_dotenv()
promt = "You are a malware reverse engineer"
def get_rag_chain():
return (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
session = requests.Session()
llm = ChatOpenAI(model_name="gpt-4-turbo", temperature=0)
url = "https://cs492.oregonctf.org/"
def start_session():
payload = {
'username': 'demo0',
'passwd': 'malware'
}
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Content-Type': 'application/x-www-form-urlencoded'
}
session.post(url, data=payload, headers=headers)
def download(setname):
payload = {
'setname': setname,
}
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Content-Type': 'application/x-www-form-urlencoded'
}
p = session.post(url+'/download', data=payload, headers=headers)
print(p.headers.get('Content-Type'))
zip = p.raw
print(zip)
while True:
try:
start_session()
print(session.cookies)
download('Ch01-08')
line: str = input("llm>> ")
if line:
start_time = time()
result: str = get_rag_chain.invoke(line)
end_time = time()
elapsed_time = round(end_time - start_time, 2)
print("\n", result, "\n\nElapsed time: ", elapsed_time, " seconds")
else:
break
except Exception as e:
print(e)
break