69 lines
2.5 KiB
Python
69 lines
2.5 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
|
|
from validators import url
|
|
from time import time
|
|
|
|
load_dotenv()
|
|
|
|
llm = ChatOpenAI(model_name="gpt-4-turbo", temperature=0)
|
|
|
|
"""
|
|
Per the prompt below, This agent will de-obfuscate and de-minify javascript source files, from either the web or a local source, and will apply appropriate commenting and formatting.
|
|
A summary of actions taken will be provided, or a reason for rejection will be provided.
|
|
An elapsed time will also be shown.
|
|
|
|
derived from https://github.com/wu4f/cs410g-src/blob/main/05_CodeSummarize/01_python_parser.py
|
|
"""
|
|
|
|
|
|
def deobfuscate(path: str):
|
|
if url(path):
|
|
loader = AsyncHtmlLoader(path)
|
|
else:
|
|
loader = GenericLoader.from_filesystem(
|
|
path,
|
|
glob="*",
|
|
suffixes=[".js"],
|
|
parser=LanguageParser(),
|
|
)
|
|
docs = loader.load()
|
|
prompt = PromptTemplate.from_template(
|
|
"""You are an expert javascript de-obfuscater and de-minifier. Carefully analyze the following code and de-obduscate/de-minify, by applying proper formatting, commenting, and re-naming as necessary.
|
|
|
|
Along with this response, make a note of the changes made. If the input is anything other than obfuscated or minified javascript, respond with "Invalid Input:" follwed by the reason why.
|
|
|
|
{text}
|
|
"""
|
|
)
|
|
|
|
chain = {"text": RunnablePassthrough()} | prompt | llm | StrOutputParser()
|
|
output = "\n".join([d.page_content for d in docs])
|
|
result = chain.invoke(output)
|
|
return result
|
|
|
|
|
|
print(
|
|
"Welcome to my javascript code de-obfuscator. Supply a local or web path to an obfuscated or minified javascript file and I will attempt to make it readable."
|
|
)
|
|
|
|
while True:
|
|
try:
|
|
line: str = input("llm>> ")
|
|
if line:
|
|
start_time = time()
|
|
result: str = deobfuscate(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
|