<img width="1507" alt="image" src="https://github.com/retr0reg/Ret2GPT/assets/72267897/76a00844-5dc7-4e6e-9ddd-d4b35ee49754"> <img width="1000" alt="Xnip2023-04-16_11-36-38" src="https://yellow-cdn.veclightyear.com/2b54e442/48267dd6-d2a2-43c4-89db-439b44ba8e19.png">chatwithbinary.com 的重新维护将于 9 月 1 日开始
ChatWithBinary
是一种尖端的软件工具,旨在使用 LangChain(OpenAI API)技术分析二进制文件。它主要帮助 CTF(Capture The Flag)攻防队员深入了解他们正在处理的二进制文件,并提供有价值的帮助,帮助他们更有效地解决挑战 :)
ChatWithBinary
基于人工智能和机器学习的强大基础,能够快速高效地分析复杂的二进制文件。通过利用 OpenAI API
的力量,RET2GPT 可以提供全面且详细的二进制文件分析,使其成为 CTF 攻防队员不可或缺的工具。
ChatWithBinary
的主要目标是简化理解二进制文件的过程,从而使 CTF 攻防队员能够专注于解决挑战而不是陷入二进制分析的复杂性中。该软件通过对二进制文件的结构、逻辑和潜在漏洞进行彻底检查来实现这一目标。这种分析帮助攻防队员识别代码中可能被攻击者利用的任何弱点。
总而言之,ChatWithBinary
包括以下功能:
langchain
来分割文件,为您节省大量的标记时间和金钱langchain
和 OpenAI API
在没有人工干预的情况下实现二进制文件的自动化分析我们的包已经成功上传到 Pypi !!!, 所以你可以通过使用 pip
轻松安装它:
python3 -m pip --index-url=https://pypi.org/simple/ Ret2GPT
此外,如果你还没有安装 retdec
,你可能需要先通过https://github.com/avast/retdec 来安装它,这不会花太长时间,将一劳永逸
在开始之前,你仍然需要在终端中设置你的 OPENAI_KEY
,你可以从这里 获取你的密钥:
export OPENAI_API_KEY="Enter your api_key here"
然后你可以通过在终端中使用 Ret2GPT
来使用它:
Ret2GPT [FILE_PATH]
首先,克隆我们的仓库:
git clone https://github.com/DDizzzy79/Ret2GPT.git
现在,如果你只想尝试 Ret2GPT
,你可以通过使用 python3
运行它:
python3 ret2gpt
然而,如果你想永久使用 Ret2GPT
,你可以通过执行 install.sh
文件轻松安装它:
chmod +x install.sh && ./install.sh
之后,你可以使用 ret2gpt
命令从任何地方运行我们的软件,这简直是奇迹吧?
在开始之前,你需要在终端中设置你的 OPENAI_KEY
,你可以从这里 获取你的密钥:
export OPENAI_API_KEY="Enter your api_key here"
首先,在命令行中使用此文件的方法为:
Usage: ret2gpt [FILE_PATH]
现在,您进入了命令行界面,您可以询问您想问的任何问题
例如,如果你想知道程序是否易受缓冲区溢出的影响,你可以问:
What do you want to ask about example2/hacknote.c >>> Are there any buffer overflow based on the program?
🏂 PwnGPT: 100% YES, there are several potential buffer overflow vulnerabilities in this code.
The add_note() function uses the read() function to read user input into a buffer without specifying a maximum buffer size,
which could allow an attacker to overflow the buffer and overwrite adjacent memory locations.
Additionally, the print_note() and del_note() functions also read user input without proper boundary checks, which could result in buffer overflows.
To fix these issues, implement proper input validation and boundary checks before reading user input, and use functions like fgets() or scanf() that allow specifying a maximum buffer size.
你可以使用 help
命令获取帮助信息:
What do you want to ask about example2/hacknote.c >>> /help
/analysis - 从 Pwn 角度获取代码分析提示
/exp - 获取可供 “Pwntools” 使用的 exp 模板
/exit - 退出程序
What do you want to ask about example2/hacknote.c >>>
我相信你自己能弄明白这两个命令的意思
要找到这个问题的答案,我们必须分析程序的每个目录和步骤,所以让我们开始吧!
langchain_proprocess/
在这部分代码中,我设计了一系列的函数和实用工具,利用 LangChain(OpenAI API)技术的力量创建一个先进的问题回答系统。该系统专门用于处理和分析文本文件,主要目标是帮助 Capture the Flag (CTF) 攻防队员理解二进制文件并更有效地解决挑战。
我首先导入了必要的模块,并使用 GPT-3.5 Turbo 模型初始化了 ChatOpenAI 模型。接下来,我定义了几个处理文本分析流水线中各种任务的实用函数:
loading
:该函数接收一个文本文件描述符作为输入,并使用 TextLoader 实用程序将文件加载到内存中。
split_files
:文件加载后,该函数使用 CharacterTextSplitter 实用程序将文档分成较小的块,使其更易于处理。
def split_files(loader): document = loader.load() text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) return text_splitter.split_documents(document)
create_qa
:该函数通过将文本块与 OpenAIEmbeddings 和 Chroma 向量存储结合起来创建一个问答系统,从而实现高效的信息检索。
def create_qa(loader): from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma embeddings = OpenAIEmbeddings() db = Chroma.from_documents(split_files(loader), embeddings) retriever = db.as_retriever() return RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=retriever)
此外,我还为 QA bot
使用 GPT3.5
qa_with_docs
:该函数运行问答链,将查询和文档加载器作为输入以生成有意义的回答。
query_about_files
:该函数通过提供用户定义的查询来促进问答系统的查询。
summerize_chain
:该函数负责通过摘要链对文本文件进行摘要,生成文件内容的简洁摘要。
为了确保问答系统能够理解上下文并提供准确且相关的信息,我使用 build_prompt_for_qa()
函数构建了一个详细的提示。此函数采用少样本学习的方法,结合FewShotPromptTemplate类,并包含几个代码分析和漏洞识别的示例。这些示例作为模型的指导,帮助模型理解上下文并做出相应的响应。
def build_prompt_for_qa(query): from langchain import PromptTemplate categories = ["Pwn","Reverse"] main_prompt = """ 描述:你是一个正在进行夺旗(CTF)比赛的分析员。 你的任务是帮助参赛者分析他们提供的二进制文件反编译出的 C 文件。 你必须首先提供漏洞的可能性。 请记住,你只能访问 C 语言文件,不能要求关于这些文件的任何额外信息。 当你给出回复时,你必须提供漏洞的位置和为什么这是一个漏洞的原因,否则你不能回复。 运用你的专业知识,彻底分析这些 C 文件,并为参赛者提供宝贵的见解。 提示:一名 CTF 比赛的参赛者刚刚提交了一份反编译的 C 文件以供分析。 他们在寻找任何潜在的漏洞、弱点或可能帮助他们比赛的线索。 使用仅在 C 文件中提供的信息,提供详细的分析,突出任何关注或值得注意的区域。 请勿生成不确定的信息。 以下是一些示例: """ examples = [ { "query": "你能在这段代码中找到任何缓冲区溢出漏洞吗?", "answer": "是的,通过对代码的分析,我发现了一个潜在的缓冲区溢出漏洞在函数 read_input 中。该函数使用 gets() 来读取用户输入到固定大小的缓冲区中,但没有检查输入长度,导致可能发生溢出。 考虑用更安全的替代方法,如 fgets(),并验证输入大小以防止此问题。" },{ "query": "这段代码中有没有产生竞争条件的漏洞?", "answer": "是的,通过分析,我发现了一个潜在的竞争条件漏洞在函数 write_to_file 中。该函数使用 fopen() 打开一个文件并执行写操作,而没有适当的同步机制,例如锁。这可能会导致数据损坏或未授权的访问,如果多个进程或线程同时访问该文件。为了减轻这一问题,请考虑实施适当的文件锁定机制或使用原子文件操作。" }, { "query": "这段代码中是否有不安全的随机数生成方式?", "answer": "0%没有,这段代码中使用了安全的随机数生成方法。这段代码使用了 libsodium 库中的 randombytes() 函数,这是一个加密安全的随机数生成器。这确保了代码生成的任何随机值都具有足够的不可预测性和抗攻击性。" },{ "query": "这段代码中是否存在格式字符串漏洞?", "answer": "100%是的,print_user_info() 函数中存在格式字符串漏洞。该函数使用 printf() 打印用户输入,而没有指定适当的格式字符串。这可能允许攻击者利用该漏洞读取或写入任意内存地址。修复此问题的方法是使用匹配预期输入的格式字符串,比如 printf(\"%s\", user_input);。" }, { "query": "这段代码中是否有任何整数溢出漏洞?", "answer": "50%可能,我可能检测到计算大小() 函数中出现潜在的整数溢出漏洞。该函数可能在用户提供的整数上执行算术运算而没有适当的边界检查,这可能导致整数溢出。这可能会导致错误的计算、缓冲区溢出或其他意外行为。为减轻此漏洞,请在执行算术运算之前实施适当的输入验证和边界检查。" } ] example_template = "用户: {query}(基于代码)\n GPT: {answer}" example_prompt = PromptTemplate( input_variables=["query", "answer"], template=example_template ) suffix = "用户:{query}\nAI:" from langchain import FewShotPromptTemplate few_shot_prompt_template = FewShotPromptTemplate( examples=examples, example_prompt=example_prompt, prefix=main_prompt, suffix=suffix, input_variables=["query"], example_separator="\n\n" ) return few_shot_prompt_template.format(query=query)
built_in_command/
我认为 Ret2gpt
的这部分不需要过多的解释,这只是一个命令行界面,允许用户与系统进行交互。built_in_command
文件夹包含以下文件:
__init__.py
:此文件负责将 built_in_command
文件夹初始化为一个 Python 包。check_for_command.py
:此文件包含 check()
和 help()
函数,check()
用于检查用户输入是否为命令,并返回不同的提示,help()
则打印帮助信息。command_line.py
:此文件包含 command_line()
函数,这是 built_in_command
文件夹的主函数。它负责解析用户输入并调用相应的函数。全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。