本文摘自 看雪【iOS 安全】版主 zhuliang

iOS 设备(如:iPhone、iPad、iPod、AppleTV 等)中运行的程序,最终会被编译成机器语言在CPU中执行。

iOS 安全研究是建立在以ARM 为架构的汇编语言基础上的。

iOS 内核玩的就是 BSD 内核。

ARM 汇编:

1> ARM 体系结构与编程 杜春雷

2> ARM Architecture Reference Manual Extracts Including instruction set descriptions

高级语言:

1> Objective-C for iPhone Developers A Beginner's Guide (McGraw-Hill 2010.5)

2> Learning Objective C 2.0 (Addison Wesley 2010.07)

嵌入式硬件相关:

Openiboot 的源代码(https://github.com/iDroid-Project/openiBoot )

DDR、Nor Flash、Nand Flash、LCD、UART、I2C、SPI 等接线、时序、如何读写。在ARM 开发板上移植编译运行 uC/OS2 。

Unix 基本知识:

查找文件、建立、删除目录、用户管理等等。

iOS 下的调试工具是gdb,不管用户态还是内核态的。

参考资料:  gdb quick reference

iOS 设备买A4 以前的CPU,否则调试不了内核的。

iOS SDK 编程:

Beginning iOS5 Development Exploring the iOS SDK David Mark Jack Nutting Jeff LaMarche

Programming iOS4 Matt Neuburg

=========================    分 割 线       ==================================

1> iOS 系统启动过程

2> iOS 的固件结构概述和解压解密分析

3> Bootrom 的提取(dump)及所用的代码分析

4> iBoot 解密和加载内核功能的分析

5> iOS 应用程序的编写

6> iOS 应用程序的调试与分析

7> iOS 应用程序的注入与hook 实例

=========================    分 割 线       ==================================

1> 如何进行iOS 内核调试(见下面)。

2> 在Mac 上编译xnu for Mac 内核

学习Linux 内核是从编译Linux 内核开始的,由于iOS 内核和 Mac 上的OS X 内核具有相似性(均采用XNU 的内核),研究iOS 内核,可以从编译XNU 内核开始。编译好后可以通过对比Mac OS  X 的内核来学习iOS  内核。

3> limeraln 漏洞原理分析

4> 绿毒代码分析之 cyanide 代码分析

5> 绿毒代码分析之 syringe 代码分析

6> 如何调用aes gid 引擎获取iOS 固件的解密key

=========================    分 割 线       ==================================

公开的漏洞分析、越狱的实现原理、iOS 内核分析如系统调用、中断处理、内存管理等功能。

1> JailBreakMe3.0 漏洞(用户态)分析

2> JailBreakMe3.0 漏洞(内核态)分析

3> iOS 系统从用户态进入内核态及返回(系统调用)的分析

4> iOS 如何利用ARM 的 MMU 进行地址映射

5> 如何在内核态运行自定义代码(如hook)---- data 代码分析

6> 如何在内核态运行自定义代码(如hook)---- white 代码分析

=========================    分 割 线       ==================================

如何调试iOS内核

iOS是用XNU内核,XNU for mac的代码可以从苹果官方下载到,当然不是最新版的。XNU内核有既相互独立又相互交互的三个组件构成,这三个组件是:Mach、BSD、IOKit。
首先,是硬件与软件的准备。
硬件方面,一台越狱的设备是必需的,建议用iPhone4(注iPad2或iPhone4S由于采用的是苹果A5的cpu,它的bootrom目前还没有公开漏洞,不能用红雪设置引导参数,不能使用它来调试)。内核调试数据线,该数据线含有USB转串口的电路,可以参考文献1来自己焊接,本人制作好的调试线如下图,限于篇幅这里不对如何制作调试线展开讨论。一台电脑,可为台式机或笔记本,mac更佳。

软件方面,虚拟机VMware,mac操作系统比如Lion,XCode等。
其次,是环境的搭建。
Mac环境,由于iOS的内核调试要在mac操作系统平台下进行,所以首先要搭建mac环境,最好用真实的mac机,也可用虚拟机,本文为方便没有mac的朋友,以虚拟机为例进行讲述,用真实mac机的朋友可根据具体的情况随机应变。具体步骤如下,先在电脑上装虚拟机(如VMware)软件,然后在虚拟机里面装mac操作系统(比如Lion),装好mac系统后下载XCode并装上。如果觉得这样太麻烦的话,可直接从电驴下载装好Lion的虚拟机。
有了mac环境后,在mac操作系统里装好USB转串口芯片的驱动程序(可从http://www.ftdichip.com/Drivers/VCP.htm下载),装好驱动后就可用ls /dev/tty.usb*来看一下有没有把串口识别出来。识别出来后如下面的图所示。然后下载本文附带的SerialKDPProxy程序源代码SerialKDPProxy_m.rar(该源码是由Albert_liuwei从参考文献1提供的SerialKDPProxy修改而来,特此声明),并make一下,你懂的。将得到的SerialKDPProxy文件cp到/bin下,这样不用每次都要切换到这个目录下才能执行。

最后,搭建好了环境后就可以进行调试了,主要有三个步骤:
一是运行串口代理程序,用下面的命令行。
SerialKDPProxy /dev/tty.usbserial-A900c0xb
这里的tty.usbserial-A900c0xb要替换为在你的系统上具体的设备名,上文ls /dev/tty.usb*的结果。
二是用红雪设置引导参数。该步骤可以在物理主机Windows系统下面进行,因为命令行涉及到一个几百M的文件,复制到虚拟机里比较麻烦。可以在Win下用下面的命令行。
redsn0w.exe -i "D:\Apple\iPhone3,1_4.3.3_8J2_Restore.ipsw" -j -a "-v debug=0x09"
该命令输入完毕回车后,红雪会让你按它的提示进入dfu模式。进入dfu后稍等一下,会看到小菠萝人在手机屏幕上。看不到的话,可能是进入dfu模式出错。
接下来切换到mac环境工作,进入虚拟机环境之前要确认USB转串口的设备前点的钩已钩上。如下图:

三是用gdb调试ios内核。所用的命令行参数如下:

gdb -arch armv7 (gdb) target remote-kdp (gdb) attach 127.0.0.1
在win下面。串口从设备管理器里看出来是COM8.代理程序用这个命令行:./SerialKDPProxy.exe /dev/com8 
启动gdb的命令是 ./arm-apple-darwin-gdb.exe
其它的都是和se的ppt像一样。
至于具体怎么调试,熟悉linux下用gdb进行调试的朋友能相当熟练地调试,也可以参考本人的另一文章《iOS如何利用ARM的MMU进行地址映射》。

最后
感谢DarkMage(dm557),Windknown,Daniel,Albert_liuwei,cd-team及各位朋友!

参考文献:
1.  SysScan-Singapore-Targeting_The_IOS_Kernel.pdf(可输入google找到)
2.  http://www.cd-team.org/wp-content/uploads/2011/09/PWN你的iOS设备_New.ppt

=========================    分 割 线       ==================================

2012 年 6月 4日,苹果出示了一份文件,详细描述了iOS 内部安全规格。

从iOS设备的架构考虑,理解内建安全功能如何运作以提供一个安全的移动平台,这是有必要的。iPhone、iPad、iPod Touch建有多个安全层。低级的硬件和固件功能保护可以防止恶意软件和病毒,高级的OS功能可以确保个人信息、企业数据安全,防止未授权使用,协助阻止攻击。iOS安全模式在保护信息的同时,也支持移动使用、支持第三方程序、支持同步。系统大部分是基于产业标准安全设计原理开发的,许多时候,苹果还增加了设计,在不牺牲使用性的前提上强化安全。这份文件提供了安全技术的细节,也介绍了iOS平台内部功能的执行。

如果用户如苹果预期一样使用iPhone,从App Store获得程序。而程序商店的程序是经过审查的,它没有包括恶意代码。因此,恶意代码没法在任何一款设备上出现,也就没有必要使用反病毒软件了。

苹果不需要iOS反病毒程序,因为它没有给病毒留下空间(包括木马、恶意软件等),这些病毒没法进入系统。

在Android平台上曾出现过病毒,它的下载安全也比苹果低些。不过,如果要说苹果100%安全也不见得。它还忽略一点:并非所有程序都是从程序商店下载的,还有越狱机。

比起其它平台,iOS受到攻击的可能性小很多。但随着用户量增大,如果达10亿,“不太可能”就不一定代表“不会”了。

=========================    分 割 线       ==================================

2013-02-07 16:44

走进Evasi0n,越狱黑客如何拿到iOS权限

Evad3rs团队成员David Wang接受了福布斯的采访,为我们讲述了整个iOS6的破解历程。他指出这次破解iOS6至少了利用了5个不同的漏洞。国外许多媒体都用了这样一句话来形容他们的工作:incredible work(难以置信的工作)下面就给大家详细的分析Evad3rs如何一步步夺取iOS内核权限的。

苹果一直在控制着用户手中的iOS设备,你将一部iPhone购买回家,但是却发现很多事情你不能做主。你不能随便安装第三方应用,不能随意修改桌面设置。让人感觉,更像是从苹果租用硬件。

2013年2月4日,一个自称是evad3rs的黑客团队,在其网站evasi0n上,第一次提供了iOS6的完美越狱,它为iPhone5、iPad3、iPad mini和其他iOS设备提供了目前最先进的iOS6.1完美越狱程序,允许用户从他们的手机、平板电脑中解除掉苹果加持的各种限制机制。截止目前evasi0n完美越狱工具已有200万iOS用户下载,这足以看出全球用户对于越狱的热情。用户可以安装自定义主题,安装第三方输入法,安装Cydia商店中的MyWi热点工具。可以说,这次的完美越狱工具的开发几乎是个奇迹,因为这次的iOS系统破解远比以往任何时候都要困难。

难以置信的工作

在iOS6 GM发布之后,就有不少越狱团队第一时间尝试进行越狱。此后iOS6正式版放出,绿毒团队的领头人p0sixninja标示,iOS6的防护级别高的令人不可思议,其操作系统的严密性超过了以往任何一款OS。因此越狱的难度是前所未有的。但最后他还是放口:黑客不会被任何框架所束缚。

小插曲:去年12月,随着全球都在“欢度”世界末日的到来。越狱黑客Dream JB表示他会在12月22日放出iOS 6的完美越狱工具。但是到了22日那天,大家才发现他只是和我们开了一个末日玩笑。

越狱梦之队:evad3rs

为了达成iOS6完美越狱这个任务,1月25日(大洪水退去人们下船的日子),原Dev Team成员、越狱黑客pod2g在Twitter上宣布:与红雪团队的MuscleNerd(肌肉男)、Chronic-Dev(绿毒)团队的pimskeks、planetbeing组成了一个新团队——evad3rs。(@pimskeks @planetbeing @pod2g @MuscleNerd)

随即evasi0n.com官网上线。每一天,整个团队都会向外界公布越狱的最新进度:68%、85%、91%……整个iOS6完美越狱工具的开发过程仅用了10天时间。国外许多媒体都用了这样一句话来形容他们的工作:incredible work(难以置信的工作)

@planetbeing真名是Yiduo David Wang,来自俄勒冈的波特兰,是Evad3rs四人团队的一员。他近日接受了福布斯的采访,为我们讲述了整个iOS6的破解历程。他指出这次破解iOS6至少了利用了5个不同的漏洞。据悉,这次他们使用的手法,比Stuxnet更黑!(Stuxnet蠕虫是摧毁伊朗和浓缩离心机设施的那个著名病毒)下面宁哥就给大家详细的分析Evad3rs如何一步步夺取内核权限。

如何破解iOS 6

最初,Evad3rs使用libimobiledevice来代替iTunes,连接到电脑上。它与iTunes一样使用了相同的设备连接协议。libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。由于苹果官方并不支持Linux系统,但是Linux上的高手绝对不能忍受因为要连接iOS设备就换用操作系统这个事儿。因此就有人逆向出iOS设备与Windows/Mac Host接口的通讯协议,最终成就了横跨三大桌面平台的非官方版本USB接口library。经常用Linux系统的人一定对libimobiledevice不陌生,但是许多Windows和Mac用户也许就不知道了。事实上,它同iTools一样,都是可以替代iTunes,进行iOS设备管理的工具。因为源码是开放的,可以自行编译,所以对很多开发者而言可以说更为实用。

话说回来Evasi0n利用了iOS系统的一个备份bug获得了几项原来无权访问的设置。如,设置设备时区的权限。正是拿到了这个时区设置文件的权限,Evasi0n在该文件中可以插入一条,Symbolic Link符号连接(又称软连接)。这样就将操作系统中的访问求情转移到了其他指定的位置,由此也就能将越狱程序通过Symbolic Link连接到时区设置文件上。

感谢Symbolic Link这个好东西

Symbolic Link相当于Win下的"快捷方式"。Unix文件系统提供了一种将不同文件链接至同一个文件的机制,我们称这种机制为链接。它可以使得单个程序对同一文件使用不同的名字。这样的好处是文件系统只存在一个文件的副本,系统简单地通过在目录中建立一个新的登记项来实现这种连接。软连接有自己的inode,并在磁盘上有一小片空间存放路径名。因此,软链接能够跨文件系统,也可以和目录链接。另外,软链接可以对一个不存在的文件名进行链接,但直到这个名字对应的文件被创建后,才能打开其链接。

David Wang 把它比喻成“莫斯科红色专线”。通过Symbolic Link,可以将连接转到某个特定的socket中,让不同程序之间可以互通信息。整个iOS系统中的Launch Daemon后台进程的启动程序都存放在"/System/Library/LaunchDaemon"目录下, 就是那些".plist"文件。这些程序会在设备启动时率先启动,所以他们具备root权限,可以启动其他应用。Evasi0n修改了Launch Daemon的socket,这就意味着,当iOS设备进行备份时,就会自动的让所有程序和文件都能访问时区设置文件,感谢Symbolic Link这个好东西,让所有程序可以连接Launch Daemon。

这里需要提一句为什么苹果的启动服务叫做“Launch Daemon”?从Mac OS 10.4开始,苹果就采用Launch来管理整个操作系统的services和processes了。传统的Unix会使用“/etc/rc.*”或者其他机制来管理要启动的startup services,而此后在Mac OS X则使用Launch来管理,其startup services被叫做Launch Daemon和Launch Agents。前者是开机时载入,而后者是用户登录时载入的。

如何绕过Code-signing

在iOS中,还有另一个安全保障——Code-signing。它能够阻止流氓应用访问Launch。在iOS设备上运行的代码都需要通过苹果的审核,并附带上有效的签名。一般开发者开发的程序,在正式发布到App Store之前是需要使用苹果颁发的证书进行签名的之后,再由苹果进行审核。审核成功之后,苹果也会对程序进行一次签名。当iPhone或者iPod Touch从AppStore下载安装程序的时候会调用系统进程INSTALLD(mobileinstalltion)对应用程序进行证书校验。所以一般需要安装破解软件时,都需要把此文件替换成破解版本。

如果你的MobileInstalltion没有破解的话,那么在安装或者运行程序的时候需要对你的数字证书进行检测,如果发现没有签名或者签名不对,就会自动kill掉程序。那么在这种情形下,我们可以伪造签名(当然无法通过AppStore的审核), 骗过MobileInstalltion ,使得可以正常使用。

Evasi0n构建了一枚没有代码的应用,当用户点击这个应用的时候,它就会利用Unix的“Shebang”命令,调用一个已经签名的应用代码,通过Code-signing的审查。此后,它就可以再调用上文提到的Launch执行root级的命令了。Evad3rs要通过这种方式,来对RFS(root文件系统)的只读权限使用“remount”命令变为可写。这就是为什么,我们在越狱时,要运行一次下面这个LOGO的应用。

什么是Shebang

在计算机科学中,Shebang(也称为Hashbang)是一个由井号和叹号构成的字符串行(#!),其出现在文本文件的第一行的前两个字符。 在文件中存在Shebang的情况下,类Unix操作系统的程序载入器会分析Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有Shebang的文件路径作为该解释器的参数。Shebang这一语法特性由#!开头,即井号和叹号。 在开头字符之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于调用解释器。 在直接调用脚本时,调用者会利用Shebang提供的信息调用相应的解释器,从而使得脚本文件的调用方式与普通的可执行文件类似。

修改launchd.conf文件

现在RFS已经可写了,Evasi0n接下来就是先修改launchd.conf文件,当修改了launch配置文件之后,前面的工作就可以保存下来了。这样每次iOS设备重启的时候,就不必再连上USB进行越狱操作了。之前,很多iOS系统不完美越狱就是因为没有拿到修改launchd.conf的权限。造成每次重新开机都要再越狱一次,很麻烦。

破解AMFID防护机制

对于黑客来说,没有夺取到kernel(内核)权限,都不算作真正把系统征服。在iOS的系统内核中,还有一层叫做AMFID(Apple Mobile File Integrity Daemon)的防护机制,它是用来监测移动文件完整性的守护进程。AMFID会校验代码签名,防止流氓程序运行。Evasi0n利用launchd.conf文件,为AMFID加载一个library,让每次AMFID在做校验的时候,都会返回一个“approved”的肯定回答。David Wang在福布斯记者的采访中,并没有给出具体的破解方法,只是留下一句话:苹果自己应该明白这一点。

异常向量,萃取内核地址

除了内核级的应用签名之外,苹果为了防止黑客在内核级的内存中随意修改,iOS还有最后一道那就是ASLR(Address Space Layout Randomization)随机地址空间布局。当系统加载时,ASLR都会将他们随机分配到内存的不同位置,防止某些内容总是存储在内存的特定部分,让黑客有规律可寻。

聪明的Evad3rs团队,使用了ARM exception vector(异常处理向量)。exception vector其实经常会用到,处理器异常、出错时(其实不完全是出错),它就会抓来这个vector找相应的处理函数。例如,遇到看不懂的指令,它就会抓0x4地址指令。也就是“ldr pc, _undefined_instruction”,接着就会跳到undefined instruction的函数去处理。当程序出现异常时,ARM异常向量就会给出崩溃的内存地址,黑客拿到足够多的信息,就可以找到内核在内存的分布范围,这样整个内核的内容也就被抓到了。

夺取内核控制权

搞定ASLR之后,Evad3rs利用iOS连接USB的一个漏洞,把内核内存的某个地址传给一个应用,而应用返回来的内容就可以用来改写这部分内存地址。由此Evad3rs就可以修改内核任何部分的内容了。据Wang所说,当你拿到了内核的权限时,整个系统就没有任何“安全机制”能阻止我们了,我们赢了!

2013-2-7 最新更新:

Pod2g在Twitter上称,evasi0n网站目前独立IP访问量超过500万,PV突破了4000万,而在整个用户群中,中国用户的数量最大。有近300万的中国用户访问了evasi0n网站,占总访问量的20.12%。美国用户比例为16.88%,将近250万用户。其次是法国、德国、意大利、英国、俄罗斯等地区的用户。

=====================================================================

2013-03-20 09:53

苹果发布iOS 6.1.3 封杀evasi0n越狱所用漏洞

今日凌晨,苹果正式发布了iOS 6.1.3,对锁屏漏洞进行了修复、升级了地图、同时封堵了evasi0n越狱工具所用的部分漏洞。

今日凌晨,苹果正式发布了iOS 6.1.3,对几周前爆出的锁屏漏洞进行了修复。本次发布的iOS 6.1.3主要是为了改善日本地区的地图服务,同时还对越狱所需的漏洞进行了封堵。

之前Evad3rs曾表示iOS 6.1.3 至少会修复一个evasi0n 越狱所使用的漏洞,正式版发布之后,已确认修复了越狱所用的6个中的4个,并将漏洞发现“归功于”Evad3rs。

=========================    分 割 线       ==================================

iOS 是由苹果公司开发的手持设备操作系统。

苹果公司最早于 2007 年 1月 9日 的Macworld 大会上公布这个系统,最初是设计给iPhone 使用的,后来陆续套用到iPod touch、iPad 以及 Apple TV 等苹果产品上。

iOS 与苹果的Mac OS X 操作系统一样,它也是以Darwin 为基础的,因此同样属于类Unix 的商品操作系统。原来这个系统名为iPhone OS,直到 2010 年 6月 7 日 WWDC 大会上宣布改名为iOS。

截止至2011年11月,根据Canalys的数据显示,iOS已经占据了全球智能手机系统市场份额的30%,在美国的市场占有率为43%。

Objective-C是iOS的开发语言。Objective-C是C语言的升级版。

学时:4个月,共258学时(其中理论学时:59,实践学时:70,实战实操学时:120)

【iOS 安全相关】相关推荐

  1. iOS安全相关学习资料

    https://github.com/zhengmin1989/iOS_ICE_AND_FIRE  (冰与火代码) http://weibo.com/zhengmin1989?is_hot=1 (蒸米 ...

  2. C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出

    差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...

  3. IOS/macOS安全相关资料的收集

    • [PDF] https://objectivebythesea.com/v2/talks/OBTS_v2_Beer.pdf: https://objectivebythesea.com/v2/ta ...

  4. iOS开发经验总结,我的2019进阶之路!

    4G改变了生活,抓住机会的人已经在这个社会有了立足之地,马上迎来5G的时代,你做好准备了吗!对于即将迎来的5G时代,无疑会是音视频的又一个高潮!那么作为程序员的我们,应该怎么样去迎接它呢~~ 改变带来 ...

  5. iOS开发知识点总结

    main文件做了这几件事:1. 创建当前的应用程序2. 根据4个参数的最后为应用程序设置代理类(默认情况下是AppDelegate)3. 将appDelegate 和 应用程序 建立关联(指定代理,) ...

  6. WWDC 2018:iOS 12 通知的新特性

    Session 710 : What's New in User Notifications iOS 10 新增的 UserNotifications.framework 用一套易用的接口替换了之前版 ...

  7. iOS之深入解析操作系统的架构

    一.iOS 系统架构层次 在 iOS 中,框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像.声音文件等其它资源.共享资源库定义应用程序可以调用的函数和方法. iOS 为 ...

  8. 《iOS应用逆向工程(第2版)》高清电子书 PDF

    内容简介  · · · · · · 你是否曾因应用上线的第一天即遭破解而无奈苦恼,想要加以防范,却又束手无策? 你是否曾为某一应用深深折服,想要借鉴学习,却又无从下手? 你是否已不满足于public ...

  9. iOS逆向工程- 工具详解

    前言 一.逆向工程的要求 具备丰富的 iOS 开发经验 最好能非常熟悉 iOS 设备的硬件构成,iOS 系统的运行原理. 拿到任意一个 App 之后能够大致推断出它的项目规模和使用的技术,比如它的MV ...

最新文章

  1. 【 FPGA 】FIR 滤波器之多相插值器(Polyphase Interpolator)
  2. 如何利用隐写术配合四个重定向连接到C2服务器
  3. 2021 三月1日雅思口语考试反思
  4. Android Platform Codenames, Versions, API Levels, and NDK Releases
  5. cstring越界_char*、WCHAR*、vc8中的CString
  6. GridView导出Execl
  7. Go官方库RPC开发指南
  8. ALSA ASOC
  9. c++编程时为什么老是出现cout未定义
  10. 字节跳动斥巨资开发出《Python知识手册》
  11. Oracle中NB的中文处理
  12. JavaScript库和框架
  13. 软件测试中的43个功能测试点总结
  14. php判断4的倍数,4的倍数特征(4的倍数特征规律怎样找)
  15. 什么是TAO以及如何安装和使用TAO
  16. java后台将数据导出到Excel表格
  17. mysql数据写入磁盘的原理_WAL(Write Ahead Log)机制解析
  18. php生成云图,教程:用Python生成词云图
  19. flume1.9学习笔记
  20. 几种经典的卷积神经网络

热门文章

  1. 深入分析Win32k系统调用过滤机制
  2. 常见的高清视频接口(HDTV、VGA、DVI、HDMI)
  3. 5大好用又免费BI软件系统
  4. 编程猫创作工具:新版Kitten新体验
  5. 马云再次成功了!刚刚,阿里巴巴正式宣布再出两大产品!
  6. Win10实现窗口AeroGlass化
  7. 蜜蜂剪辑v1.5.0.1更新啦
  8. openfoam计算旋转体滑移网格方法和MRF方法(附案例代码)
  9. 使用TimeUnit类中的sleep代替Thread.sleep
  10. 郑大计算机专业英语第11章在线测试,郑大远程教育大学英语I 1-10章测试题