Project Icon

xnLinkFinder

全面的网站端点和参数发现工具

xnLinkFinder是一款专注于发现网站端点和潜在参数的工具。它通过多种方式收集信息,包括网站爬取、文件搜索、安全工具项目分析等。该工具提供灵活的输入输出选项,支持深度搜索和多线程处理,并允许自定义过滤和排除规则。xnLinkFinder还可生成目标专用词表,为网络安全研究和渗透测试提供有力支持。

关于 - v6.4

这是一个用于发现给定目标的端点(和潜在参数)的工具。它可以通过以下方式找到它们:

  • 爬取单个目标(输入域名/URL)
  • 爬取多个目标(输入包含域名/URL的文件)
  • 搜索指定目录中的文件(输入目录名)
  • Burp项目中获取(输入Burp XML文件的位置)
  • OWASP ZAP项目中获取(输入ZAP ASCII消息文件的位置)
  • Caido项目中获取(输入Caido导出的CSV文件位置)
  • 处理waymore结果目录(搜索waymore -mode R的归档响应文件,并请求waymore.txt中的URL和index.txt中的原始URL - 参见waymore README.md

这个Python脚本基于我的Burp扩展GAP的链接查找功能。 作为起点,我采用了Gerben Javado开发的出色工具LinkFinder,并使用了其查找链接的正则表达式,但进行了额外的改进以找到更多链接。

安装

xnLinkFinder支持Python 3

在默认(全局)Python环境中安装xnLinkFinder

pip install xnLinkFinder

或者

pip install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git -v

你可以使用以下命令升级:

pip install --upgrade xnLinkFinder

pipx

使用pipx在隔离的Python环境中快速设置

pipx install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git

使用方法

参数长参数描述
-i--input输入:URL、URL文本文件、要搜索的文件目录、Burp XML输出文件、OWASP ZAP输出文件或Caido CSV文件。
-o--output保存链接输出的文件,包括必要的路径(默认:output.txt)。如果设置为cli,则输出仅写入STDOUT。如果文件已存在,将追加内容(并去重),除非传递了-ow选项。
-op--output-params保存潜在参数输出的文件,包括必要的路径(默认:parameters.txt)。如果设置为cli,则输出仅写入STDOUT(但不会传递给其他程序)。如果文件已存在,将追加内容(并去重),除非传递了-ow选项。
-owl--output-wordlist保存目标特定词表输出的文件,包括必要的路径(默认:无词表输出)。如果设置为cli,则输出仅写入STDOUT(但不会传递给其他程序)。如果文件已存在,将追加内容(并去重),除非传递了-ow选项。
-oo--output-oos保存超出范围链接输出的文件,包括必要的路径(默认:无OOS输出)。如果设置为cli,则输出仅写入STDOUT(但不会传递给其他程序)。如果文件已存在,将追加内容(并去重),除非传递了-ow选项。
-ow--output-overwrite如果输出文件已存在,将覆盖而不是追加内容。
-sp--scope-prefix任何以/开头的链接在输出中将使用范围域名作为前缀,而不是原始链接。如果传递的值是有效的文件名,将使用该文件,否则将使用字符串字面值。
-spo--scope-prefix-original如果传递了-sp参数,则此参数决定是否在输出中也包含以/开头的原始链接(默认:false)。
-spkf--scope-prefix-keep-failed如果传递了-spkf参数,则此参数决定是否在输出中保留返回404或发生RequestException的前缀链接(默认:false)。
-sf--scope-filter将过滤输出链接,仅包含域名在指定范围内的链接。如果传递的值是有效的文件名,将使用该文件,否则将使用字符串字面值。如果输入是域名/URL(或域名/URL文件),此参数现在是必需的,以防止爬取不在范围内的站点并防止产生误导性结果。
-c--cookies †添加要随HTTP请求传递的cookie。以'name1=value1; name2=value2;'的格式传递。
-H--headers †添加要随HTTP请求传递的自定义头部。以'Header1: value1; Header2: value2;'的格式传递。
-ra--regex-after用于在输出前对发现的端点进行过滤的正则表达式(例如:/api/v[0-9]\.[0-9]\*)。如果匹配,则输出该链接。
-d--depth †搜索的深度级别。例如,如果传递值2,则最初发现的所有链接将被进一步搜索更多链接(默认:1)。此选项对Burp文件、ZAP文件和Caido文件无效,因为它们可能非常大且消耗大量内存。建议使用-sp--scope-prefix)参数,以确保可以尝试请求没有域名的链接。
-p--processes †获取URL或URL文件请求时(不适用于Burp文件、ZAP文件或Caido文件)进行基本的多线程处理。此参数确定使用的进程(线程)数量(默认:25)。
-x--exclude额外的链接排除项(除config.yml中的列表外),以逗号分隔的列表形式,例如careers,forum
-orig--origin是否在输出中包含链接的来源。在输出中显示为LINK-URL [ORIGIN-URL](默认:false)。
-prefixed是否在输出中显示哪些链接被添加了前缀。在输出中的链接和来源后显示(PREFIXED)(默认:false)。
-xrel--exclude-relative-links默认情况下,结果中以./../开头的任何链接都将被包含。如果使用此参数,这些相对链接将不会被添加。
-t--timeout †等待服务器发送数据的最长时间(秒),超时后放弃(默认:10秒)。
-inc--include在输出中包含输入(-i)链接(默认:false)。
-u--user-agent †获取链接的User Agent,例如-u desktop mobile。可能的值有desktopmobileset-top-boxesgame-console。还有mobile-applemobile-androidmobile-windows,它们是mobile的子集,但可以单独使用。
-uc--user-agent-custom †用于所有请求的自定义User Agent字符串。这将覆盖-u/--user-agent参数。当程序需要特定的User Agent头部来识别你时,可以使用此参数。
-insecure是否在发出请求时禁用TLS证书检查(默认:false)。
-s429当超过95%的响应返回429 Too Many Requests时停止(默认:false)。
-s403当超过95%的响应返回403 Forbidden时停止(默认:false)。
-sTO当超过95%的请求超时时停止(默认:false)。
-sCE当超过95%的请求出现连接错误时停止(默认:false)。
-m--memory-threshold内存阈值百分比。如果机器内存超过阈值,程序将在耗尽内存之前优雅地停止并结束(默认:95)。
-mfs--max-file-size †当-i是目录时,要检查的文件的最大文件大小(字节)。如果文件大小超过此值,将被忽略(默认:500 MB)。设置为0表示不会忽略任何文件,无论大小如何。
-rp--replay-proxy†对于使用URL(或URL文件)进行主动链接查找,通过此代理重放请求。
-ascii-only是否仅在链接和参数仅包含ASCII字符时添加它们。当你知道目标可能使用ASCII字符,并且由于某种原因从二进制文件中获得了许多误报时,这可能很有用。
-mtl--max-time-limit运行的最大时间限制(分钟)(默认:0)。如果传递0,则没有限制。
--configYML配置文件的路径。如果未传递,将在默认目录(通常是~/.config/xnLinkFinder)中查找config.yml文件。
-nwlpl--no-wordlist-plurals默认情况下,为目标特定词表找到单词时,如果有单数词的复数形式,或反之,则会添加新词。如果使用此参数,则不执行此过程。
-nwlpw--no-wordlist-pathwords默认情况下,链接中发现的任何路径词都将被处理用于目标特定词表。如果使用此参数,则不会处理它们。注意:如果YAML配置中的respParamPathWords值为True,则此参数不会产生任何效果,除非同时传递了-nwlpm/--no-wordlist-parameters
-nwlpm--no-wordlist-parameters默认情况下,链接中找到的任何参数都将被处理以生成目标特定的词表。如果使用此参数,则不会处理这些参数。
-nwlc--no-wordlist-comments默认情况下,页面中的任何注释都将被处理以生成目标特定的词表。如果使用此参数,则不会处理这些注释。
-nwlia--no-wordlist-imgalt默认情况下,任何图像的"alt"属性都将被处理以生成目标特定的词表。如果使用此参数,则不会处理这些属性。
-nwld--no-wordlist-digits从目标特定的词表中排除包含数字的任何单词。
-nwll--no-wordlist-lowercase默认情况下,添加任何包含大写字符的单词时,也会添加该单词的小写形式。如果使用此参数,则不会添加小写形式的单词。
-wlml--wordlist-maxlen添加到目标特定词表的单词的最大长度,不包括复数形式(默认值:0 - 无限制)
-swf--stopwords-file一个包含额外停用词的文件(除了YML配置文件中的"stopWords"之外),用于从目标特定的词表中排除单词。停用词用于自然语言处理,不同的库中可以找到不同的列表。根据您的目标,您可能希望添加不同语言的单词。
-brt--burpfile-remove-tags当使用-i传递的输入是Burp文件时,会交互式地询问用户是否要从该文件中删除不必要的标签(有时Burp XML文件中存在问题,通常可以通过删除不必要的标签来解决,这也会使文件变小)。如果您在脚本中使用xnLinkFinder,您不希望中断以等待用户输入,因此可以通过传递此参数并设置为truefalse来设置。注意:这是对文件的永久更改
-nb--no-banner隐藏工具横幅。
-v--verbose详细输出
-vv--vverbose更详细的输出
--version显示当前版本号。
-h--help显示帮助信息并退出
† 对于输入目录、BURP XML文件、OWASP ZAP文件或CAIDO CSV文件不相关

config.yml

config.yml文件(通常位于~/.config/xnLinkFinder/)包含可以根据需要更新的键:

  • linkExclude - 以逗号分隔的字符串列表(例如.css,.jpg,.jpeg等),所有链接都会与之对比。如果链接包含任何这些字符串,则会被排除在输出之外。如果输入是目录,则文件名会与此列表对比。
  • contentExclude - 以逗号分隔的字符串列表(例如text/css,image/jpeg,image/jpg等),所有响应的Content-Type头部都会与之对比。任何具有这些内容类型的响应都将被排除,不会检查链接。
  • fileExtExclude - 以逗号分隔的字符串列表(例如.zip,.gz,.tar等),在目录模式下所有文件都会与之对比。如果文件具有这些扩展名之一,则不会搜索链接。另外,在正常模式下,如果响应没有内容类型可供排除检查,它将检查URL末尾是否有这些扩展名,以决定是否搜索链接。
  • regexFiles - 以管道符分隔的文件类型列表(例如php|php3|php5等)。这些用于链接查找正则表达式中,当发现不明显的链接但是有趣的文件类型时,你想要挑选出来。如果你添加到这个列表中,确保转义任何点以确保正确的正则表达式,例如js\.map
  • respParamLinksFound † - 是否从响应中找到的链接获取潜在参数:TrueFalse
  • respParamPathWords † - 是否将检索到的链接中的路径词添加为潜在参数:TrueFalse
  • respParamJSON † - 如果响应的MIME类型包含JSON,是否将JSON键值添加为潜在参数:TrueFalse
  • respParamJSVars † - 是否将用varletconst设置的JavaScript变量添加为潜在参数:TrueFalse
  • respParamXML † - 如果响应的MIME类型包含XML,是否将XML属性值添加为潜在参数:TrueFalse
  • respParamInputField † - 如果响应的MIME类型包含HTML,是否将任何INPUT字段的NAME和ID属性添加为潜在参数:TrueFalse
  • respParamMetaName † - 如果响应的MIME类型包含HTML,是否将任何META标签的NAME属性添加为潜在参数:TrueFalse
  • wordsContentTypes - 以逗号分隔的字符串列表(例如text/html,text/plain),用于指定将搜索哪些响应内容类型以获取目标特定词表的单词。
  • stopWords - 以逗号分隔的字符串列表(例如then,this,that),用于指定从目标特定词表中排除的单词。这个默认列表最初由英语限定词、并列连词和介词,以及来自Scikit-Learn(一个Python机器学习库)的停用词列表组成。

† 如果在配置文件中找不到这些,它们将默认为True

示例

从特定目标查找链接 - 基本

xnLinkFinder -i target.com -sf target.com

从特定目标查找链接 - 详细

理想情况下,提供带有主域(包括架构)的作用域前缀(-sp),以及用于过滤结果仅包含相关域的作用域过滤器(-sf)(这可以是文件或作用域内的域)。此外,你可以传递cookies和自定义头部,以确保只找到授权用户可用的链接。 指定用户代理(-u desktop mobile)将首先使用桌面用户代理搜索所有链接,然后使用移动用户代理再次尝试。可能有与给定用户代理相关的特定端点。给出深度值(-d)将继续向上一深度搜索中找到的链接发送请求,以查找更多链接。

xnLinkFinder -i target.com -sp target_prefix.txt -sf target_scope.txt -spo -inc -vv -H 'Authorization: Bearer XXXXXXXXXXXXXX' -c 'SessionId=MYSESSIONID' -u desktop mobile -d 10

从URL列表查找链接 - 基本

如果你有一个JS文件URL列表,你可以在这些文件中查找链接:

xnLinkFinder -i target_js.txt -sf target.com

从目录中的文件查找链接 - 基本

如果你有文件,例如JS文件、HTTP响应等,你可以在这些文件中查找链接:

xnLinkFinder -i ~/.config/waymore/results/target.com

注意:子目录也会被检查。可以指定-mfs选项以跳过超过特定大小的文件。

从Burp项目查找链接 - 基本

在Burp中,通过高亮范围然后右键单击并选择Save selected items来选择要搜索的项目。在保存之前确保勾选了base64-encode requests and responses选项。 要从文件中获取所有链接(即使是巨大的文件,你也能获取所有链接):

xnLinkFinder -i target_burp.xml

注意:xnLinkFinder假设如果用-i传递的文件的第一行以<?xml开头,那么你正在尝试处理一个Burp文件。

从Burp项目查找链接 - 详细

理想情况下,提供带有主域(包括架构)的作用域前缀(-sp),以及用于过滤结果仅包含相关域的作用域过滤器(-sf)。

xnLinkFinder -i target_burp.xml -o target_burp.txt -sp https://www.target.com -sf target.* -ow -spo -inc -vv

从OWASP ZAP项目查找链接 - 基本

在ZAP中,通过高亮历史记录来选择要搜索的项目,点击菜单Export并选择Export Messages to File...。这将让你保存一个包含所有你想搜索的请求和响应的ASCII文本文件。 要从文件中获取所有链接(即使是巨大的文件,你也能获取所有链接):

xnLinkFinder -i target_zap.txt

注意:xnLinkFinder假设如果用-i传递的文件的第一行格式为==== 99 ==========(v2.11.1)或===99 ==========(v2.12),那么你正在尝试处理一个OWASP ZAP ASCII文本文件。

从Caido导出的CSV文件查找链接 - 基本

在Caido中,转到History部分并选择Export选项。

如果你使用的是Caido Pro或Enterprise版本,选择Export current rows选项并选择As CSV。转到Exports部分并下载CSV文件。然后作为输入传递:

xnLinkFinder -i 2023-03-18-010332_csv_requests.csv

如果你使用的是Caido Community版本,你必须选择Export all选项并选择As CSV。转到Exports部分并下载CSV文件。由于你有完整的历史记录,你需要从CSV文件中删除任何不相关的内容。使用下面的示例,其中redbull是你正在查看的目标域名的主要部分。

cat 2023-03-18-010332_csv_requests.csv | grep -E '^id|^[0-9]+,[^,]*redbull' > caido_redbull.csv
xnLinkFinder -i caido_redbull.csv

注意:xnLinkFinder假设如果用-i传递的文件的第一行格式为id,host,method,那么你正在尝试处理一个Caido导出的CSV文件。

从Waymore结果目录查找链接

waymore工具可用于从各种第三方API获取URL,并从archive.org(Wayback Machine)下载存档的响应。将waymore结果目录传递给xnLinKFinder将搜索存档响应的内容,也会请求waymore.txt中的URL以及index.txt中的存档URL,并从这些响应中获取更多链接。

xnLinkFinder -i ~/Tools/waymore/results/target.com

注意:它作为普通目录传递,但xnLinkFinder会确定它是waymore结果目录并相应处理。这依赖于URL文件默认命名为waymore.txt,并且该文件与存档文件在同一目录中(默认情况下就是这样)。

管道到其他工具

你可以将xnLinkFinder管道到其他工具。任何错误都会发送到stderr,发现的任何链接都会发送到stdout。输出文件仍然会创建,除了链接被管道到下一个程序。然而,潜在的参数不会被管道到下一个程序,但它们仍然会写入文件。例如:

xnLinkFinder -i redbull.com -sp https://redbull.com -sf rebbull.* -d 3 | unfurl keys | sort -u

您也可以通过stdin而不是-i传递输入。

cat redbull_subs.txt | xnLinkFinder -sp https://redbull.com -sf rebbull.* -d 3

注意:您不能通过管道传入Burp、ZAP或Caido文件,这些必须使用-i传递。

建议和注意事项

  • 始终使用域名前缀参数-sp。这可以是一个域名,也可以是包含多个域名的文件。 以下是使用的格式示例(不应包含路径,也不使用通配符。schema是可选的,但默认为http):
    http://www.target.com
    https://target-payments.com
    https://static.target-cdn.com
    
    如果找到没有域名的链接,例如/path/to/example.js,那么传递-sp http://www.target.com将会输出http://www.target.com/path/to/example.js,如果深度(-d)>1,则可以向该URL发出请求以搜索更多链接。如果使用-sp传递了一个域名文件,则输出将包括每个域名后跟/path/to/example.js,从而增加找到更多链接的机会。
  • 如果您使用-sp但仍然希望在输出中额外返回原始链接/path/to/example.js(不带域名),则传递参数-spo
  • 始终使用域名过滤参数-sf。这将确保在输出中只返回相关域名,更重要的是,如果深度(-d)>1,则不会搜索超出范围的目标链接或参数。这可以是一个域名,也可以是包含多个域名的文件。以下是使用的格式示例(不应包含schema或路径):
    target.*
    target-payments.com
    static.target-cdn.com
    
    这仅用于过滤链接的域名。
  • 如果您想以任何方式过滤最终输出,请使用-ra。建议始终使用https://regex101.com/ 检查您的正则表达式是否会达到预期效果。
  • 使用-v选项可以更好地了解工具正在做什么。
  • 如果遇到问题,请使用-vv选项,它可能会显示正在发生的错误,这些错误可能可以解决,或者您可以在github上提出问题。
  • 在单引号中传递cookies(-c)、headers(-H)和正则表达式(-ra)值,例如-ra '/api/v[0-9]\.[0-9]\*'
  • 设置-o选项为Links指定特定的输出文件名,而不是默认的output.txt。如果您计划运行大深度的搜索,请先使用2和-v选项来检查返回的内容。然后您可以增加深度,新的输出将附加到现有文件中,除非您传递-ow
  • 设置-op选项为潜在参数指定特定的输出文件名,而不是默认的parameters.txt。任何输出都将附加到现有文件中,除非您传递-ow
  • 如果使用高深度(-d),要警惕一些网站使用动态链接,因此会不断找到新的链接。如果没有找到新链接,xnLinkFinder将停止搜索。还应该考虑提供停止标志(s429s403sTOsCE)。
  • 如果您发现大量链接,特别是如果深度(-d值)很高,并且资源有限,程序将在达到内存阈值(-m)值时停止,并在被终止之前优雅地结束,保留完整数据。
  • 如果您决定在运行过程中取消xnLinkFinder(使用Ctrl-C),请耐心等待,任何收集的数据都将在优雅结束之前保存。
  • 使用-orig选项将显示找到链接的URL。这可能意味着如果在多个来源找到相同的链接,输出中会有重复的链接,但它会在方括号中附加原始URL。
  • 在发出请求时,xnLinkFinder将使用当前组中的随机User-Agent,默认为desktop(除非使用了-uc/--user-agent-custom参数)。如果您有一个目标可能对不同的用户代理组有不同的链接,那么指定-u desktop mobile(用空格分隔)。mobile用户代理选项是mobile-applemobile-androidmobile-windows的组合。可能的值有desktopmobileset-top-boxesgame-console
  • -i设置为目录时,将搜索该目录根目录中文件的内容以查找链接。不搜索子目录中的文件。任何超过-mfs设置大小(默认:500 MB)的文件都将被跳过。
  • 使用-replay-proxy选项时,有时请求可能需要更长时间。如果您开始看到更多Request Timeout错误(如果使用-v-vv选项,您会看到错误),那么考虑使用-t来提高超时限制。
  • 如果您知道目标只有ASCII字符的链接和参数,那么考虑传递-ascii-only。这可以消除有时从二进制数据返回的一些误报。
  • 如果您传递一个waymore结果目录,建议传递-d/--depth参数来搜索从URL请求中找到的任何额外链接,如果您认为可能找到不同的内容,还可以传递-u/--user-agent,例如-u desktop mobile
  • 始终传递-owl/--output-wordlist文件名以保存目标特定的单词列表。这个列表在模糊测试目标时非常有用。
  • 目标特定单词列表的单词来自以下来源(任何3个字符或更多),但也由其他单词列表参数决定(请参阅上面的使用部分):
    • 满足某些条件的所有响应:
      • 只搜索YML配置wordsContentTypes部分中指定的内容类型的响应。默认值是text/htmlapplication/xmlapplication/jsontext/plain
      • 来自<meta>标签内容的单词,其中:
        • Propertyog:titleog:description
        • Namedescriptionkeywordstwitter:titletwitter:description
      • HTML注释中的单词
      • <img>标签的alt属性中的单词
      • 页面其余内部HTML中的单词,不包括<style><script><link>标签
    • 从找到的链接中的路径单词中找到的单词。
    • 从响应和链接中找到的参数。
    • 所有有效单词也将尽可能添加单数/复数版本到单词列表中。
    • 如果原始单词有任何大写字符,也会添加小写版本
  • 如果目标特定单词列表的默认"停用词"不够好,请在YML配置文件中更改,或使用-swf/--stopwords-file选项提供额外的停用词。您可能想包括其他语言的停用词,这取决于目标。停用词在自然语言处理(NLP)中使用,可以在网上找到许多适合不同需求的停用词列表。

问题

如果您遇到任何问题,或有改进的想法,请随时在Github上提出问题。如果有问题,提供您运行的确切命令和问题的详细描述会很有帮助。如果可能,请使用-vv重现问题,并告诉我任何给出的错误消息。

待办事项

  • 我似乎已经完成了最初的所有待办事项!如果您认为需要添加任何内容,请告诉我🤘

输出示例

对域名进行主动链接查找:

...

管道输入和输出:

祝你好运,猎取精彩! 如果您真的喜欢这个工具(或任何其他工具),或者它们帮助您找到了一个很棒的赏金,请考虑给我买杯咖啡! ☕ (我需要咖啡因!)

🤘 /XNL-h4ck3r 在ko-fi.com给我买杯咖啡

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号