lab2
目录
1. phase_1
- 思路
0x08048ae0 <+0>: push %ebp
0x08048ae1 <+1>: mov %esp,%ebp
0x08048ae3 <+3>: sub $0x18,%esp
0x08048ae6 <+6>: movl $0x804a1f0,0x4(%esp)
0x08048aee <+14>: mov 0x8(%ebp),%eax
0x08048af1 <+17>: mov %eax,(%esp)
0x08048af4 <+20>: call 0x8049002 <strings_not_equal>
0x08048af9 <+25>: test %eax,%eax
0x08048afb <+27>: je 0x8048b02 <phase_1+34>
0x08048afd <+29>: call 0x8049225 <explode_bomb>
0x08048b02 <+34>: leave
0x08048b03 <+35>: ret
根据call 指令处string_not_equal 可知只有输入的字符串相同才可以拆掉炸弹,由<+6> 处的存放在data 段之中利用x/s 0x804a1f0 指令读取答案内容之后运行bomb 进行拆解密码为
There are rumors on the internets.
- 完成截图
2. phase_2
- 思路
0x08048b04 <+0>: push %ebp
0x08048b05 <+1>: mov %esp,%ebp
0x08048b07 <+3>: push %esi
0x08048b08 <+4>: push %ebx
0x08048b09 <+5>: sub $0x30,%esp
0x08048b0c <+8>: lea -0x20(%ebp),%eax
0x08048b0f <+11>: mov %eax,0x4(%esp)
0x08048b13 <+15>: mov 0x8(%ebp),%eax
0x08048b16 <+18>: mov %eax,(%esp)
0x08048b19 <+21>: call 0x8049267 <read_six_numbers>
0x08048b1e <+26>: cmpl $0x1,-0x20(%ebp)
0x08048b22 <+30>: je 0x8048b42 <phase_2+62>
0x08048b24 <+32>: call 0x8049225 <explode_bomb>
0x08048b29 <+37>: jmp 0x8048b42 <phase_2+62>
0x08048b2b <+39>: mov -0x4(%ebx),%eax
0x08048b2e <+42>: add %eax,%eax
0x08048b30 <+44>: cmp %eax,(%ebx)
0x08048b32 <+46>: je 0x8048b39 <phase_2+53>
0x08048b34 <+48>: call 0x8049225 <explode_bomb>
0x08048b39 <+53>: add $0x4,%ebx
0x08048b3c <+56>: cmp %esi,%ebx
0x08048b3e <+58>: jne 0x8048b2b <phase_2+39>
0x08048b40 <+60>: jmp 0x8048b4a <phase_2+70>
0x08048b42 <+62>: lea -0x1c(%ebp),%ebx
0x08048b45 <+65>: lea -0x8(%ebp),%esi
0x08048b48 <+68>: jmp 0x8048b2b <phase_2+39>
0x08048b4a <+70>: add $0x30,%esp
0x08048b4d <+73>: pop %ebx
0x08048b4e <+74>: pop %esi
0x08048b4f <+75>: pop %ebp
0x08048b50 <+76>: ret
首先我们看到<read_six_numbers>得知此炸弹是六个数字
第一步:
0x08048b1e <+26>: cmpl $0x1,-0x20(%ebp)
0x08048b22 <+30>: je 0x8048b42 <phase_2+62>
0x08048b24 <+32>: call 0x8049225 <explode_bomb>
比较相同的话跳转,不同的话炸弹爆炸,可知第一个数字为1
第二步:
0x08048b2b <+39>: mov -0x4(%ebx),%eax
0x08048b2e <+42>: add %eax,%eax
0x08048b30 <+44>: cmp %eax,(%ebx)
0x08048b32 <+46>: je 0x8048b39 <phase_2+53>
0x08048b34 <+48>: call 0x8049225 <explode_bomb>
这里去取出ebp-4 的值相加,也就是自己的两倍所以第二个数字为2
此时后面已经没有调用炸弹爆炸的函数了,所以猜测在此处存在循环每个都是前面数字的两倍
之后根据
0x08048b39 <+53>: add $0x4,%ebx
0x08048b3c <+56>: cmp %esi,%ebx
0x08048b3e <+58>: jne 0x8048b2b <phase_2+39>
ebx+4 的值和esi 进行比较不相等跳转到
0x08048b2b <+39>: mov -0x4(%ebx),%eax
而这句之前恰巧是乘2 前一个比较的语句,由此可见这是一个循环所以最后的密码为
1 2 4 8 16 32
- 完成截图
3. phase_3
- 思路
0x08048b51 <+0>: push %ebp
0x08048b52 <+1>: mov %esp,%ebp
0x08048b54 <+3>: sub $0x38,%esp
0x08048b57 <+6>: lea -0x10(%ebp),%eax
0x08048b5a <+9>: mov %eax,0x10(%esp)
0x08048b5e <+13>: lea -0x11(%ebp),%eax
0x08048b61 <+16>: mov %eax,0xc(%esp)
0x08048b65 <+20>: lea -0xc(%ebp),%eax
0x08048b68 <+23>: mov %eax,0x8(%esp)
0x08048b6c <+27>: movl $0x804a23a,0x4(%esp)
0x08048b74 <+35>: mov 0x8(%ebp),%eax
0x08048b77 <+38>: mov %eax,(%esp)
0x08048b7a <+41>: call 0x80487d0 <__isoc99_sscanf@plt>
0x08048b7f <+46>: cmp $0x2,%eax
0x08048b82 <+49>: jg 0x8048b89 <phase_3+56>
0x08048b84 <+51>: call 0x8049225 <explode_bomb>
0x08048b89 <+56>: cmpl $0x7,-0xc(%ebp)
0x08048b8d <+60>: ja 0x8048c82 <phase_3+305>
0x08048b93 <+66>: mov -0xc(%ebp),%eax
0x08048b96 <+69>: jmp *0x804a24c(,%eax,4)
0x08048b9d <+76>: mov $0x79,%eax
0x08048ba2 <+81>: cmpl $0x344,-0x10(%ebp)
0x08048ba9 <+88>: je 0x8048c8c <phase_3+315>
0x08048baf <+94>: call 0x8049225 <explode_bomb>
0x08048bb4 <+99>: mov $0x79,%eax
0x08048bb9 <+104>: jmp 0x8048c8c <phase_3+315>
0x08048bbe <+109>: mov $0x68,%eax
0x08048bc3 <+114>: cmpl $0x14a,-0x10(%ebp)
0x08048bca <+121>: je 0x8048c8c <phase_3+315>
0x08048bd0 <+127>: call 0x8049225 <explode_bomb>
0x08048bd5 <+132>: mov $0x68,%eax
0x08048bda <+137>: jmp 0x8048c8c <phase_3+315>
0x08048bdf <+142>: mov $0x66,%eax
0x08048be4 <+147>: cmpl $0xf5,-0x10(%ebp)
0x08048beb <+154>: je 0x8048c8c <phase_3+315>
0x08048bf1 <+160>: call 0x8049225 <explode_bomb>
0x08048bf6 <+165>: mov $0x66,%eax
0x08048bfb <+170>: jmp 0x8048c8c <phase_3+315>
0x08048c00 <+175>: mov $0x6a,%eax
0x08048c05 <+180>: cmpl $0x12c,-0x10(%ebp)
0x08048c0c <+187>: je 0x8048c8c <phase_3+315>
0x08048c0e <+189>: call 0x8049225 <explode_bomb>
0x08048c13 <+194>: mov $0x6a,%eax
0x08048c18 <+199>: jmp 0x8048c8c <phase_3+315>
0x08048c1a <+201>: mov $0x69,%eax
0x08048c1f <+206>: cmpl $0x1e3,-0x10(%ebp)
0x08048c26 <+213>: je 0x8048c8c <phase_3+315>
0x08048c28 <+215>: call 0x8049225 <explode_bomb>
0x08048c2d <+220>: mov $0x69,%eax
0x08048c32 <+225>: jmp 0x8048c8c <phase_3+315>
0x08048c34 <+227>: mov $0x63,%eax
0x08048c39 <+232>: cmpl $0x24a,-0x10(%ebp)
0x08048c40 <+239>: je 0x8048c8c <phase_3+315>
0x08048c42 <+241>: call 0x8049225 <explode_bomb>
0x08048c47 <+246>: mov $0x63,%eax
0x08048c4c <+251>: jmp 0x8048c8c <phase_3+315>
0x08048c4e <+253>: mov $0x6f,%eax
0x08048c53 <+258>: cmpl $0x31e,-0x10(%ebp)
0x08048c5a <+265>: je 0x8048c8c <phase_3+315>
0x08048c5c <+267>: call 0x8049225 <explode_bomb>
0x08048c61 <+272>: mov $0x6f,%eax
0x08048c66 <+277>: jmp 0x8048c8c <phase_3+315>
0x08048c68 <+279>: mov $0x73,%eax
0x08048c6d <+284>: cmpl $0x267,-0x10(%ebp)
0x08048c74 <+291>: je 0x8048c8c <phase_3+315>
0x08048c76 <+293>: call 0x8049225 <explode_bomb>
0x08048c7b <+298>: mov $0x73,%eax
0x08048c80 <+303>: jmp 0x8048c8c <phase_3+315>
0x08048c82 <+305>: call 0x8049225 <explode_bomb>
0x08048c87 <+310>: mov $0x61,%eax
0x08048c8c <+315>: cmp -0x11(%ebp),%al
0x08048c8f <+318>: je 0x8048c96 <phase_3+325>
0x08048c91 <+320>: call 0x8049225 <explode_bomb>
0x08048c96 <+325>: leave
0x08048c97 <+326>: ret
第一步我们注意到
0x08048b7f <+46>: cmp $0x2,%eax
0x08048b82 <+49>: jg 0x8048b89 <phase_3+56>
0x08048b84 <+51>: call 0x8049225 <explode_bomb>
比较,成功的话跳转,不成功爆炸,利用x/s 0x804a23a读取到密码类型%d %c %d即两个整数和一个字符
第二步,在0x08048b89 设置断点运行,输入15 b 256 试运行,结果断在Breakpoint 1, 0x08048b89 in phase_3 () ,查看0x08048b89 比较的为ebp-0xc 的数值,利用x/x $ebp-0xc 查看参数的值为0x0f ,之后跳转到phase3+302 利用x/i 指令查看汇编为
0x8048c82 <phase_3+305>: call 0x8049225 <explode_bomb>
炸弹爆炸所以第一个数要小于7 。
第三步
再次调试输入0 b 256 仍然断在了一样的位置但是输入比7 小所以继续运行
0x08048b93 <+66>: mov -0xc(%ebp),%eax 0x08048b96 <+69>: jmp *0x804a24c(,%eax,4)
此时eax 为0 ,利用x/10xg 0x804a42c 因为输入为0所以直接对应0x8048b9d
0x08048b9d <+76>: mov $0x79,%eax
ebp-0x10 对应256 应该和0x344 相等即836
如果输入为1 则跳转到
0x08048bbe <+109>: mov $0x68,%eax
即可推算出本题使用switch 语句
之后跳转到
0x08048c8c <+315>: cmp -0x11(%ebp),%al
此处&al 的数值为0x79 所以对应输入为0 y 836
因此密码为0 y 836
- 完成截图
4. phase_4
- 思路
0x08048cfa <+0>: push %ebp 0x08048cfb <+1>: mov %esp,%ebp 0x08048cfd <+3>: sub $0x28,%esp 0x08048d00 <+6>: lea -0x10(%ebp),%eax 0x08048d03 <+9>: mov %eax,0xc(%esp) 0x08048d07 <+13>: lea -0xc(%ebp),%eax 0x08048d0a <+16>: mov %eax,0x8(%esp) 0x08048d0e <+20>: movl $0x804a44d,0x4(%esp) 0x08048d16 <+28>: mov 0x8(%ebp),%eax 0x08048d19 <+31>: mov %eax,(%esp) 0x08048d1c <+34>: call 0x80487d0 <__isoc99_sscanf@plt> 0x08048d21 <+39>: cmp $0x2,%eax 0x08048d24 <+42>: jne 0x8048d2c <phase_4+50> 0x08048d26 <+44>: cmpl $0xe,-0xc(%ebp)//第一个数<=14 0x08048d2a <+48>: jbe 0x8048d31 <phase_4+55>//小于或相等 0x08048d2c <+50>: call 0x8049225 <explode_bomb> 0x08048d31 <+55>: movl $0xe,0x8(%esp) 0x08048d39 <+63>: movl $0x0,0x4(%esp) 0x08048d41 <+71>: mov -0xc(%ebp),%eax//断点2,x1 0x08048d44 <+74>: mov %eax,(%esp)//x1 0x08048d47 <+77>: call 0x8048c98 <func4> 0x08048d4c <+82>: cmp $0x2,%eax//两个数 0x08048d4f <+85>: jne 0x8048d57 <phase_4+93> 0x08048d51 <+87>: cmpl $0x2,-0x10(%ebp)//x2 0x08048d55 <+91>: je 0x8048d5c <phase_4+98>//相等 0x08048d57 <+93>: call 0x8049225 <explode_bomb> 0x08048d5c <+98>: leave 0x08048d5d <+99>: lea 0x0(%esi),%esi 0x08048d60 <+102>: ret
第一步我们观察到这条含有func4 函数的指令
由于不知道函数到底有多少行指令所以利用x/100i 0x8048c98 读取函数内部的指令,注意区分函数。同时函数里传入了两个参数
0x8048c98 <func4>: push %ebp 0x8048c99 <func4+1>: mov %esp,%ebp 0x8048c9b <func4+3>: push %esi 0x8048c9c <func4+4>: push %ebx 0x8048c9d <func4+5>: sub $0x10,%esp 0x8048ca0 <func4+8>: mov 0x8(%ebp),%edx 0x8048ca3 <func4+11>: mov 0xc(%ebp),%eax 0x8048ca6 <func4+14>: mov 0x10(%ebp),%ebx 0x8048ca9 <func4+17>: mov %ebx,%ecx 0x8048cab <func4+19>: sub %eax,%ecx 0x8048cad <func4+21>: mov %ecx,%esi 0x8048caf <func4+23>: shr $0x1f,%esi 0x8048cb2 <func4+26>: add %esi,%ecx 0x8048cb4 <func4+28>: sar %ecx 0x8048cb6 <func4+30>: add %eax,%ecx 0x8048cb8 <func4+32>: cmp %edx,%ecx 0x8048cba <func4+34>: jle 0x8048cd3 <func4+59> 0x8048cbc <func4+36>: sub $0x1,%ecx 0x8048cbf <func4+39>: mov %ecx,0x8(%esp) 0x8048cc3 <func4+43>: mov %eax,0x4(%esp) 0x8048cc7 <func4+47>: mov %edx,(%esp) 0x8048cca <func4+50>: call 0x8048c98 <func4> 0x8048ccf <func4+55>: add %eax,%eax 0x8048cd1 <func4+57>: jmp 0x8048cf3 <func4+91> 0x8048cd3 <func4+59>: mov $0x0,%eax 0x8048cd8 <func4+64>: cmp %edx,%ecx 0x8048cda <func4+66>: jge 0x8048cf3 <func4+91> 0x8048cdc <func4+68>: mov %ebx,0x8(%esp) 0x8048ce0 <func4+72>: add $0x1,%ecx 0x8048ce3 <func4+75>: mov %ecx,0x4(%esp) 0x8048ce7 <func4+79>: mov %edx,(%esp) 0x8048cea <func4+82>: call 0x8048c98 <func4> 0x8048cef <func4+87>: lea 0x1(%eax,%eax,1),%eax 0x8048cf3 <func4+91>: add $0x10,%esp 0x8048cf6 <func4+94>: pop %ebx 0x8048cf7 <func4+95>: pop %esi 0x8048cf8 <func4+96>: pop %ebp 0x8048cf9 <func4+97>: ret
第二步注意到
0x08048d0e <+20>: movl $0x804a44d,0x4(%esp)
使用x/s 0x804a44d 得到0x804a44d: "%d %d"可知密码为两个整数
有下面几行可知,第一个参数小于等于14 。
0x08048d26 <+44>: cmpl $0xe,-0xc(%ebp)//第一个数<=14 0x08048d2a <+48>: jbe 0x8048d31 <phase_4+55> 0x08048d2c <+50>: call 0x8049225 <explode_bomb>
继续由下面可知第二个参数等于2。
0x08048d51 <+87>: cmpl $0x2,-0x10(%ebp) 0x08048d55 <+91>: je 0x8048d5c <phase_4+98>//相等
推导出递归函数之后得到密码5 2
- 完成截图
5. phase_5
- 思路
0x08048d61 <+0>: push %ebp 0x08048d62 <+1>: mov %esp,%ebp 0x08048d64 <+3>: push %ebx 0x08048d65 <+4>: sub $0x24,%esp 0x08048d68 <+7>: mov 0x8(%ebp),%ebx 0x08048d6b <+10>: mov %ebx,(%esp) 0x08048d6e <+13>: call 0x8048fe0 <string_length> 0x08048d73 <+18>: cmp $0x6,%eax 0x08048d76 <+21>: je 0x8048dc2 <phase_5+97> 0x08048d78 <+23>: call 0x8049225 <explode_bomb> 0x08048d7d <+28>: lea 0x0(%esi),%esi 0x08048d80 <+31>: jmp 0x8048dc2 <phase_5+97> 0x08048d82 <+33>: movzbl (%ebx,%eax,1),%edx 0x08048d86 <+37>: and $0xf,%edx 0x08048d89 <+40>: movzbl 0x804a26c(%edx),%edx 0x08048d90 <+47>: mov %dl,-0xf(%ebp,%eax,1) 0x08048d94 <+51>: add $0x1,%eax 0x08048d97 <+54>: cmp $0x6,%eax 0x08048d9a <+57>: jne 0x8048d82 <phase_5+33> 0x08048d9c <+59>: movb $0x0,-0x9(%ebp) 0x08048da0 <+63>: movl $0x804a243,0x4(%esp) 0x08048da8 <+71>: lea -0xf(%ebp),%eax 0x08048dab <+74>: mov %eax,(%esp) 0x08048dae <+77>: call 0x8049002 <strings_not_equal> 0x08048db3 <+82>: test %eax,%eax 0x08048db5 <+84>: je 0x8048dc9 <phase_5+104> 0x08048db7 <+86>: call 0x8049225 <explode_bomb> 0x08048dbc <+91>: lea 0x0(%esi,%eiz,1),%esi 0x08048dc0 <+95>: jmp 0x8048dc9 <phase_5+104> 0x08048dc2 <+97>: mov $0x0,%eax 0x08048dc7 <+102>: jmp 0x8048d82 <phase_5+33> 0x08048dc9 <+104>: add $0x24,%esp 0x08048dcc <+107>: pop %ebx 0x08048dcd <+108>: pop %ebp 0x08048dce <+109>: ret
第一步由
0x08048d6e <+13>: call 0x8048fe0 <string_length> 0x08048d73 <+18>: cmp $0x6,%eax 0x08048d76 <+21>: je 0x8048dc2 <phase_5+97> 0x08048d78 <+23>: call 0x8049225 <explode_bomb>
得到要输入六个字符
第二步,设置断点
0x08048d82 <+33>: movzbl (%ebx,%eax,1),%edx
随便输入一个6 长度字符串进行调试
设置断点b *0x08048d82,测试123456 ,停在断点处。
ebx 中存放的是123456 继续执行读取ecx 寄存器为7
读取0x804a243 得到falmes
之后读取0x804a26c 得到maduiersnfotvbylSo you think you can stop the bomb
对应input[i]&0xf ,只会对应查表求出input[i] 即可,有不同的情况。
这里我采用io10e7
char input&0xf input[i]
f 9 i
l 15 o
a 1 1
m 0 0
e 5 e
s 7 7
- 完成截图
6. phase_6
- 思路
0x08048dcf <+0>: push %ebp 0x08048dd0 <+1>: mov %esp,%ebp 0x08048dd2 <+3>: push %esi 0x08048dd3 <+4>: push %ebx 0x08048dd4 <+5>: sub $0x40,%esp 0x08048dd7 <+8>: lea -0x20(%ebp),%eax 0x08048dda <+11>: mov %eax,0x4(%esp) 0x08048dde <+15>: mov 0x8(%ebp),%eax 0x08048de1 <+18>: mov %eax,(%esp) 0x08048de4 <+21>: call 0x8049267 <read_six_numbers> 0x08048de9 <+26>: mov $0x0,%esi 0x08048dee <+31>: mov -0x20(%ebp,%esi,4),%eax 0x08048df2 <+35>: sub $0x1,%eax 0x08048df5 <+38>: cmp $0x5,%eax 0x08048df8 <+41>: jbe 0x8048dff <phase_6+48> 0x08048dfa <+43>: call 0x8049225 <explode_bomb> 0x08048dff <+48>: add $0x1,%esi 0x08048e02 <+51>: cmp $0x6,%esi 0x08048e05 <+54>: jne 0x8048e0e <phase_6+63> 0x08048e07 <+56>: mov $0x0,%ebx 0x08048e0c <+61>: jmp 0x8048e46 <phase_6+119> 0x08048e0e <+63>: mov %esi,%ebx 0x08048e10 <+65>: mov -0x20(%ebp,%ebx,4),%eax 0x08048e14 <+69>: cmp %eax,-0x24(%ebp,%esi,4) 0x08048e18 <+73>: jne 0x8048e1f <phase_6+80> 0x08048e1a <+75>: call 0x8049225 <explode_bomb> 0x08048e1f <+80>: add $0x1,%ebx 0x08048e22 <+83>: cmp $0x5,%ebx 0x08048e25 <+86>: jle 0x8048e10 <phase_6+65> 0x08048e27 <+88>: jmp 0x8048dee <phase_6+31> 0x08048e29 <+90>: mov 0x8(%edx),%edx 0x08048e2c <+93>: add $0x1,%eax 0x08048e2f <+96>: cmp %ecx,%eax 0x08048e31 <+98>: jne 0x8048e29 <phase_6+90> 0x08048e33 <+100>: jmp 0x8048e3a <phase_6+107> 0x08048e35 <+102>: mov $0x804c154,%edx 0x08048e3a <+107>: mov %edx,-0x38(%ebp,%esi,4) 0x08048e3e <+111>: add $0x1,%ebx 0x08048e41 <+114>: cmp $0x6,%ebx 0x08048e44 <+117>: je 0x8048e5d <phase_6+142> 0x08048e46 <+119>: mov %ebx,%esi 0x08048e48 <+121>: mov -0x20(%ebp,%ebx,4),%ecx 0x08048e4c <+125>: cmp $0x1,%ecx 0x08048e4f <+128>: jle 0x8048e35 <phase_6+102> 0x08048e51 <+130>: mov $0x1,%eax 0x08048e56 <+135>: mov $0x804c154,%edx 0x08048e5b <+140>: jmp 0x8048e29 <phase_6+90> 0x08048e5d <+142>: mov -0x38(%ebp),%ebx 0x08048e60 <+145>: lea -0x34(%ebp),%eax 0x08048e63 <+148>: lea -0x20(%ebp),%esi 0x08048e66 <+151>: mov %ebx,%ecx 0x08048e68 <+153>: mov (%eax),%edx 0x08048e6a <+155>: mov %edx,0x8(%ecx) 0x08048e6d <+158>: add $0x4,%eax 0x08048e70 <+161>: cmp %esi,%eax 0x08048e72 <+163>: je 0x8048e78 <phase_6+169> 0x08048e74 <+165>: mov %edx,%ecx 0x08048e76 <+167>: jmp 0x8048e68 <phase_6+153> 0x08048e78 <+169>: movl $0x0,0x8(%edx) 0x08048e7f <+176>: mov $0x5,%esi 0x08048e84 <+181>: mov 0x8(%ebx),%eax 0x08048e87 <+184>: mov (%eax),%eax 0x08048e89 <+186>: cmp %eax,(%ebx) 0x08048e8b <+188>: jle 0x8048e92 <phase_6+195> 0x08048e8d <+190>: call 0x8049225 <explode_bomb> 0x08048e92 <+195>: mov 0x8(%ebx),%ebx 0x08048e95 <+198>: sub $0x1,%esi 0x08048e98 <+201>: jne 0x8048e84 <phase_6+181> 0x08048e9a <+203>: add $0x40,%esp 0x08048e9d <+206>: pop %ebx 0x08048e9e <+207>: pop %esi 0x08048e9f <+208>: pop %ebp 0x08048ea0 <+209>: ret
读取p/x *(0x804c154)@3 按顺序读取之后得到
第六个节点的尾指针为0 所以是降序排列1 5 6 3 2 4
1 799 1
2 183 5
3 374 6
4 173 3
5 739 2
6 417 4
- 完成截图
- 我觉得我的答案是对的但是不对,我不知道怎么做了所以空着
7. 最终结果
- bomblab 完成截图
- (可选)bomblab 隐藏关卡
8. 备注
助教真帅,拆炸弹真刺激,就是有点难。
第六个我觉得我对了。

浙公网安备 33010602011771号