2023蓝帽杯半决赛取证
很简单的难度,作为半决赛来讲。。不好说
1.检材开始提取是今年什么时候?
克隆目录取证日志,logs.log
结果为09-11 17:21
2.嫌疑人手机SD卡存储空间一共多少GB?
结果为24.32
3.嫌疑人手机设备名称是?
结果为sailfish
4.嫌疑人手机IMEI是?
/Basic/Adlockdown.json
结果为352531082716257
5.嫌疑人手机通讯录数据存放在哪个数据库文件中?
结果为contacts.db
6.嫌疑人手机一共使用过多少个应用?
据说答案是206,抱歉,实在是找不到这么解释的依据。我不是很认可直接提取出的应用列表
system.dat
老面孔了,我之前的文章应该也写过这个文件,主要看lastTimeUsed
结果为100
7.测试apk的包名是?
看看电量消耗,最多的是这个My Application
去看appinfo.db
这个数据库,找对应的包名
结果为com.example.myapplication
8.测试apk的签名算法是?
找到文件
jadx或mt
结果为SHA256withRSA
9.测试apk的主入口是?
结果为com.example.myapplication.MainActivity
10.测试apk一共申请了几个权限?
问的是申请了几个权限,需要看uses-permission
字段,permission
字段时应用自己定义权限,你可以看到它自定义一个权限之后,又用uses-permission
去申请了一下
结果为3
11.测试apk对Calllog.txt文件内的数据进行了什么加密?
异常简单
结果为Base64
12.10086对嫌疑人拨打了几次电话?
看一下文件是写到了应用的私有目录里
直接Base64解开
结果为2
13.测试apk对短信记录进行了几次加密?
简单的aes加密后Base64输出
结果为2
14.测试apk对短信记录进行加密的密钥是?
静态
native方法,需要去看so
这个函数是一个静态注册的函数,exports里面可以直接看到,跳过来,看一下first和字符集的值,实际就是base系列编码,只是码表少了1位=,无填充的base64,而程序只需要取前16位作为密钥,只要计算结果比16位多出3到4位,那么可以直接用标准的base64截取
动态
frida主动调用,用attach方式附加,由于没有检测到我的模拟器,就没有写绕过脚本,绕过也简单,改一个返回值就行了
setImmediate(function () {
Java.perform(function () {
let getKeyAddr = Module.getExportByName('libmyapplication.so','Java_com_example_myapplication_MainActivity_Getkey');
let Getkey = new NativeFunction(getKeyAddr,'pointer',['pointer'])
var retval = Getkey(Java.vm.getEnv())
console.warn("密钥:"+Java.vm.getEnv().getStringUtfChars(retval).readCString())
});
});
结果为bGlqdWJkeWhmdXJp
15.嫌疑人在2021年登录支付宝的验证码是?
结果为9250
排队队吃果果
每列排序,加粗状态01,39*39二维码
from openpyxl import load_workbook
from openpyxl.styles import Font
workbook = load_workbook('data.xlsx')
worksheet = workbook['Sheet']
for column in worksheet.iter_cols(min_col=1, max_col=39):
column_index = column[0].column_letter
column_data = [[int(cell.value),cell.font.bold] for cell in column]
sorted_column_data = sorted(column_data)
for index, cell in enumerate(column):
cell.value = sorted_column_data[index][0]
bold_font = Font(bold=sorted_column_data[index][1])
cell.font = bold_font
data = ""
for row in worksheet.iter_rows():
tmp = []
for cell in row:
if cell.font.bold:
data += "0"
else:
data += "1"
print(data)
# 111111111111111111111111111111111111111100000001110111100000000000000100000001101111101111000010000000100011101111101101000101110101101100100011011101000101101000101000111111001010110101101000101101000101011001011000111000101101000101101111101110111000001000111011101111101100000001010101010101010101010100000001111111111001010111010111110110111111111111001101101100011110101110100001001111100010110110100000100110101110101010011100110101101111111001111011111010010111101000011111111010011000101111101001011110001000101001111100101101011101111111100111111110100111000010110001101100101101101100001000001101100000010111000011110100010110101001000100000011011001001110111101100100010010100011111100001011111110011100111110111010110001011111111101010001000000100011000101000111010011110000011011101110000111010010011100001100010001111100001101110101100010010011110001011001011000001100000101000101111100111000011011111010000101010101000011100101110100000001101110011110100111111101010000001101010011100110101001010101110001010110111010110101100110000101111101001100010101010001111000001101110011111001111000000010000000000000011010001101000100101001010001100000010000011101111111111101110101000101100100111011101100000001110101100100010101110101001001101111101110110100111000110110111010011101000101101110101101000110000000010111101000101001000000010010101111000000101101000101001011100001111011100101101011101111101100001000011111001000101010011100000001110101010101110011010101010001111111111111111111111111111111111111111
PuzzleSovler直接转图片,懒得自己写+扫
结果为flag{35b6f3ed-9d28-93b8-e124-39f8ec3376b2}