欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    (6.1)--09:第六章漏洞挖掘.pdf

    • 资源ID:57971239       资源大小:2.33MB        全文页数:56页
    • 资源格式: PDF        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    (6.1)--09:第六章漏洞挖掘.pdf

    第六章漏洞挖掘知识点一:静态安全检测方法知识点二:静态安全检测实践知识点三:动态检测方法知识点四:动态检测实践漏洞挖掘漏洞挖掘软件安全检测技术静态安全检测技术动态安全检测技术动静结合安全检测技术方法:词法分析、符号执行、数据流分析等适用于:源代码检测、可执行代码的检测不需要运行程序方法:模糊测试、智能模糊测试、动态污点跟踪需要运行程序挖漏洞前,先思考一下漏洞怎么产生的?如何挖漏洞?检测特征函数、关注输入和检查边界缓冲区溢出漏洞(1)部分函数不对数组边界条件和函数指针引用等进行边界检查-危险函数(2)程序员没有对边界进行检查整数溢出漏洞(1)整数存在大小范围、存储范围,(2)忽略边界检查,导致存储时溢出、运算时溢出等知识点一:静态安全检测方法静态安全检测技术定义:是针对未处于运行状态的软件所开展的安全分析测试技术。典型方法:词法分析、数据流分析、污点传播、符号执行、模型检查、定理证明等。优势:不需要构建代码运行环境,分析效率高,资源消耗低。缺点:存在较高的误报率。词法分析1词法分析通过对代码进行基于文本或字符标识的匹配分析对比,以查找符合特定特征和词法规则的危险函数、API或简单语句组合。优点:能够开展针对词法方面的快速检测,算法简单,检测性能较高缺点:只能进行表面的词法检测,而不能进行语义方面的深层次分析,因此可以检测的安全缺陷和漏洞较少,会出现较高的漏报和误报,尤其对于高危漏洞无法进行有效检测。词法分析检测工具包括Checkmarx和ITS4等数据流分析2数据流分析技术是通过分析软件代码中变量的取值变化和语句的执行情况,来分析数据处理逻辑和程序的控制流关系,从而分析软件代码的潜在安全缺陷。数据流分析首先将代码构造为抽象语法树或程序控制流图,接着追踪获取变量的变化信息,描述程序的运行行为,进而根据事先定义的安全规则检测出安全缺陷和漏洞。数据流分析适合检查因控制流信息非法操作而导致的安全问题,如内存访问越界、常数传播等。由于对于逻辑复杂的软件代码,其数据流复杂,并呈现多样性的特点,因而检测的准确率较低,误报率较高。但是该方法具有较高的可行性,并且可实现针对大规模代码的快速分析,因此广泛应用于商业的源代码安全性分析工具中。Coverity、Klockwork等商业工具均使用了该技术进行源代码安全检测污点传播分析3污点传播分析技术是通过分析代码中输入数据对程序执行路径的影响,以发现不可信的输入数据导致的程序执行异常。污点数据为需要进行标记分析的输入数据,污点传播首先对污点数据进行标记,并静态跟踪程序代码中污点数据的传播路径,发现使用污点数据的不安全执行路径,进而分析出由于非法数据的使用而引发的输入异常类漏洞。污点传播分析的核心是分析输入参数和执行路径之间的关系,它适用于由输入参数引发漏洞的检测。污点传播分析技术具有较高的分析准确率,然而针对大规模代码的分析,由于路径数量较多,因此其分析的性能会受到较大的影响。Pixy是使用该技术的典型软件工具。符号执行有代价小、效率高的优点,然而由于程序执行的可能路径随着程序规模的增大呈指数级增长,从而导致符号执行技术在分析输入和输出之间关系时,存在一个路径状态空间的爆炸问题,路径爆炸问题在现有计算能力的条件下很难解决。由于符号执行技术进行路径敏感的遍历式检测,当程序执行路径的数量超过约束求解工具的求解能力时,符号执行技术将难以分析。符号执行是指在不实际执行程序的前提下,将程序的输入表示成符号,根据程序的执行流程和输入参数的赋值变化,把程序的输出表示成包含这些符号的逻辑或算术表达式的一种技术。通过符号执行技术获得了程序输出和输入之间关系的算术表达式,可通过约束求解的方法获得能得出正常输出结果的输入值的范围。不能得到正常输出的输入值,或者输入值范围的边界点,则是触发程序输出异常结果的潜在输入点,是进行安全性检测的重要检测区域。符号执行4使用了符号执行进行源码检测的工具有EXE、SAGE、SMART以及KLEE等。模型检验对于路径和状态的分析过程可以实现全自动化;但是由于穷举所有状态,所以同样存在计算能力受限的问题。由于模型检验技术面临着状态空间爆炸的问题,在对大型复杂软件的漏洞挖掘方面仍处于探索阶段。此外,对时序、路径等属性,在边界处的近似处理难度也较大。模型检验是将程序的执行过程抽象为状态迁移的模型,采用状态迁移过程中安全属性的验证来判断程序的安全性质。模型检验技术首先将软件构造为状态机或者有向图等抽象模型,并使用模态/时序逻辑公式等形式化的表达式来描述安全属性,然后对模型进行遍历以验证软件的这些安全属性是否满足。模型检验5微软公司的SLAM项目是典型的代表性工具。通过查找符合特定特征和词法规则的危险函数、API或简单语句组合,来发现漏洞的挖掘方法是词法分析符号执行模型检验污点传播ABCD提交单选题1分知识点二:静态安全检测实践静态安全检测的应用源代码检测可执行文件检测由于源代码中的变量赋值明确,程序流程清晰,逻辑关系明了,采用静态安全检测技术容易深入进行数据流的分析,并且可以全面地考虑执行路径的信息,能够有效的发现漏洞。只能对可执行代码反汇编后得到的汇编代码进行检测,而汇编代码中多是寄存器之间数值的操作,没有明确的语义信息,上述静态安全检测技术往往分析效率低下,误报率较高。为了对可执行文件进行基于程序语义的安全检测,需要先对程序进行反汇编得到汇编代码,再将汇编代码转换为中间语言,进而对得到的部分语义信息进行缺陷和漏洞的检测。两种中间语言是二进制插装平台Binnavi中使用的REIL和动态插装平台Valgrind中使用的VEX。基于词法分析和逆向分析的可执行代码静态检测实践1核心思想:根据二进制可执行文件的格式特征,从二进制文件的头部、符号表以及调试信息中提取安全敏感信息(识别危险函数),来分析文件中是否存在安全缺陷。由Data-Rescue公司开发的IDAPro是一款备受业内人士青睐的的反汇编工具,通过使用IDA Pro提供的函数调用信息和代码引用信息,可以定位程序中调用strcpy、memcpy、sprintf等危险函数的代码位置,再通过分析传入的参数信息判断是否存在缓冲区溢出漏洞或者格式化字符串漏洞。对于findoverflow.exe,是通过vc6代码生成的Release版本:实验一:基于IDA Pro分析给定的可执行文件是否存在溢出漏洞#include#include void makeoverflow(char*b)char des5;strcpy(des,b);void main(int argc,char*argv)if(argc1)if(strstr(argv1,overflow)!=0)makeoverflow(argv1);elseprintf(usage:findoverflow XXXXXn);要分析可执行文件的溢出漏洞的话,基本遵循的步骤如下:第一步使用逆向分析工具,比如IDA,得到其反汇编后的执行代码;第二步定位敏感函数,也就是容易出现溢出的函数,比如memcpy、strcpy等;第三步判断栈空间大小、参数大小,分析是否存在溢出的可能。第一步:使用IDA打开所生成的exe文件通过该视图,可见,主要有一个main函数,在该函数中可能有跳转,调用了sub_401000函数、_strstr函数和_printf函数。此外,还定义了两个字符串常量,aUsageFindoverf,在其上点右键-Text view,可以看到:打开main函数汇编代码如下:的作用是什么?的作用是什么?是什么方式寻址?是什么方式寻址?为何要加为何要加4?之前为什么要将?之前为什么要将esi入栈?入栈?ESI已经是已经是argV的值,指针的值,指针+4,相当于,相当于argV1的地址的地址通常在IDA的反汇编中,arg_x表示函数参数x的位置,var_8表示局部变量的位置;是内存寻址,x+arg_x通常表达的就是arg_x的地址值。由release和debug生成的汇编代码是截然不同的,release版本非常简洁,执行效率优先,debug版本则基本严格按照语法结构,而且增加了很多方便调试的附加信息。注意在main函数当前的栈帧结构中,当前esp是处于栈顶位置,按照main函数调用的过程,应该是push envp;push argv;push argc;push address;call main。也就是说,argc表示的是第一个参数argc的位置为esp+argc。因为中间有一个返回地址address。第二步:定位敏感函数 一个输入参数arg_0,一个局部变量var_8。通过“lea edx,esp+8+var_8”和“mov edi,edx”可知,向目标寄存器存储了目标字符串的地址,为局部变量var_8;通过“mov edi,esp+10h+arg_0”以及后面的“mov esi,edi”,可知,将函数的输入参数作为源字符串。那么到底是否发生了溢出呢?在主函数中,Printf函数无任何格式化参数存在。因此,存在敏感函数的可能在于sub_401000函数中,打开该函数的代码如左图:通过“sub esp 8”可以知道栈大小为8,因此,函数的局部变量var_8的大小最大就是8。这样的话,可以得到sub_401000函数的代码结构大致如下:如果输入的字符串的长度大于8,就可能发生溢出了需要验证。为什么是8,二不是源代码里的5?打开DOS对话框,运行示例程序,如果不给任何参数的话,会提示:usage:findoverflow XXXXX如果输入参数,比如:findoverflow ssssssssss。却可以运行成功。这是为什么呢?回顾逆向的反汇编代码,可以知道:由于程序需要先判断是否包含子串overflow,因此,需要构造的输入需要满足这个条件。Bugscam是一个IDA工具的idc脚本的轻量级的漏洞分析工具,通过检测栈溢出漏洞的诸如strcpy,sprintf危险函数的位置,然后根据这些函数的参数,确定是否有缓冲区漏洞。实验二:使用Bugscam脚本来替代手工过程完成漏洞挖掘#include#include void vul(char*bu1)char a200;lstrcpy(a,bu1);printf(%s,a);return;void main()char b1024;memset(b,l,sizeof(b);vul(b);Bugscam是一个十年前写的对于strcpy等函数的自动化漏洞检测脚本,是一个压缩文件,在看雪安全论坛仍然可以下载,网址为:http:/ idc/bugscam/libaudit.idc修改为#include./libaudit.idc。在bugscam路径下可以看到libaudit.idc文件,将其中的#include bugscam/globalvar.idc修改为#include globalvar.idc。实验二:使用Bugscam脚本来替代手工过程完成漏洞挖掘2、启动ida,加载任意一个x86程序文件(本例为idc.exe),然后打开脚本文件run_analysis.idc,运行即可,等待分析完毕,最后的分析报告结果保存在reports目录中的html文件中。实验二:使用Bugscam脚本来替代手工过程完成漏洞挖掘其中,Severity是威胁等级,越高说明漏洞危险级别越高。本例的程序中,lstrcpyA函数存在溢出漏洞,地址401010处的代码可能将向目标203字节的区域写入1024字节的数据。知识点三:动态检测软件动态安全检测技术是针对运行中的软件程序,通过构造非正常的输入来检测软件运行时是否出现故障或崩溃等非正常的输出,并通过检测软件运行中的内部状态信息来验证或者检测软件缺陷的过程,它的分析对象是可执行代码。动态安全检测技术是通过实际运行发现问题,所以检测出的安全缺陷和漏洞准确率非常高,误报率很低。目前,软件的动态安全检测技术主要包括模糊测试、智能模糊测试和动态污点跟踪等,下面进行具体介绍。模糊测试11模糊测试(Fuzzing)是一种自动化或半自动化的安全漏洞检测技术,通过向目标软件输入大量的畸形数据并监测目标系统的异常来发现潜在的软件漏洞。2模糊测试属于黑盒测试的一种,它是一种有效的动态漏洞分析技术,黑客和安全技术人员使用该项技术已经发现了大量的未公开漏洞。3它的缺点是畸形数据的生成具有随机性,而随机性造成代码覆盖不充分导致了测试数据覆盖率不高。知名的模糊测试工具包括SPIKE、Peach等。模糊测试基本采用以下几个通用的步骤:由于所有可被利用的漏洞都是由于应用程序接受了用户输入的数据造成的,并且在处理输入数据时没有首先过滤非法数据或者进行校验确认。对模糊测试来说首要的问题是确定可能的输入数据,畸形输入数据的枚举对模糊测试至关重要。(1)确定测试对象和输入数据一旦确定了输入数据,接着就可以生成模糊测试用的畸形数据。根据目标程序及输入数据格式的不同,可相应选择不同的测试数据生成算法。(2)生成模糊测试数据模糊测试基本采用以下几个通用的步骤:检测模糊测试数据的过程首先要启动目标程序,然后把生成的测试数据输入到应用程序中进行处理。(3)检测模糊测试数据在模糊测试过程中,一个非常重要但却经常被忽视的步骤是对程序异常的监测。实时监测目标程序的运行,就能追踪到引发目标程序异常的源测试数据。(4)监测程序异常模糊测试基本采用以下几个通用的步骤:一旦监测到程序出现的异常,还需要进一步确定所发现的异常情况是否能被进一步利用。这个步骤不是模糊测试必需的步骤,只是检测这个异常对应的漏洞是否可以被利用。这个步骤一般由手工完成,需要分析人员具备深厚的漏洞挖掘和分析经验。确定测试对象生成测试数据发送数据进行检测保存数据和异常信息目标程序异常是否除了最后一步确定可利用性外,所有其它的四个阶段都是必须的。上述典型的fuzzing测试流程如左图所示。尽管模糊测试对安全缺陷和漏洞的检测能力很强,但并不是说它对被测软件都能发现所有的错误,原因就是它测试样本的生成方式具有随机性。所有类型的模糊测试技术智能模糊测试2模糊测试方法是应用最普遍的动态安全检测方法,但由于模糊测试数据的生成具有随机性,缺乏对程序的理解,测试的性能不高,并且难以保证一定的覆盖率。为了解决这个问题,引入了基于符号执行等可执行程序理解的方法,在实现程序理解的基础上,有针对性的设计测试数据的生成,从而实现了比传统的随机模糊测试更高的效率,这种结合了程序理解和模糊测试的方法,称为智能模糊测试(smart Fuzzing)技术。智能模糊测试具体的实现步骤如下(1)反汇编智能模糊测试的前提,是对可执行代码进行输入数据、控制流、执行路径之间相关关系的分析。为此,首先对可执行代码进行反汇编得到汇编代码,在汇编代码的基础上才能进行上述分析。(2)中间语言转换从汇编代码中直接获取程序运行的内部信息,工作量较大,为此,需要将汇编代码转换成中间语言,由于中间语言易于理解,所以为可执行代码的分析提供了一种有效的手段。(3)采用智能技术分析输入数据和执行路径的关系这一步是智能模糊测试的关键,它通过符号执行和约束求解技术、污点传播分析、执行路径遍历等技术手段,检测出可能产生漏洞的程序执行路径集合和输入数据集合。例如,利用符号执行技术在符号执行过程中记录下输入数据的传播过程和传播后的表达形式,并通过约束求解得到在漏洞触发时执行的路径与原始输入数据之间的联系,从而得到触发执行路径异常的输入数据。采用上述智能技术获得的输入数据集合进行安全检测,使后续的安全测试检测出安全缺陷和漏洞的机率大大增加。与传统的随机模糊测试技术相比,这些智能模糊测试技术的应用,由于了解了输入数据和执行路径之间的关系,因而生成的输入数据更有针对性,减少了大量无关测试数据的生成,提高了测试的效率。此外,在触发漏洞的同时,智能模糊测试技术包含了对漏洞成因的分析,极大减少了分析人员的工作量。(4)利用分析获得的输入数据集合,对执行路径集合进行测试在于以尽可能小的代价找出程序中最有可能产生漏洞的执行路径集合,从而避免了盲目地对程序进行全路径覆盖测试,使得漏洞分析更有针对性。智能模糊测试技术的提出,反映了软件安全性测试由模糊化测试向精确化测试转变的趋势。TaintScope是采用智能模糊测试技术的一款典型软件测试工具。智能模糊测试的核心思想动态污点分析3模糊测试技术侧重随机生成数据样本并测试,它不关注程序真实的执行过程。动态污点分析(dynamic taint analysis)技术则通过分析被测试程序内部指令真实的执行过程,追踪输入数据在程序内部的传递、处理流程,以检测输入数据是否存在涉及安全的敏感操作,从而分析出污点数据导致的潜在安全缺陷和漏洞。动态污点分析已经广泛应用于安全检测的众多领域。动态污点分析的基本思想是在程序的执行过程中跟踪用户的输入数据在寄存器和内存单元之间的传播过程,然后监控被测试程序对输入数据使用的相关信息。BitBlaze软件安全检测工具中应用了动态污点分析技术。关注所有来自程序外部的不可信污点数据在可执行程序中的传播过程,对所有的不可信污点数据都标记一个唯一的标签,然后跟踪这些标签在可执行程序中的传递过程。在跟踪这些标签在二进制程序中传播的过程时,不仅考虑二进制程序中的数据依赖关系,而且考虑二进制程序中不同变量之间的控制依赖关系。动态污点分析技术可以识别出输入文件中的哪些字节会影响二进制程序中涉及安全敏感操作的函数,诸如内存分配函数、字符串函数和其它的一些函数,从而发现可能触发安全缺陷和漏洞的污点数据。动态污点分析例如,建立在Pin基础之上的动态污点分析技术实现过程是这样的。Pin是由Intel公司开发、跨平台的动态二进制指令分析框架。动态污点分析首先利用Pin的插桩能力来挂钩操作系统的一些系统函数,当软件运行读入输入数据时,通过挂钩的系统函数获得输入数据在内存的位置和被读入内存中的具体输入数据,将它们作为被测试程序的污点源。然后,从被测试程序入口地址开始以基本块为单位读取并监测执行的指令,当监测到被测程序作为污点源的输入数据时,开始执行动态污点跟踪。每次被测程序加载新的指令块时,都会监测作为污点源的输入数据是否被事先挂钩的危险函数调用。如果有调用,则发现了输入函数导致的危险操作,输出记录以待后续测试。如果没有监测到调用,则继续加载新的指令块并执行相应监测操作。动态污点分析关注程序真实的执行过程,追踪输入输入数据在程序内部的传递、处理流程,以检测输入数据是否存在涉及安全的敏感操作的漏洞挖掘算法是模糊测试智能模糊测试污点传播分析动态污点分析ABCD提交单选题1分知识点四:动态检测实践 用来实现Fuzzing测试的工具叫做Fuzzer。成品的Fuzzer工具很多,许多是非常优秀的。Fuzzer根据测试类型可以分为很多类,常见的分类包括:文件型Fuzzer、网络型Fuzzer、接口型Fuzzer等。文件型Fuzzer主要针对有文件作为程序输入的情况下的Fuzzing。对于可读的文件,你可以使用改变其内容的具体数值来进行Fuzzing;对于未公布格式的,你可以按照一定规律修改文件格式来进行Fuzzing。比较知名的文件型Fuzzer工具是FileFuzz。实验一:使用FileFuzz工具进行文件模糊测试 配置:打开配置文件,配置测试的可执行文件为ppt-POWERPNT.EXE 配置好待测软件后,需要在C盘ppt2003目录下建立一个原始文档文件test.ppt,这里我们演示PowerPoint 2003曾出现的一个经典漏洞,MS06-028。该漏洞是2006年被挖掘出来的,对应版本为OFFICE 2003 SP2的最初版本11.6564.6568。新建一个空白的test.ppt文件(打开并建立空白页后保存,大小为9K),用分别以单、双字节的0f进行fuzz,能重现这个漏洞。实验一:使用FileFuzz工具进行文件模糊测试将FileFuzz配置成上图所示,其中:Target一栏是用来替换原始文档文件内容的数据,这里我们修改为0f、2个字节。Scope一栏是关于修改模式的选项,其中All Bytes是逐个字节修改;Range是对原始文档文件的某个范围进行修改;Depth是按照阶梯的形式来修改原始文档文件;Match则是使用替换指定字节的方式来生产测试文件。选择好相应的测试文件生成模式后,单击Create按钮,FileFuzz就会按照要求在栏指定的目录下生成测试文件,如下图所示。实验一:使用FileFuzz工具进行文件模糊测试生成待测文件后,我们可以进行Fuzz测试了。单击Execute按钮,切换到测试面板,并将Start File和Finish File修改为刚刚生成的测试文件的起始序号,如下图所示。实验一:使用FileFuzz工具进行文件模糊测试接下来单击Execute按钮,FileFuzz将会开始进行自动化的安全测试工作。一旦FileFuzz检测到被测试软件在处理某个测试文件时发生了错误,FileFuzz程序会马上在程序的最下方显示错误信息,如下图所示。实验一:使用FileFuzz工具进行文件模糊测试比如:被测试的目标程序对测试数据有一定的要求,而实际的Fuzzer不能灵活调整发送的测试数据;被测试的目标程序过于简单或者难,而现有的Fuzzer程序不能提供适合的测试。使用模糊测试工具在很多时候不能解决所有问题作为漏洞发掘者我们最好能学会编写一个Fuzzer,这样就可以随时随地的进行安全测试。而事实上,目前的多数漏洞挖掘过程,是需要自己手动编写Fuzzer来完成。要自己编写Fuzzer程序的话,需要遵循以下基本的步骤:#include#include void overflow(char*b)char des50;strcpy(des,b);void main(int argc,char*argv)if(argc1)overflow(argv1);else printf(usage:overflow XXXXXn);对于目标的可执行文件overflow.exe文件,是由如下程序生成的exe程序:手工模糊测试根据该exe文件要求提供一个输入字符串、对字符串格式无要求的事实,所编写的Fuzzer只需要构造不同长度的输入字符串就可以达到模糊测试的目的。如果手工测试的话,界面如下:void main(int argc,char*argv)char*testbuf=;char buf1024;memset(buf,0,1024);if(argc1)for(int i=20;i50;i=i+2)testbuf=new chari;memset(testbuf,c,i);memcpy(buf,testbuf,i);ShellExecute(NULL,open,argv1,buf,NULL,SW_NORMAL);delete testbuf;else printf(Fuzzing X n其中X为被测试目标程序所在路径);书写Fuzzer在明确了输入的要求和暴力测试的循环条件后,可以写出如下的代码:以上代码通过一个for循环(循环次数根据实际情况去设计)构造不同的字符串作为输入,通过“ShellExecute(NULL,open,argv1,buf,NULL,SW_NORMAL);“来实现对目标程序的模糊测试。上述Fuzzer的调用格式为:Fuzzing X。X表示目标程序。请完成上述实验并进行结果验证。延伸思考静态安全检测和动态安全检测的优缺点?效率&准确率动静结合的安全检测的核心思想是什么?

    注意事项

    本文((6.1)--09:第六章漏洞挖掘.pdf)为本站会员(刘静)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开