2024数证杯决赛个人赛

容器密码

个人赛:

4zL!$WpRkmANv@XFQ#7HdEyU&GpoTb56YZ^Jq83!Wr(tqA%XsPB7f@CY1xRmKH9#Le*WVG9NuvT$kJ2@7b64Tp(FLM#zqRY8Hv%!KU^9C&YXL*powq87Hr

团体赛:

mW7@B!tRp*Xz46Y9#KFUV^J2&NqoHqTpLCE%8rvGW(AX#1k@YL3$M5!bWY*9HLFq7UZR6^T!XoVmPK28J&CY9%6(Arz#tbU4oXYKLp7Wq^FV9H

竞赛留念

image-20260527172313517

题目

一、计算机取证 (共10题19.0分)

1.计算机中曾挂载的Bitlocker加密分区的恢复密钥后6位为?(答案格式:6位数字) (1.0分)

image-20250430153111679

012507-559669-054527-667557-173448-699171-415833-700755

700755

2.请写出曾远程连接过该计算机的IP;(答案格式:6.6.6.6) (1.0分)

image-20250430153207895

192.168.50.227

3.计算机中曾挂载的vhd非加密分区驱动器号为?(答案格式:大写,如D) (1.0分)

image-20250430153722619

996600.vhd是非加密的

image-20250430153907346

image-20250430153951911

M

4.接上题,分区中最后修改时间的文件MD5值为?(答案格式:全大写) (1.0分)

image-20250430154040931

0A7152C5AA002A3D65DC5C5C5FAAB868

5.请找到计算机中的Veracrypt加密容器,并写出其解密密码?(答案格式:字母大小写与实际需一致) (6.0分)

image-20250430155601723

image-20250430155808379

1P2P3$$pian5p6p78pian

6.请写出IP为202.113.81.243的发件人向机主发送的邮件附件MD5值;(答案格式:全大写) (1.0分)

image-20250430154300661

image-20250430154423402

导出:
image-20250430154431913

6cf25fff7d2882dbf5722b3b9e382b5f

7.计算机中Will Wight - Cradle Series (Books 1-12)- MOBI.torrent文件的下载地址为?(答案格式:http://...) (1.0分)

image-20250430154507835

http://suprbaydvdcaynfo4dgdzgxb4zuso7rftlil5yg5kqjefnw4wq4ulcad.onion/attachment.php?aid=4130

8.计算机中lqrazqq016j41.jpg文件的删除时间为?(UTC+0800)(答案格式:1990-01-01 01:01:01) (1.0分)

image-20250430154524464

2024-11-09 21:59:48

9.Fikret Ceker曾经向机主发送过一张照片,请找到该图片写出其拍摄的GPS坐标;(答案格式:保留小数点后4位,如33.3333N,33.3333E) (3.0分)

image-20250430154628855

image-20250430155041839

GPSLatitudeRef: N
GPSLatitude: 40.01121666666667
GPSLongitudeRef: E
GPSLongitude: 112.70008055555556

40.0112N,112.7000E

10.计算机中用户“李四”在最后一次成功登录之前登录失败了多少次? (答案格式:纯数字) (3.0分)

image-20250430155206711

6

二、手机取证 (共8题19.0分)

请根据手机检材,回答以下问题(备份密码6666):

1.分析手机检材,写出苹果手机的序列号是多少?(答案格式:大小写与实际需一致) (1.0分)

image-20250430161929866

FK3XDN2UKPJ5

2.分析手机检材,写出嫌疑人facebook账号的密码是多少?(答案格式:大小写与实际需一致) (1.0分)

image-20250430162017576

1234qwer

3.分析手机检材,下列哪些地址是嫌疑人曾经去过的? (2.0分)

A: 南宁市青秀区 B: 南宁市江南区 C: 济南市历城区 D: 上海市松江区 E: 上海市宝山区

只有这个没有Photos.sqlite

image-20250430162844998

ABCE

4.分析手机检材,嫌疑人安装了用于记账的APP,请问该APP的包名是什么?(答案格式:com.abc.abc) (1.0分)

image-20250430162201906

com.maicai.freejizhang

5.分析手机检材,嫌疑人记账APP中记录的使用支付宝支付的用于礼金红包的金额一共是多少?(答案格式:请写整数金额,如1230元) (5.0分)

支付宝支付:
image-20250430164558197

7EB78B8F64E24EB6956DC9DB44720794

image-20250430162329121

uuid

image-20250430162438022

用户uuid排除最后一个

17000000

应该去掉两个零,后面是角和分

170000元

6.分析手机检材,嫌疑人家里路由器密码是多少?(答案格式:大小写与实际需一致) (3.0分)

image-20250430163029130

image-20250430163049841

201808188

7.分析手机检材,写出嫌疑人最新家庭地址;(答案格式:XX市XX区XX路XX弄 (1.0分)

image-20250430163210227

上海市浦东新区张杨北路2899弄

8.分析手机检材,嫌疑人团伙走私的“大麻”的单价是每克多少元?(答案格式:XX元/克) (5.0分)

image-20250430162701662

mm20241105
foremost -T 19.pic 
image-20250430164700711

常见的文件后缀包括.doc、.xls、.ppt

foremost之后的结果在这里

image-20250430165331476

这里,重新回到原始的19.pic文件,手动把文件重新提出来

image-20250430173028383 image-20250430173046930

344

三、服务器取证 (共6题19.0分)

1. 重建完整的系统后,redis对外暴露的端口号是多少?(答案格式:数字) (3.0分)

image-20250430171300831

16379

2. 请找出加密mysql数据库连接密码所用的加密密钥(盐值)?(答案格式:注意大小写) (3.0分)

服务器后端是java的站,数据库为mysql和redis
image-20250502002219807

docker inspect 79d2dfa52a5e

image-20250502002310066

指定了 Spring Boot 应用的配置文件路径

/home/date/s048/application-s048.yml

思路2:

image-20250501234837897

本身没加密,应该不对

image-20250501234916635

外部的yml有

image-20250501234954398

ENC(...) 是一种 加密密码的占位标记,常见于使用 Jasypt(Java Simplified Encryption) 等加密库时

意思是:这个密码是加密过的,程序运行时会使用指定的密钥对其进行解密

回文件里找秘钥,找jasypt

image-20250501235250590

有点多,但是筛选也很简单,如果类名有的大概率是jasypt包中自带的,我们只需要看类名路径中不包含jasypt但是代码中调用过的

image-20250501235738574

image-20250501235856943

image-20250502000017255

解密脚本:

直接调用jar包进行解密操作,从jar包里面提取jasypt-1.9.3.jar:

image-20250502000527293

把这个jar包用在本地编译的流程:

image-20250502001526629 image-20250502001452674 image-20250502001511440

写解密脚本:

package org.example;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

public class JasyptDemo {
    public static void main(String[] args) {
        // 创建加密器
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();

        // 设置算法和密码(必须与配置中的一致)
        encryptor.setAlgorithm("PBEWithMD5AndDES");
        encryptor.setPassword("F*DZ-kZMs5qt"); // 这是你用于加密/解密的密钥

        // 要解密的内容
        String encryptedInput = "ij+NuXpx6CZwYB1oGHA2M2E2na0G8Tux"; // 去掉 ENC(...) 的密文
        String decryptedText = encryptor.decrypt(encryptedInput);
        System.out.println("解密后: " + decryptedText);
    }
}
mA0:xA0^

或者

package org.example;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

public class Main {
    public static StringEncryptor stringEncryptor() {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM);
        encryptor.setPassword("F*DZ-kZMs5qt");
        return encryptor;
    }
    public static void main(String[] args) {
        StringEncryptor encryptor = stringEncryptor();
        String a = "ij+NuXpx6CZwYB1oGHA2M2E2na0G8Tux";
        System.out.println(a+"--->"+encryptor.decrypt(a));
        String b = "064l9Wwf9KjXlSz0phcwvg+R5xwzCNl7";
        System.out.println(b+"--->"+encryptor.decrypt(b));
        String c = "8fiHevvtSApJ/7UoFXZcMMhzXWIdvyjv";
        System.out.println(c+"--->"+encryptor.decrypt(c));
    }
}

基本都是复制,在Main加上StringEncryptor stringEncryptor(),然后在主函数进行解密

3. 请分析得出相亲网站的后台数据库中哪张表存放了会员相关信息,写出表名? (6.0分)

一共两个mysql

image-20250502003124862

都是ssh连接

端口ip根据原来文件里来就行,反正都是docker里面的

image-20250502004412156

里面没有

试试另一个

image-20250502003056233

image-20250502003222100

a_member_st

4. 已知用户在系统中的所有操作都会被记录,请找出用户在“查询角色”时,其请求的后端路径地址为?(格式:/api/query/...) (3.0分)

image-20250502003701032

思路2:

image-20250502004627533

image-20250502004807515

image-20250502004823564

/zwz/role/getAllByPage

5. 请分析得出数据库用户表中status为-1状态值的含义为?(格式:学生) (1.0分)

image-20250502004849399

image-20250502004913888

禁用

6.请统计平均月均收入第二高的省份(省份包含三大类:省、直辖市、自治区)(答案格式:请写出完整的省份名(或直辖市名、自治区名),如江西省、天津市、西藏自治区) (3.0分)

SELECT
    SUBSTRING( address,1,2) AS `省份`,
    SUM( income ) AS `收入`,
    COUNT( income ) AS `人数`,
    SUM( income )/ COUNT( income ) AS `平均收入`
FROM
    a_member_st 
GROUP BY
`省份`
ORDER BY
`平均收入` DESC

image-20250502005000292

内蒙古自治区

四、程序功能分析 (共6题14.0分)

请根据APK检材,回答以下问题:

1.分析APK检材,请问程序申请了几项系统权限?(答案格式:6) (2.0分)

image-20250502005234436

4

2.分析APK检材,请写出程序的入口邀请码;(答案格式:与实际大小写保持一致) (6.0分)

image-20250502005258942

image-20250502005957246

Java Native Interface(JNI) 是 Java 提供的一种机制,用于 在 Java 代码中调用由 C/C++ 编写的本地代码,或者让 C/C++ 代码调用 Java 的类和方法。

程序调用isString函数验证邀请码是否正确。isStringnative 函数,静态代码块中加载了libgallery.so库:


    private final native boolean isString(String str);

    public static void t(MainActivity mainActivity) {
        r1.c.e(mainActivity, "this$0");
        c cVar = mainActivity.f2407c0;
        if (cVar == null) {
            r1.c.h("binding");
            throw null;
        }
        if (!mainActivity.isString(((EditText) cVar.f22G).getText().toString())) {
            Toast.makeText(mainActivity, "邀请码不正确", 0).show();
        } else {
            mainActivity.startActivity(new Intent(mainActivity, (Class<?>) GalleryActivity.class));
            mainActivity.finish();
        }
    }

去isString里面找

静态代码块中加载了libgallery.so

image-20250502010114516

找到函数名isString

image-20250502010340282

image-20250502010451696
bool __cdecl Java_com_example_gallery_MainActivity_isString(int a1, int a2, int a3)
{
  int v3; // esi
  const char *v4; // edi
  size_t v5; // eax
  size_t v6; // ecx
  char *v7; // edi
  const char *v8; // edx
  int v9; // esi
  size_t v10; // edi
  char *v11; // eax
  _BYTE *v12; // edx
  _BYTE *v13; // esi
  _BYTE *v14; // esi
  int *v15; // esi
  _BYTE *v16; // esi
  _BYTE *v17; // edx
  bool result; // al
  bool v19; // si
  size_t v20; // [esp+10h] [ebp-28h]
  const char *src; // [esp+14h] [ebp-24h]
  int dest; // [esp+1Ch] [ebp-1Ch] BYREF
  size_t v23; // [esp+20h] [ebp-18h] BYREF
  void *ptr; // [esp+24h] [ebp-14h]
  unsigned int v25; // [esp+28h] [ebp-10h]

  v3 = a1;
  v25 = __readgsdword(0x14u);
  v4 = (const char *)(*(int (__cdecl **)(int, int, _DWORD))(*(_DWORD *)a1 + 676))(a1, a3, 0);
  v5 = strlen(v4);
  if ( v5 >= 0xFFFFFFF8 )
    sub_12FF0(&dest);
  v6 = v5;
  src = v4;
  if ( v5 >= 0xB )
  {
    v9 = v5 | 7;
    v10 = v5;
    v11 = (char *)operator new((v5 | 7) + 1);
    v6 = v10;
    v7 = v11;
    ptr = v11;
    dest = v9 + 2;
    v3 = a1;
    v23 = v6;
    v8 = src;
    goto LABEL_6;
  }
  LOBYTE(dest) = 2 * v5;
  v7 = (char *)&dest + 1;
  v8 = src;
  if ( v5 )
  {
LABEL_6:
    v20 = v6;
    memmove(v7, v8, v6);
    v8 = src;
    v6 = v20;
  }
  v7[v6] = 0;
  (*(void (__cdecl **)(int, int, const char *))(*(_DWORD *)v3 + 680))(v3, a3, v8);
  if ( (dest & 1) != 0 )
  {
    if ( v23 != 6 )
      goto LABEL_30;
  }
  else if ( (unsigned __int8)dest >> 1 != 6 )
  {
    goto LABEL_30;
  }
  v12 = (char *)&dest + 1;
  if ( (dest & 1) != 0 )
    v12 = ptr;
  if ( *v12 != 65 )
    goto LABEL_30;
  v13 = (char *)&dest + 3;
  if ( (dest & 1) != 0 )
    v13 = (char *)ptr + 2;
  if ( *v13 != 66 )
    goto LABEL_30;
  v14 = (char *)&dest + 2;
  if ( (dest & 1) != 0 )
    v14 = (char *)ptr + 1;
  if ( *v14 != 67 )
    goto LABEL_30;
  v15 = (int *)((char *)ptr + 3);
  if ( (dest & 1) == 0 )
    v15 = (int *)&v23;
  if ( *(_BYTE *)v15 != 68 )
    goto LABEL_30;
  v16 = (char *)&v23 + 1;
  if ( (dest & 1) != 0 )
    v16 = (char *)ptr + 4;
  if ( *v16 != 69 )
  {
LABEL_30:
    result = 0;
    if ( (dest & 1) == 0 )
      return result;
    goto LABEL_31;
  }
  v17 = (char *)&v23 + 2;
  if ( (dest & 1) != 0 )
    v17 = (char *)ptr + 5;
  result = *v17 == 70;
  if ( (dest & 1) != 0 )
  {
LABEL_31:
    v19 = result;
    operator delete(ptr);
    return v19;
  }
  return result;
}
image-20250502012151210

image-20250502015820410

验证答案:由于 APK 打不开,我只能用 frida 去主动调用isString,如果返回true,说明正确

Java.perform(function () {
    let a = Java.use("A0.a");
    a["a"].implementation = function () {
        // 在闪退之前主动调用
        let m = Java.use("com.example.gallery.MainActivity").$new();
        console.log("isString: " + m.isString("ACBDEF"));
        return true;
    };
})

3.分析APK检材,该程序进行恶意行为时保存的文件使用的加密算法及加密模式是?(答案格式:大写,如XXX-XXX) (1.0分)

Cipher.getInstance

Cipher.getInstance(...) 是 Java 加密框架中用于 创建加密或解密引擎 的方法,是 javax.crypto.Cipher 类的一个静态工厂方法。它是 Java 中实现对称加密、非对称加密、摘要算法等核心的工具之一。

image-20250502022010433

AES-GCM

4.分析APK检材,该程序进行恶意行为时保存的文件使用的加密密钥是?(答案格式:与实际大小写保持一致) (3.0分)

image-20250502022437392

你要知道密钥是多少,就必须要拿到 stringFromJNI() 的返回值。

主动调用吧

原来复制的:

把.stringFromJNI()提取

let GalleryActivity = Java.use("com.example.gallery.GalleryActivity");
GalleryActivity["stringFromJNI"].implementation = function () {
    console.log(`GalleryActivity.stringFromJNI is called`);
    let result = this["stringFromJNI"]();
    console.log(`GalleryActivity.stringFromJNI result=${result}`);
    return result;
};

模板:

Java.perform(function () {
    let a = Java.use("A0.a");
    a["a"].implementation = function () {
        // 在闪退之前主动调用
        let obj = Java.use("com.example.gallery.GalleryActivity").$new();
        console.log("stringFromJNI: " + obj.stringFromJNI());
        return true;
    };
})

Java.perform(function () {
    let a = Java.use("第一个包,第一个类");
    a["第一个类"].implementation = function () {
        // 在闪退之前主动调用
        let obj = Java.use("真正函数所在位置").$new();
        console.log("stringFromJNI: " + obj.函数调用的方法());
        return true;
    };
})

最终:

Java.perform(function () {
    let a = Java.use("A0.a");
    a["a"].implementation = function () {
        // 在闪退之前主动调用
        let obj = Java.use("com.example.gallery.GalleryActivity").$new();
        console.log("stringFromJNI: " + obj.stringFromJNI());
        return true;
    };
})
stringFromJNI: 0123456789abcdef0123456789abcdef
stringFromJNI: 0123456789abcdef0123456789abcdef
stringFromJNI: 0123456789abcdef0123456789abcdef
stringFromJNI: 0123456789abcdef0123456789abcdef

思路2:

stringFromJNI在也是native,该方法由本地(Native)代码实现,而不是用 Java 实现

image-20250502023243645

image-20250502023437457

0123456789abcdef0123456789abcdef

5.分析APK检材,该程序上传文件的服务器通信URL是多少?(答案格式: https://xxxx/xx/xx ) (1.0分)

源码里有

https://biwuzhuanyongurl.com/upload

6.分析APK检材,以下哪个是该程序存在的恶意行为? (1.0分)

A. 偷偷调用前置摄像头拍照并上传图片至服务器

B. 偷偷调用后置摄像头拍照并上传图片至服务器

C. 后台偷偷录音并上传音频至服务器

D. 偷偷获取通讯录信息并上传服务器

E. 偷偷获取短信信息并上传服务器

image-20250502022207436

A

五、网络流量分析 (共6题19.0分)

请根据网络流量包检材,回答以下问题:

1.分析网络流量包,请问目录遍历攻击开始时间是什么时候?(答案格式:1990-01-01 01:01:01) (1.0分)

image-20250430160217897

2024/10/24 17:26:12

2.分析网络流量包,可以发现哪种攻击行为? (1.0分)

A. 网络钓鱼

B. SQL注入

C. 拒绝服务攻击

D. 恶意软件传播

E. 中间人攻击

image-20250430160335542

B

3.分析网络流量包,黑客获取到的数据库名称是?(答案格式:小写) (3.0分)

image-20250430160411958

secret

4.分析网络流量包,黑客通过时间盲注获取到的数据是什么?(答案格式:与实际大小写保持一致) (6.0分)

image-20250430154202389

Th!s_1s_5ecret!

5.分析网络流量包,黑客使用什么webshell管理工具控制服务器?(答案格式:请写中文名,无需填写版本号) (3.0分)

冰蝎

6. 分析网络流量包,黑客通过后门执行的最后一条命令是什么?(答案格式:与实际大小写保持一致) (5.0分)

image-20250430161501076

image-20250430161450426

type login.php

六、数据分析 (共4题10.0分)

请根据数据分析检材,回答以下问题:

1. 分析数据库检材,该数据库中会员姓名包含“强”字的会员数量为多少?(答案格式:纯数字) (1.0分)

SELECT * FROM member WHERE userName LIKE '%强%'

2. 属于会员id“89378”的直接下级用户数为多少?(答案格式:纯数字) (1.0分)

SELECT COUNT(*) FROM member WHERE parentId = 89378

3. 请计算每名会员的总返佣金额,写出总返佣金额最大的会员id;(答案格式:纯数字) (3.0分)

SELECT userId,SUM(newBlance-oldBlance) as `佣金` FROM salary GROUP BY userId ORDER BY `佣金` DESC

4.计算在2024年5月1日到2024年5月30日之间(包含5月1日和5月30日),总提现金额大于1000的用户数量;(答案格式:纯数字) (5.0分)

SELECT
    userId,SUM(withdrawAmount)
FROM
    withdraw 
WHERE
    FROM_UNIXTIME( creationTime /1000,'%Y-%m-%d')>='2023-05-01'
AND FROM_UNIXTIME( creationTime /1000,'%Y-%m-%d')<='2024-05-30'
GROUPBY
    userId 
HAVING
SUM( withdrawAmount )> 1000
posted @ 2026-05-27 17:20  Cava1i  阅读(22)  评论(0)    收藏  举报