移动安全--44--MobSF-v3.0beta源代码分析【长文巨献】

时间:2020-03-13 来源: 热点专题

一、项目描述

分析日期:2020-01-17

源代码地址:

关于如何构建源代码分析环境。请阅读我的另一个博客:基于3.0beta

移动安全框架的移动安全框架实践是一个自动化的移动应用测试框架,可以执行静态、动态和恶意软件分析。它可用于安卓、iOS和视窗移动应用的有效和快速安全分析,并支持二进制文件(APK、IPA和APPX)和压缩源代码。暴走族可以在运行时为安卓应用程序执行动态应用程序测试,并且拥有由CapFuzz(一种特定于网络应用程序接口的安全扫描器)支持的网络应用程序接口模糊测试。暴走族的设计是为了让你的配置项/光盘或开发操作管道集成无缝。

2。项目条目

项目结构如下:

我们首先浏览项目的源代码,找到项目条目,然后从条目中分析它。这在分析任何源代码时都是一样的。

由于暴民函数是使用Django框架开发的,我们在浏览源代码后可以看到条目在/暴民函数/URL . py中,通过浏览器访问相应的URL地址,函数被映射到相应的代码逻辑。

为了方便阅读,我把评论改写成中文评论。

可以清楚地看到,暴民的功能分为四大块,即:

包括上传APP、下载报告、描述、搜索、删除和扫描等一般功能。

安卓应用程序、iOS应用程序、视窗应用程序、应用程序比较等的静态扫描。

仅支持安卓应用的动态分析,包括安卓设备操作、Frida框架、报告生成等。

封装的应用编程接口,可被调用以使暴民函数能被任何其他系统访问。

3。一般功能分析

由于一般功能不是核心功能(核心功能是静态扫描和动态分析),那么我们只能分析上传功能来预热。

在编译器中双击进行选择,按下命令B Trace(苹果系统快捷方式),我们就来到/Doubof/View/Home . py .

后面跟着的函数,首先要看到的是上传只支持开机自检方法,其他方法不支持。在

,它将给出一个错误提示,要求处理上传的无效文件和不支持的文件。

对于在windows平台下上传的ipa包,还会给出一个错误提示,要求操作系统必须是MAC或Linux。

下一个是函数。这是REST API的上传功能。我们不会在这里分析它。

然后对上传的文件进行分类,并相应地扫描不同类型的应用程序包。

此时,已经分析了上传到/MuSoF/view/home . py文件中的代码。其他代码是其他函数,包括api_docs,许多函数,如描述、错误和最近扫描,可以从其他分析。我们不会在这里分析它们。

让我们看看上传后如何扫描。可以看出,这里的扫描分为4类,即APK包扫描、ZIP包扫描、IPA包扫描和APPX包扫描。

让我们来看看apk数据包的扫描。首先,我们通过文件名和文件类型来计算MD5值。APK)。这也是我们使用它时看到的MD5值,以及要在第一页的查询框中输入的MD5值。

代码如下:

然后,将扫描任务添加到最新的扫描列表中,这也是我们在使用它之前可以从最新的扫描列表中找到的任务,所以我们不需要再次进行扫描。

让我们看看扫描APK的代码:

我们可以看到在参数中使用的。此时,我们返回到初始的/MuSoF/URL . py并找到后续的。此时,上传的文件正式进入静态扫描。

. 0 . 0 . 1:8000/StaticAnalyzer/?名称=home security . apk type=apkchecksum=ef 13 EB 870 fa 8538 CD 1bb 450 f 7179 dec 5

请参见屏幕截图中的!

4。静态扫描分析

第一笔代码

在做了静态扫描的源代码分析之后,我认为这个部分的内容应该加在前面,所以我把它写在前面。

静态分析的核心部分在/static analyzer/视图/目录中。另外,我们这次只分析安卓APK,所以分析的代码集中在/静态分析器/视图/安卓/目录中。

通用应用编程接口规则库文件

AndroidManifest规则库文件

检测应用编程接口列表文件

二进制分析文件

证书分析文件

代码分析文件

反编译Java/smali代码文件

数据库交互文件

权限规则基础文件

查找源代码文件

生成下载文件

图标分析文件

Java代码演示文件

App Store分析文件

App Store分析文件

Smali代码演示文件

静态分析过程文件(主文件)

文件源代码视图

文件源代码视图

windows环境将使用

在我们的下一次分析中, 我们将根据流程逐步进行静态分析,除了规则库代码和windows环境中使用的代码之外,还将涉及其他代码。

在我们的下一次分析中, 我们将根据流程逐步进行静态分析,除了规则库代码和windows环境中使用的代码之外,还将涉及其他代码。

在我们的下一次分析中, 我们将根据流程逐步进行静态分析,除了规则库代码和windows环境中使用的代码之外,还将涉及其他代码。

我们将在平滑代码后继续。

通过刚才的分析,我们得知我们通过上传了我们的APK文件。在被系统的第一个梭罗处理后,系统自动开始使用该对我们的APK文件进行静态分析。

让我们回到最初定义的地方。/MuSoF/URL . py文件来查找静态分析的位置。

按照这个函数,你会在静态分析主过程文件中找到它。

在这里分析代码是非常有害的,因为代码很长并且是带缩进语法的Python,所以你应该注意缩进,否则你会被覆盖。

静态分析出现并提取参数,包括数据包类型、哈希值、文件名、重新扫描等。然后判断上传的文件是APK包、ZIP包还是其他包,并对不同的包进行相应的静态分析。这里我们分析APK包的静态分析。

如果这个应用程序以前被扫描过,直接从数据库中提取数据;如果是第一次扫描,从零开始扫描。

在这种情况下,我们不会跟踪if下的代码,因为没有什么可看的。看看其他地方的代码。

开始静态分析后,首先提取APK文件名和APK路径,然后解压缩APK包,如果APK包解压缩失败,则报告错误。

成功解压缩APK包后,它正式进入静态分析阶段。

4.1,AndroidManifest.xml安全分析

首先分析AndroidManifest.xml文件。

我们跟着来到/static analyzer/view/Android/manifest _ analysis . py文件。

这个文件有将近900行代码,这让我昏昏欲睡。事实上,没有什么深刻的。首先给APK减压。

不用说,一目了然。使用apktool2.4.1来解压缩APK,所使用的参数也很明显。

然后读取AndroidManifest.xml文件,该文件分为从解压缩后的目录读取和从源目录读取(如果ZIP包已上传)。

在读取Androidmanifest.xml文件后,开始解析xml文件并提取xml文件中的数据,包括所有参数,如应用程序、使用权限、清单、活动、服务、提供者等。

对于可浏览活动也有单独的阅读分析,因为可浏览活动参数非常特殊。

然后,根据参数的特点,对权限进行分析和判断,将权限的安全性分为:

对其他配置也进行了安全性分析,例如:和其他参数。

对四个主要组件的配置也进行了安全性分析,配置的安全性分类为:

整个分析基于并且,注意这不等于flase,也就是说,要么明确声明导出为真,要么没有声明。因为对应于这两种方法的分析方法不同,所以这里将它们分开处理。如果是这样,它自然是安全的,没有什么可说的。

在分析过程中,也有小于安卓4.2、大于或等于安卓4.2的情况。

概述:整个代码对AndroidManifest.xml

4.2进行了全面的安全分析。继续前进

在前一节中,我们看到系统已经对AndroidManifest.xml进行了全面的安全分析。现在我们回来继续前进。

继续,我们发现这是一个应用程序名称。

可以分为两种类型,或者读取AndroidManifest.xml文件标签下的属性值。读取res/values/strings.xml文件中的属性值。代码如下:

之后你做了什么?不,我们只能回去继续回去。

接下来,开始获取APP的图标。进入/静态分析器/视图/安卓/图标分析。实际上没有什么可看的。

4.3,设置清单连接

让我们回到起点,继续前进,然后建立AndroidManifest.xml连接。这里的数量相对较大。我在代码中写了一个注释。请阅读它。

嗯,看完我的笔记,我应该一眼就能看出来。接下来,让我们一个接一个地来看看它是如何实现的。

1-Manifest _ Data/Manifest _ Analysis

中的后续操作包括解析AndroidManifest.xml,它返回到/静态分析器/视图/安卓/Manifest _ Analysis。复印文件。该文件的功能在小节中有所描述,但该功能实际上什么也不是。不再介绍AndroidManifest.xml的处理。

2- Follow get_APP_details

下一步是通过应用商店读取应用的详细数据,包括应用名称、分数、价格、下载…….等待数据。复印文件。

3-完成elf_analysis/res_analysis后,进入二进制分析阶段,并进入/静态分析器/视图/安卓/二进制分析. py文件。

说着,博主想把它写好,但读了很长时间后,他在这个代码文件中找不到什么可说的。整个文件的功能是分析和处理二进制文件。包括资源、资源目录下的资源文件、lib下的文件等。

4- Follow cert_info

下一步是分析证书,并跟踪到/静态分析器/视图/安卓/CERT _ Analysis.py文件。

这个文件代码中有2个函数,所以只有2个函数。

这个函数不是我们所遵循的函数,但是因为它在一个文件中,所以一起解释它。功能是找到证书文件或密钥文件并返回它。包括cer、pem、cert、crt、pub、key、pfx、p12和其他证书文件,以及jks、bk和其他密钥库文件。

这个函数是我们遵循的函数。该功能是获取和分析证书文件信息。包括调试签名、SHA1哈希不安全签名、正常签名等。事实上,没什么好说的。

5- Follow apkid_analysis

Next是apkid分析,后跟/恶意软件分析器/视图/APKID.py文件。

APKID的分析和处理。它后面的核心库位于/Venv/Lib/Python 3.7/站点包/APKID目录中。由于这将在安装过程中自动下载,我们将不分析该库的内容。

apkid的分析和处理并不复杂。做出简单的判断后,分析开始了。

6-跟踪跟踪器

后跟跟踪检测。复印文件。

然后一起解释文件中的所有功能:

该功能的主要功能是更新跟踪和检测数据库。

函数的主要功能是编译与每个签名相关的正则表达式,从而加快跟踪器的检测速度。

函数的主要功能是从所有DEX文件中获取一个Java类列表。这里使用的工具是baksmali。

函数的主要功能是从所有DEX文件中获取一个Java类列表。这里使用的工具是baksmali。

函数根据前一个函数提供的Java类列表检测嵌入式跟踪器,并返回嵌入式跟踪器列表。

函数主要检测嵌入式跟踪器,并返回嵌入式跟踪器列表。

7-Follow apk _ 2 _ Java/dex _ 2 _ smali

7-Follow apk _ 2 _ Java/dex _ 2 _ smali

看完跟踪器后,我们返回并继续。

现在我们将遵循将APK反编译成Java代码的功能和将dex反编译成smali代码的功能。复印文件。

函数通过baksmali工具将dex反编译成smali代码。

函数通过jadx工具将APK反编译成Java代码。

相关代码相对较长,因为需要编写参数的源代码。

8- Follow code_analysis

返回并继续,接下来是代码分析,接下来是/静态分析器/视图/安卓/Code _ Analysis.py文件。

9-再次遵循上面的shared_func

代码后,发现它们都来到了/static analyzer/view/Shared _ Func . py文件。然后让我们继续看看这个文件中的代码逻辑。

该文件的代码主要用于APP的静态分析,包括APK、IPA、APPX等。因为这三个静态分析的公共部分放在一起,所以这个文件被称为shared_func.py.

其中,我们不会看哈希生成(函数)、解压缩(函数)、报表处理(函数)、相关的API(函数和函数)、URL和电子邮件地址提取(函数),这不是主要的函数。

静态分析规则匹配(function)主要是通过遍历规则来分析并获得相应的结果,规则分为两部分,规则类型为正则表达式,规则类型为字符串。

类型为正则表达式的规则也分为单个正则表达式、多个与关系相关的正则表达式、多个或相关的正则表达式、多个与关系相关的固定正则表达式等。它们通过匹配列表(函数)和代码分析结果(函数)由规则匹配,最终生成结果。

字符串类型的规则更复杂。它们被分为单个字符串、与关系相关的多个字符串、与关系相关的多个字符串、与关系相关的多个字符串、与关系相关的多个字符串、与关系相关的多个字符串、与关系相关的多个字符串、与关系相关的多个字符串、与关系相关的多个字符串、与关系相关的多个字符串等等。通过匹配列表(函数)和代码分析结果(函数)匹配规则,最终生成结果。

之后,我做了从源代码中提取和电子邮件地址的操作。没有什么可谈的,它是通过对源代码的常规遍历实现的。

接下来,它是一个比较两个应用程序的功能。请注意,不能比较具有相同哈希值的两个应用程序。

之后,它就是一个计分函数。AVGCVSS得分高减15分,警告减10分,良好加5分。非常简单的功能实现。

最后一次扫描时间(函数)随后被更新,以检测打开的Firebase数据库(函数)和Firebase的URL(函数)。

以后,不是以后,这一切都结束了!

4.4。获取字符串

不要忘记你的主动性,我们将返回到/静态分析器/视图/安卓/静态分析器. py文件。

接下来,获取APP的常量字符串。

我们跟着进去,来到了/静态分析器/视图/安卓/字符串. py文件。它只有一个功能:从应用程序中提取常量字符串。

4.5,数据准备和存储

我们返回到源并继续返回,接着是数据存储前的检查和数据库中的数据存储。

其中,我们刚才看到的函数(/STATIC ANALYER/VIEWS/SHARED _ FUNC . py),以及函数(/STATIC ANALYER/VIEWS/ANDROID/STATIC _ ANALYER . py)没有什么可看的。然后让我们看看函数。

后续功能,我们来到/恶意软件分析器/视图/域_检查.复制文件。

该文件夹主要用于分析和处理恶意软件,对应于静态分析报告中的恶意软件分析栏,包括域恶意软件检查子项目。

函数更新恶意软件数据库。

函数检查恶意软件。

函数验证;

函数用于获取单个。请注意该域;在代码中使用。

函数用于获取多个。请注意,代码中使用了域。

嗯,在阅读完domian _ check.py文件后,我们将返回并继续查看static_analyzer.py文件。

下一步是将数据放入数据库,函数在这里执行,它进入/静态分析器/视图/安卓/交互文件。然而,这个文件中的代码没有什么可分析的。

后跟函数,并进入/malware analyzer/view/virus total . py文件。这是一个计算安全问题总数的地方,没有什么可说的。

至此,上传APK包的静态分析完成,接着是上传ZIP源包的静态分析。我们不会看它。

静态分析摘要

如果你仔细阅读这篇分析文章,然后看看静态分析报告,你会发现我们已经分析了所有的功能,现在我们也知道这些强大的功能是如何实现的。

静态扫描的源代码分析结束了!

5。动态扫描分析

第一笔代码

像静态分析一样,我把它放在前面。

动态分析的核心部分在/DynamiCS Analyzer/视图/目录中。另外,我们这次只分析安卓APK,所以分析的代码集中在/DynamiAnalyzer/Views/安卓/目录中。

设置代理,httptools related

分析和处理从动态分析

动态分析过程文件(主文件)中获得的数据

动态分析环境配置related

Frida框架核心操作部分

Frida框架脚本

动态分析操作

动态分析报告输出

命令测试

Frida框架测试

Xposed框架测试

在我们的下一个分析中,我们将一步一步地按照这个过程来完成动态分析,这是不必要的,并且会涉及到其他代码。

让我们在c之前完成代码

经过长时间的静态源代码分析,我们现在开始进行动态扫描源代码分析。通过浏览/DynamicAnalyzer文件下的代码,我们发现动态扫描仅适用于Android。

截至博主的分析日期,最新的3.0测试版不再支持物理设备,而只支持虚拟设备(主要是虚拟设备)。对于小于安卓5.0的系统版本,将使用Xposed框架,对于大于或等于安卓5.0的系统版本,将使用Frida框架。

5.0以下的安卓系统属于框架类,将在2020年推出。这些旧系统没有学习价值。因此,所有在下面的分析中遇到Xposed的人都会跳过分析。

让我们回到最初定义的地方。/MuSoF/URL . py文件来查找动态分析的位置。

上面的任何一个功能都将随之而来,我们会看到/DynamiCS Analyzer/Views/安卓/DynamiC _ Analyzer.py文件。

让我们首先从上到下分析它,不管它遵循哪个函数。

5.1。函数

函数是动态分析的入口点。

模拟器将首先在这里被检测到。如果模拟器正常运行并被检测到,将获得设备数据,并跟踪到/MuSoF/utils . py文件的功能。然后,代理IP将被设置,并跟踪到文件的功能。其功能是获取网络IP,并根据网络IP设置代理IP。

如果没有启动或检测到模拟器,将会报告一个错误,并且将会跟踪/DoubSf/utils . py文件的功能。

5.2。功能

功能的主要功能是在获取设备信息后配置/创建一个动态分析环境

我们按照/动态分析器/视图/安卓/环境. py文件中的环境配置功能。让我们从上到下解释函数,不管遵循哪个函数。

函数重新启动adb服务,然后尝试将adb连接到设备。

函数用于包装adb命令。所有要执行的命令都将被打包成可执行的命令,然后执行。

函数清除以前的动态分析记录和数据,以便新的动态分析不受影响。

函数的主要功能是建立一个代理。具体步骤是调用Httptools来终止请求,然后在代理模式下打开Httptools。

这两个函数都在/DynamiAnalyzer/Tools/webproxy . py文件中。这个文件中的代码非常简单,将不再进行分析。

函数的主要功能是安装或删除暴民的ROOT CA。

函数的主要功能是为设备设置一个全局代理。该功能仅支持安卓4.4及以上系统。设置代理IP的功能后面将会有/dousf/utils . py的功能。对于小于安卓4.4的系统版本,代理将被设置为127.0.0.1:1337

功能。该功能的主要功能是取消设置全局代理。

函数的主要功能是打开adb反向TCP代理,它只支持安卓5.0系统。

函数的主要功能是开始监控剪贴板。

function的主要功能是获取APK组件,包括活动、接收方、提供方、服务、库等。

函数的主要功能是捕获屏幕并将其保存为/data/data/local/screen。png

function的主要功能是获得安卓架构。

function的主要功能是获取APK组件,包括活动、接收方、提供方、服务、库等。

function的主要功能是获取安卓版本。

function的主要功能是获得安卓架构。

函数的主要功能是启动和捕获活动,这是通过屏幕捕获来实现的。

函数的主要功能是获取安卓的暴民版实例,读取Xposed或Frida文件并输出。

代码如下:

函数的主要功能是设置暴民代理和安装Xposed或Frida框架。

代码如下:

函数的主要功能是安装MuSoF根证书和设置MuSoF代理。

到目前为止,我们已经完成了/动态分析器/视图/安卓/环境文件的代码。整个文件主要是为环境准备的动态分析。代码逻辑非常简单,特别容易理解。

函数的主要功能是安装MuSoF根证书和设置MuSoF代理。

刚才,我们分析了环境. py文件。我们是根据代码从上到下进行分析的,而不是根据运行的逻辑顺序。现在让我们继续

到目前为止,我们已经完成了/动态分析器/视图/安卓/环境文件的代码。整个文件主要是为环境准备的动态分析。代码逻辑非常简单,特别容易理解。

返回并继续

刚才,我们分析了环境. py文件。我们是根据代码从上到下进行分析的,而不是根据运行的逻辑顺序。现在让我们继续

这是先调用Httptools来终止请求,然后在代理模式下打开Httptools。

webproxy.py文件分析

我们进入/DynamiCS Analyzer/Tools/Webproxy . py文件。这个文件中的代码非常简单。

函数的主要功能是杀死httptools,这分为两个步骤。第一步是通过调用httptools用户界面来终止请求,第二步是通过调用httptools代理来终止请求。

函数的主要功能是在代理模式下打开Httptools。

函数启动httptools用户界面。

函数的功能是在第一次创建CA

函数时获取CA目录

5.4。函数

的功能主要是启动logcat流并获取日志。

这个函数没有要分析的东西,所以不会被分析。

让我们来看看操作。复制文件

这个文件的主要功能是动态分析操作。让我们从上到下看看。

函数的主要功能是返回JSON响应

函数。

函数的主要功能是通过正则表达式验证攻击。

函数的主要功能是通过正则表达式验证包名。

函数的主要功能是检查路径遍历。

函数的主要功能是通过正则表达式检查MD5

函数是否有效。

函数的主要功能是检查无效的参数响应。

函数的主要功能是通过POST方法配置实值,以动态分析为例。

函数的主要功能是通过开机自检方法执行亚行指令

函数。主要功能是通过开机自检获得安卓组件

功能。主要功能是通过开机自检方法捕获屏幕

功能。主要功能是通过开机自检方法抛出屏幕

功能。主要功能是通过开机自检方式发送触摸事件

功能。主要功能是通过开机自检方法安装触摸事件

功能要安装或删除暴民代理的根CA

功能,请查看分析副本文件

其主要功能是分析通过动态分析获得的数据。我们也从上到下观察它。

函数的主要功能是运行动态文件分析。

首先,收集日志数据,遍历并过滤日志。代码如下:

通过正则表达式收集的数据如下:

然后通过匹配这些是否出现在恶意软件列表中来检查和实现恶意。代码如下:

遵循/恶意软件分析器/视图/域_检查.复制文件的功能。域_检查。PY文档在本章中进行了解释,在此不再解释。

之后,通过正则化提取所有的电子邮件地址,代码如下:

然后总结结果,代码如下:

最后返回分析结果。

函数的主要功能是获取截图。

函数的主要功能是分析日志数据。

通过执行adb或其他可执行文件进行处理,以获取网络数据、日志数据、域名数据、应用编程接口数据和Frida数据,并返回它们。

函数的主要功能是从设备获取APP文件。

包括提取设备数据、设备中数据的静态分析等。

函数的主要功能是生成文件下载。

下载生成的文件后,现有数据将被删除,新数据将被复制。

至此,安卓动态分析源代码分析已经结束

动态分析总结

没有什么可总结的。所有分析过的都已经分析过了!

-

新闻排行
  1. 劳伦斯世界体育奖颁奖典礼上,观众起立鼓掌以纪念科比布莱恩特。Chinanews.com,2月18日-2020年劳伦斯世界?

    劳伦斯世界体育奖颁奖典礼上,观众起立鼓掌以纪念科比布莱恩特。Chinanews.com,2月18日-2020年劳伦斯世界?...

  2.   广东省政协委员受家长委托,讲述小升初密考之痛金羊网作者:蒋隽2020-01-12  李子良开门见山的发言,

      广东省政协委员受家长委托,讲述小升初密考之痛金羊网作者:蒋隽2020-01-12  李子良开门见山的发言,...

  3.   说到《鬼灭之刃》,义勇和蝴蝶忍还真是一对冤家。  其实这两大人物在动漫中还算好,只是在进行任务的

      说到《鬼灭之刃》,义勇和蝴蝶忍还真是一对冤家。  其实这两大人物在动漫中还算好,只是在进行任务的...

  4. 欢腾的舞狮、喧闹的锣鼓.1月20日,这一年变得越来越强。在渝北区盛达镇的农家大院,村民们聚集在一起迎接“

    欢腾的舞狮、喧闹的锣鼓.1月20日,这一年变得越来越强。在渝北区盛达镇的农家大院,村民们聚集在一起迎接“...

  5. 传统农业发展模式已经到了瓶颈,劳动力成本优势不再明显。有机农业的未来发展趋势是什么?中国农业的未来在

    传统农业发展模式已经到了瓶颈,劳动力成本优势不再明显。有机农业的未来发展趋势是什么?中国农业的未来在...

  6. 因此,不要认为生活是复杂的,如果你喜欢就努力去争取,如果你得到了就珍惜它,如果你错过了就放手。在经历

    因此,不要认为生活是复杂的,如果你喜欢就努力去争取,如果你得到了就珍惜它,如果你错过了就放手。在经历...

  7. 根据《农业转基因生物安全管理条例》和《农业转基因生物加工审批办法》,如果申请农业转基因生物加工许可证

    根据《农业转基因生物安全管理条例》和《农业转基因生物加工审批办法》,如果申请农业转基因生物加工许可证...

  8. 原标题:复星已经在全球范围内分配了122万件医疗用品。资料来源:国家商报实习记者朱。2月8日23:00,记者孙阿

    原标题:复星已经在全球范围内分配了122万件医疗用品。资料来源:国家商报实习记者朱。2月8日23:00,记者孙阿...

  9. OriginalTitle:GeneralMotorsandLGBuildaBatteryFactoryforElectricVehicles:23亿美元,LocationUS月5日,?

    OriginalTitle:GeneralMotorsandLGBuildaBatteryFactoryforElectricVehicles:23亿美元,LocationUS月5日,?...

  10. 梁龙网讯:11月20日,记者走进磁县高宇镇第四街有机水稻种植基地。水稻联合收割机和农用三轮车穿梭在稻田中?

    梁龙网讯:11月20日,记者走进磁县高宇镇第四街有机水稻种植基地。水稻联合收割机和农用三轮车穿梭在稻田中?...

友情链接