拆炸弹实验报告_第1页
拆炸弹实验报告_第2页
拆炸弹实验报告_第3页
拆炸弹实验报告_第4页
拆炸弹实验报告_第5页
已阅读5页,还剩34页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、HUNAN UNIVERSITY课程实验报告课程 名称:计算机组成与结构实验名称:拆炸弹专业班级:姓名:学号:完成时间:(一) 实验目的:程序运行中有6 个关卡 ( 6 个 phase ) , 每个 phase 需要用户在终端上输入特定的字符或者数字才能通关,否则会引爆炸弹! 那么如何才能知道输入什么内容呢?这需要你使用gdb 工具反汇编出汇编代码,结合 c 语言文件找到每个关卡的入口函数。然后分析汇编代码,找到在每个phase程序段中,引导程序跳转到“ explode_bomb”程序段的地方, 并分析其成功跳转的条件, 以此为突破口寻找应该在命令行输入何种字符通关。(二)实验环境:虚拟机 u

2、buntu 系统下 32 位操作系统,终端, gdb 工具。(三)实验目的和操作:拆炸弹准备操作:查看给出的中的代码,得知控制检测密码正误的 6 个函数分别为:phase_1, phase_2, phase_3, phase_4, phase_5, phase_6。使用gbd工具对可执行文件bomb进行反汇编:打开bomb可执行文件所在的文件夹输入反汇编命令objdump -d bomb后,出现了大量汇编代码,在终端窗口可以看到很多行的汇编代码。也可以使用汇编指令objdump -d bomb > 将汇编代码输出到服务器上一个自动生成的叫的文件中。szm ubuntu:“/LAB 3B0

3、49fdf:83rerf5p$oxffrfrffr,%edxA049fb2i754jneB049faB <_d o_g lob al_cto r s_a u x* OxBo4yfb4t83£404add$0)C4(%e£pSbpupKebxE。49fb8:SdpopKe bp6049fb9:c3ret8349*53;99nopEfl49fbl);93nopDisasscnblyof secticri *fwi« rO0O49fbc Jfinis:S049fbc:53push8e49fbd:33CCsub$BkB Keape8KOQ 00QOcall8049f

4、CS <_ftnl+0x9>Sbpop虹bx£049ft6:81c32f 20SO GOaddSDk20",% bx6fl45fcc:eSSfE ffffcall白G489郭<_do_g Lobal_dtors_aux>B049fdl!83C498addBa49fd4:SbP°P%ebxB049fd5;c3retsznulbuntu:objdunp -d bonbA lttXt1sznubuntu:-/LAB3531开始拆炸弹:<phase_1>:的反汇编代码如下:0x08048f61 <+0>: push %ebp

5、0x08048f62 <+1>: mov %esp,%ebp0x08048f64 <+3>: sub $0x18,%esp0x804a15c,0x4(%esp)0x08048f67 <+6>: movl(gdb) x/s OxS04al5c 0x804al5c:,rWe have to stand with our North Korean allies.(gdb)结果为:(gdb) rStarting progran: /hone/szn/LAB3/bombWelcome to ny fiendish little bonb* You have 6 pha

6、ses with which to blow yourself up. Have a hice dmy!We have to stand with our North Korean alites 4Phase 1 defused. How about the next one?结果正确。<phase_2>反汇编代码如下:0x08048d7f <+21>:call0x804910b <read_six_numbers> 读取六0x08048d6a <+0>:push%ebp0x08048d6b <+1>:mov%esp,%ebp0x08

7、048d6d <+3>:push%esi0x08048d6e <+4>:push%ebx0x08048d6f<+5>:sub$0x30,%esp0x08048d72 <+8>:l ea-0x20(%ebp),%eax0x08048d75 <+11>:mov%eax,0x4(%esp)0x08048d79 <+15>:mov0x8(%ebp),%eax0x08048d7c <+18>:mov %eax,(%esp)个数字0x08048d84 <+26>:cmpl $0x0,-0x20(%ebp) 0

8、和第一个数字比较,不相等则爆炸。0x08048d88 <+30>:jne0x08048d8a <+32>:相等则跳过爆炸。0x08048d8e <+36>:je0x08048d90 <+38>:call0x08048d95 <+43>:lea0x08048d98 <+46>:lea 向后移一位的地址。0x08048d9b <+49>:mov 给 eax 。0x08048d9e <+52>:add位的数字。0x8048d90 <phase_2+38>cmpl $0x1,-0x1c(%ebp

9、) 1 和第二个数字比较,0x8048d95 <phase_2+43>0x80490d1 <explode_bomb>-0x18(%ebp),%ebx ebx-0x8(%ebp),%esi esi-0x4(%ebx),%eax ebx-0x8(%ebx),%eax eax0x08048da1 <+55>: cmp %eax,(%ebx)ebx 指向的数字。指向第三个数字。指向第六个数字再向前第一位的数字赋再加上 ebx 向前第二ebx 前两位的和与0x08048da3 <+57>:je0x8048daa <phase_2+64>相等则

10、跳过爆炸(explode_bomb)0x08048da5 <+59>: call 0x80490d1 <explode_bomb>0x08048daa <+64>: add $0x4,%ebx ebx 地址向后移动一位( 四个字节 ) 。0x08048dad <+67>:cmp %esi,%ebx 如果还未超过第六位数字,则跳转 0x8048d9 行。0x08048daf <+69>: jne 0x8048d9b <phase_2+49>0x08048db1 <+71>:add $0x30,%esp0x0804

11、8db4 <+74>:pop %ebx0x08048db5 <+75>:pop %esi0x08048db6 <+76>:pop %ebp0x08048db7 <+77>:ret从上面的代码分析可知:phase_2 的密码需要输入六位数字,并且第一个是0,第二个是1,然后执行到 0x8048d9b 这一行代码发现往下运行会出现一个循环,两条重要指令是 imull -0x4(%esi,%edx,4),%eax 和 cmp %eax,(%esi,%edx,4),其中eax 和edx在每次循环中加1直到寄存器中值超过 6,程序执行完毕。在循环中执行的是

12、一个数等于前两个数之和,寄存器ebx每次循环将向前第一位的数字赋给寄存器 eax。从而实现了计算前 6位的斐波那契数列的值为:0 1 1 2 3 5 0执行结果如下:Phdse 1 defused- How about the next one? 0 1 1 2 3 SThat's number 2. Keep going 1<phase_3>反汇编代码如下:0x08048ea1 <+0>:push%ebp0x08048ea2 <+1>:mov%esp,%ebp0x08048ea4 <+3>:sub$0x28,%esp0x08048ea7

13、 <+6>:l ea-0x10(%ebp),%eax0x08048eaa <+9>:mov%eax,0 xc(%esp)此处为第二个数字。0x08048eb1 <+16>:mov %eax,0x8(%esp)此处为第一个数字0x08048eae <+13>: lea -0xc(%ebp),%eax0x08048eb5 <+20>:movl $0x804a23e,0x4(%esp)用 x/s 0x804a23e 命令查看 $0x804a23e 为0x08048ebd <+28>:mov 0x8(%ebp),%eax %d %

14、d ,即要输入两个整数,上面已经指出。0x08048ec0 <+31>:mov %eax,(%esp)0x08048ec3 <+34>: call 0x8048840 <_isoc99_sscanfplt>0x08048ec8 <+39>:cmp $0x1,%eax以上两行即要求输入至少两组数据,否则引爆。0x08048ecb <+42>:0x08048ecd <+44>:jg 0x8048ed2 <phase_3+49>call 0x80490d1 <explode_bomb> 0x08048ed

15、2 <+49>:cmpl $0x7,-0xc(%ebp) 第一个数大于 7 引爆,即第一个数小于等于 7。0x08048ed6 <+53>:ja0x8048f43 <phase_3+162>0x08048ed8 <+55>:mov -0xc(%ebp),%eax0x08048edb<+58>:jmp*0x804a1a0(,%eax,4) 跳 转 至0x804a1a0+eax*4( 第一个数 ) 内数据所0x08048ee2 <+65>: mov $0x0,%eax指的行数。0x08048ee7 <+70>:jm

16、p0x8048f3c <phase_3+155>0x08048ee9 <+72>:mov0x08048eee <+77>: xchg0x08048ef0 <+79>:jmp0x08048ef2 <+81>:mov0x08048ef7 <+86>:jmp0x08048ef9 <+88>:mov0x08048efe <+93>:xchg0x08048f00 <+95>:jmp0x08048f02 <+97>:mov$0x0,%eax%ax,%ax0x8048f37 <pha

17、se_3+150>$0x0,%eax0x8048f32 <phase_3+145>$0x0,%eax%ax,%ax0x8048f2d <phase_3+140>$0x0,%eax0x08048f07 <+102>:jmp 0x8048f28 <phase_3+135>0x08048f09 <+104>:mov $0x0,%eax0x08048f0e <+109>:xchg %ax,%ax0x08048f10 <+111>:jmp 0x8048f23 <phase_3+130>$0x314,%e

18、ax当第一个数为0时跳转到此0x08048f12 <+113>:mov处,第二个数x=78800x08048f17 <+118>:jmp 0x8048f1 e<phase_3+125> 跳转至U 0x8048f1 e。0x08048f19 <+120>:mov0x08048f1 e <+125>:sub0x08048f23 <+130>:add0x08048f28 <+135>:sub0x08048f2d <+140>:add0x08048f32 <+145>:sub0x08048f37

19、 <+150>:add0x08048f3c <+155>:sub$OxO,%eax$0x35a,%eax x=x-858$0x2ef,%eax x=x+751$0x216,%eax x=x-534$0x216,%eax x=x+534$0x216,%eax x=x-534$0x216,%eax x=x+534$0x216,%eax x=x-5340x08048f51 <+176>:jg 0x8048f58 <phase_3+183>0x08048f41<+160>:jmp0x8048f4d <phase_3+172> 跳转

20、到0x8048f4d 行。0x08048f43 <+162>:call 0x80490d1 <explode_bomb>0x08048f48 <+167>:mov $OxO,%eax第一个数大于5引爆,即0x08048f4d <+172>:cmpl $0x5,-0xc(%ebp)第一个数小于等于5o0x08048f53 <+178>:cmp -0x10(%ebp),%eax第一个数是0 时,算得x=147,即第二个数0x08048f56 <+181>:je0x8048f5d <phase_3+188> 为 14

21、7。0x08048f58 <+183>:call 0x80490d1 <explode_bomb>0x08048f5d <+188>:leave0x08048f5e <+189>: xchg %ax,%ax0x08048f60 <+191>:ret从以上分析可知:再往下然后看到 jmp输入指令x/s 0x8049abb,得到0x8049abb:"%d %d",显示出应该输入两个数字。如果输入不满足两个数,则会引爆炸弹,并且第二个与第一个数的值相关。第一个值得范围为0-5 的整数,当第一个数输入的不是0-5 的整数,

22、也会引爆炸弹。输入的第一个数存入在寄存器eax 中,并且根据跳转指令jmp *0x804a1a0(,%eax,4) 选择将要跳转的位置, 执行相应的代码计算出第二个需要输入的值。1 )当第一个数输入的是0 , eax 寄存器中对应的值为0 ,则跳转到指令*0x804a1a0用指令查看*0x804a1a0的值为:(gdt>) p/x *0x8O4ala0$1 = ex8e48fl2(odb) I发现*0x804a1a0对应的值为0x8048f12,找到0x08048f12对应的代码执行发现第二个数计算得结果为: x = 0x(314-35a- 2ef - 216 +216216+216-2

23、16 + ) = 1472)当输入的第一个数是 1时,同理用指令查看* (0x804a1a0+4)的值为(gdb) p/x *(0?(8B4ala0+4)$2 = 0x8。48fl9则代码从0x08048f19对应的代码执行第二个数计算得结果为:x = 0x(-35a- 2ef - 216 +216-216+216-216 + ) = -6413)同理输入2,3,4,5 对应的第二个数字为:217,534,0,-534结果打印为:<phase_4>反汇编代码如下:0x08048e2e <+0>: push %ebp0x08048e2f <+1>: mov %

24、esp,%ebp0x08048e31 <+3>: sub $0x28,%esp0x08048e34 <+6>: l ea -0x10(%ebp),%eax0x08048e37 <+9>: mov %eax,0xc(%esp) 此处第二段数字。0x08048e3b <+13>:lea -0xc(%ebp),%eax0x08048e3e <+16>: mov %eax,0x8(%esp) 此处第一段数字。0x08048e42 <+20>: movl $0x804a23e,0x4(%esp)$0x804a23e 内为d %d即输

25、入两个整数。0x08048e4a <+28>: mov 0x8(%ebp),%eax0x08048e4d <+31>:mov %eax,(%esp)0x08048e50 <+34>: call 0x8048840 <_isoc99_sscanfplt> 0x08048e55 <+39>: cmp $0x2,%eax 以上两行要求之前输入的为两 个数据,否则引爆。0x08048e58 <+42>:jne 0x8048e66 <phase_4+56>0x08048e5a <+44>:mov -0xc(%

26、ebp),%eax0x08048e5d <+47>:test %eax,%eax 第一段数据大于等于0 ,否则引 爆。0x08048e5f <+49>: js 0x8048e66 <phase_4+56>0x08048e61 <+51>: cmp $0xe,%eax 第一段数据小于等于14 时跳过引爆。0x08048e64 <+54>:0x08048e66 <+56>:jle 0x8048e6b <phase_4+61>call 0x80490d1 <explode_bomb> 0x08048e6b

27、 <+61>:movl $0xe,0x8(%esp)0x08048e73 <+69>:movl $0x0,0x4(%esp)0x08048e7b <+77>:mov -0xc(%ebp),%eax0x08048e7e <+80>:mov %eax,(%esp)0x08048e81 <+83>:call0x8048b60 <func4>这几行为运行一个递归函数 func4 来确定第一0x08048e86 <+88>:cmp $0x1,%eax段数据的值。0x08048e89 <+91>:jne0x80

28、48e91 <phase_4+99>0x08048e8b <+93>:cmpl $0x1,-0x10(%ebp) 第二个数据等于 1 则跳过爆炸。0x08048e8f <+97>: je 0x8048e9d <phase_4+111>0x08048e91 <+99>: lea 0x0(%esi,%eiz,1),%esi0x08048e98 <+106>:call 0x80490d1 <explode_bomb>0x08048e9d <+111>:leave0x08048e9e <+112>

29、;:xchg %ax,%ax0x08048ea0 <+114>:ret以上对代码的分析可以看出,第二个数据确定为1。第一个数据范围为大于等于 0 ,小于14,并且由一个递归函数func4 又一次缩小了范围。但因为这个递归函数太过繁杂,而第一个数据范围又不大,直接将第一个数据从 0 尝试到13,得到了三个数字8 、 9 、 11 符合要求。因此密码有三组: 81, 9 1 , 11 1。<phase_5>反汇编代码如下:0x08048db8 <+0>: push %ebp0x08048db9 <+1>: mov %esp,%ebp0x08048db

30、b <+3>: push %esi0x08048dbc <+5>: push %ebx0x08048dbd <+7>: sub $0x20,%esp0x08048dc0 <+8>: l ea -0x10(%ebp),%eax0x08048dc3 <+11>:mov%eax,0xc(%esp)此处为第二个数。0x08048dc7 <+15>:lea-0xc(%ebp),%eax0x08048dca <+18>:mov%eax,0x8(%esp)此处为第一个数。0x08048dce <+22>: mov

31、l $0x804a23e,0x4(%esp)$0x804a23e 内为d %d即输入两个整数。0x08048dd6 <+30>:mov 0x8(%ebp),%eax0x08048dd9 <+33>:mov %eax,(%esp)0x08048ddc <+36>: call 0x8048840 <_isoc99_sscanfplt>0x08048de1 <+41>:cmp $0x1,%eax 以上两行保证输入数据多于 1 组,否则引爆。0x08048de4 <+44>:jg0x8048deb <phase_5+51&g

32、t;0x08048de6 <+46>:call 0x80490d1 <explode_bomb>0x08048deb <+51>:mov -0xc(%ebp),%eax按位与,即保留第一个数的0x08048dee <+54>: and $0xf,%eax后四位。0x08048df1 <+57>:mov %eax,-0xc(%ebp)0x08048df4 <+60>:cmp $0xf,%eax第一个数二进制后四位不能为(1111) 2,否则引爆。0x08048df7 <+63>:je 0x8048e22 <

33、phase_5+106>0x08048df9 <+65>:mov $0x0,%ecx0x08048dfe <+70>:mov $0x0,%edx0x08048e03 <+75>: mov $0x804a1c0,%ebx $0x804a1c0 指向的是一个数组,下面分析。0x08048e08 <+80>:add $0x1,%edx0x08048e0b <+83>:mov (%ebx,%eax,4),%eax0x08048e0e <+86>:add%eax,%ecx0x08048e10 <+88>:cmp$0

34、xf,%eax0x08048e13 <+91>:jne0x8048e08 <phase_5+80> 以上五行为一个for 循环语句 ,0x08048e15 <+93>:mov%eax,-0xc(%ebp)0x08048e18 <+96>: cmp $0xf,%edx上述的for循环要循环15次0x08048e1b <+99>:jne 0x8048e22 <phase_5+106>0x08048e1d <+101>:cmp %ecx,-0x10(%ebp) 确定第二个数的值,下面分析。0x08048e20 <

35、;+104>:je0x8048e27 <phase_5+111>0x08048e22 <+106>:call 0x80490d1 <explode_bomb>0x08048e27 <+111>:add $0x20,%esp0x08048e2a <+114>:pop %ebx0x08048e2b <+115>:pop %esi0x08048e2c <+116>:pop %ebp0x08048e2d <+117>:ret从代码的分析中可知:需要输入两个数,并且第一个数的后四位不能为1111,若为1

36、111则引爆炸弹。在程序中我们会遇到一个给定值0x804a1c0。我们可以查看其值为:(gdb) p *Ox804alc0016$8 = 10, 2, 14, 7, 8, 12,15, 11( 6, 4, 1, 13, 3, 9, 6, 50x08048c8a <+1>: mov %esp,%ebp16 个数。查看 16 个值,因为发现后面的循环中需要循环遍历使用其中最难懂的代码就是0x08048e0b <+83>:mov (%ebx,%eax,4),%eax这一行代码, ebx 对应的是 0x804a1c0 对应的首地址。这句话的意思解释为 C 语言的意思就是 n =

37、 an 。寄存器ecx保存的是计算得sum的总值。这段代码翻译成 c 语言类似于:sum=0;for(i=1;n=15;i+)n=an;sum+=n;其中第一次n 取的值应为用户输入的第一个数二进制下的后四位。之后每次都等于an , sum为除去第一次之外所有n取值的和。采用逆推的方法来求出n 第一次取的值。序号0123456789101112131415数1217811104113965组042513for循环当n为15时终止,因此最后一个 n为15,对应序号为上一个 n,即6。同理,可以得到,n从第一个到最后一个为:5 12 3 7 11 13 9 4 8 0 10 1 2 14 6 15

38、。sum=15*16/2-5=115。即用户输入的第二个数为115。用户输入第一个数二进制下的后四位为0101(即第一个n=5),由于第一位只要满足输入的数的后四位不为1111,第二个数为115即可,如:10 115,5 1 15 。<phase_6>反汇编代码如下:0x08048c89 <+0>: push %ebp0x08048c8c <+3>: push %edi0x08048c8d <+4>: push %esi0x08048c8e <+5>: push %ebx0x08048c8f <+6>: sub $0x5c

39、,%esp0x08048c92 <+9>: l ea -0x30(%ebp),%eax0x08048c95 <+12>: mov %eax,0x4(%esp)0x08048c99 <+16>: mov 0x8(%ebp),%eax0x08048c9c <+19>: mov %eax,(%esp)0x08048c9f <+22>: call 0x804910b <read_six_numbers>0x08048ca4 <+27>:mov $0x0,%esi0x08048ca9 <+32>:lea -0

40、x30(%ebp),%edi0x08048cac <+35>: mov (%edi,%esi,4),%eax 第 esi+1 个数给 eax 。开始外层 for 循环。0x08048caf <+38>: sub $0x1,%eax eax-0x08048cb2 <+41>: cmp $0x5,%eax eax 小于等于 5 跳过炸弹 , 即第esi+1 个数小于等于60x08048cb5 <+44>:jbe0x8048cbc <phase_6+51>0x08048cdb <+82>:add$0x4,%ebx ebx+=4

41、。0x08048cb7 <+46>:call0x80490d1 <explode_bomb>0x08048cbc <+51>:add$0x1,%esi esi+ 。0x08048cbf <+54>:cmp$0x6,%esi esi不等于 6 时不跳转。等于6 时跳转至 0x8048ce6 。0x08048cc2 <+57>:je 0x8048ce6 <phase_6+93>0x08048cc4 <+59>:lea (%edi,%esi,4),%ebx第 esi+1 个数给 ebx 。0x08048cc7 <

42、;+62>:mov%esi,-0x4c(%ebp)0x08048cca <+65>:mov-0x4(%edi,%esi,4),%eax 第 esi 个数给eax。开始内层for循环。0x08048cce <+69>:cmp(%ebx),%eax 若 eax 和 ebx 不相等则跳过炸弹。0x08048cd0 <+71>:jne0x8048cd7 <phase_6+78>0x08048cd2 <+73>:call0x80490d1 <explode_bomb>0x08048cd7 <+78>:addl$0x

43、1,-0x4c(%ebp)每次加 1。0x08048cde <+85>:cmpl $0x5,-0x4c(%ebp) 小于等于 5 时跳转, 即0x08048d01 <+120>:cmp $0x6,%ebx能循环 6-esi 次。0x08048ce2 <+89>:jle 0x8048cca <phase_6+65>0x08048ce4 <+91>:jmp 0x8048cac <phase_6+35>0x08048ce6 <+93>:mov$0x0,%ebx0x08048ceb <+98>:lea-0x

44、30(%ebp),%edi0x08048cee <+101>:jmp0x8048d06 <phase_6+125> 跳 转 到 第0x8048d06 行。0x08048cf0 <+103>: mov 0x8(%edx),%edx此处为两层for 循环语句 . 作用为通过用户0x08048cf3 <+106>: add $0x1,%eax输入的六个数字来调整链表中6 个元素的位置。0x08048cf6 <+109>: cmp %ecx,%eax0x08048cf8 <+111>: jne 0x8048cf0 <phas

45、e_6+103>0x08048cfa <+113>: mov %edx,-0x48(%ebp,%esi,4)0x08048cfe <+117>: add $0x1,%ebx0x08048d31 <+168>:mov -0x38(%ebp),%edx0x08048d06 <+125>:mov %ebx,%esi0x08048d08 <+127>:mov (%edi,%ebx,4),%ecx0x08048d0b <+130>:mov $0x804c0c4,%edx 0x804c0c4 查看可知是一个链表,图下附。0x08

46、048d10 <+135>:mov $0x1,%eax0x08048d15 <+140>:cmp $0x1,%ecx0x08048d18 <+143>:g0x8048cf0 <phase_6+103>0x08048d1a <+145>:mp 0x8048cfa <phase_6+113>0x08048d1c <+147>:mov -0x48(%ebp),%ebx 重新排列链表的值。0x08048d1f <+150>:mov -0x44(%ebp),%eax0x08048d22 <+153>

47、;:mov %eax,0x8(%ebx)0x08048d25 <+156>:mov -0x40(%ebp),%edx0x08048d28 <+159>:mov %edx,0x8(%eax)0x08048d2b <+162>:mov -0x3c(%ebp),%eax0x08048d34 <+171>:mov %edx,0x8(%eax)0x08048d37 <+174>:mov -0x34(%ebp),%eax0x08048d3a <+177>:mov %eax,0x8(%edx) 对链表的值进行检测。0x08048d3d

48、<+180>:movl $0x0,0x8(%eax)0x08048d44 <+187>:mov $0x0,%esi0x08048d49 <+192>:mov 0x8(%ebx),%eax0x08048d4c <+195>:mov (%ebx),%edx0x08048d4e <+197>:cmp (%eax),%edx0x08048d50 <+199>:jge 0x8048d57 <phase_6+206>0x08048d52 <+201>:call 0x80490d1 <explode_bomb>0x08048d57 <+206>:mov 0x8(%ebx),%ebx0x08048d5a <+209>:add $0x1,%esi0x08048d5d &l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论