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}

posted @ 2023-09-16 17:36  WXjzc  阅读(165)  评论(0编辑  收藏  举报