首页
社区
课程
招聘
[原创]强网杯2024 solve2-apk WriteUp
发表于: 2024-11-30 17:56 8705

[原创]强网杯2024 solve2-apk WriteUp

2024-11-30 17:56
8705

我们首先使用jeb进行分析,搜索关键词success定位到逻辑
image-20241129233403123

外层函数是一个魔改tea,过了前32字节检测才能进入下一个函数进行判断
image-20241129233648640

即可得到前32位的正确数据,将后面的测试数据放在>后继续在H0.a.successWithString()中进行二轮check
进入这个函数即可看到两个[256]的sbox,将部分数据搜索即可知为twofish算法
image-20241130153432307

image-20241130153245125

找到源码与jeb里的很相似

[link]:58fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6@1L8$3!0D9M7#2)9J5c8X3u0S2M7$3g2Q4x3V1k6Q4x3V1u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6B7L8$3u0T1i4K6u0r3M7%4u0U0i4K6u0r3L8h3q4A6L8W2)9J5c8X3A6S2N6X3q4Q4x3V1k6f1N6$3!0X3K9i4y4Z5i4K6u0r3g2s2N6G2k6X3W2K6K9q4)9#2k6V1q4D9k6$3!0J5K9i4c8Z5L8g2)9J5k6h3A6S2N6X3p5`.

image-20241130154603346

我们在H0.a.c处下断点动调获取key

image-20241130164840825

image-20241130165101102

即可得到twofish的key
根据代码可知有两段data[16],我们可以对v2[15]下断点得到所有的data
image-20241130165748281

即可得到前半段flag,我们将前半部分flag输入进去再进行check即可得到part2的check

Come on you are about to get it>flag{iT3N0t7H@tH111111111111111}

之后有对我们传入的测试值的flag的part2的异或数据提取出来(这第二段算法是rc4,直接将加密后的值异或回去即可得到)
image-20241130174040159

将这段数据异或我们的输入再异或data2[16]即可还原得到第二段flag

这wp应该是出题人的预期解,本人走了许多弯路最终写出这份wp供大家学习

#include <iostream>
#include <cstdio>
#include <stdint.h>  // For uint32_t
using namespace std;
 
void tea_decrypt(uint32_t* v) {
    uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i;
    uint32_t delta = 0x9e3779b9;
    uint32_t k[5] = { 598323648, 1213115916, 970832168, 274853062};
     
    for (i = 0; i < 32; i++) {
 
        v1 -= (((v0 << 4) + k[2] ^ v0) + (sum ^ (v0 >> 5)) + k[3]);
        v0 -= (((v1 << 4) + k[0] ^ v1) + (sum ^ (v1 >> 5)) + k[1]);
        sum -= delta;
    }
    v[0] = v0;
    v[1] = v1;
}
 
uint32_t switchEndian(uint32_t num) {
    return ((num >> 24) & 0x000000FF) | // 取最高字节
           ((num >> 8) & 0x0000FF00) | // 取第二字节
           ((num << 8) & 0x00FF0000) | // 取第三字节
           ((num << 24) & 0xFF000000); // 取最低字节
}
 
int main() {
    uint32_t key[] = { 598323648, 1213115916, 970832168, 274853062 };
 
    uint32_t data[] = {
        0x5E5440B0, 2057046228, 0x4A1ED228, 0x233FE7C, 0x96461450, 0x88A670ED, 0xF79BFC89, 0x20C3D75F,0
    };
 
    for (int i = 0; i < 8; i += 2) {
        tea_decrypt(&data[i]);
    }
     
    for (int i = 0; i < 8; ++i) {
         data[i] = switchEndian(data[i]);
    }
    printf("%s",data);
     
    return 0;
}
// Come on you are about to get it>
#include <iostream>
#include <cstdio>
#include <stdint.h>  // For uint32_t
using namespace std;
 
void tea_decrypt(uint32_t* v) {
    uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i;
    uint32_t delta = 0x9e3779b9;
    uint32_t k[5] = { 598323648, 1213115916, 970832168, 274853062};
     
    for (i = 0; i < 32; i++) {
 
        v1 -= (((v0 << 4) + k[2] ^ v0) + (sum ^ (v0 >> 5)) + k[3]);
        v0 -= (((v1 << 4) + k[0] ^ v1) + (sum ^ (v1 >> 5)) + k[1]);
        sum -= delta;
    }
    v[0] = v0;
    v[1] = v1;
}
 
uint32_t switchEndian(uint32_t num) {
    return ((num >> 24) & 0x000000FF) | // 取最高字节
           ((num >> 8) & 0x0000FF00) | // 取第二字节
           ((num << 8) & 0x00FF0000) | // 取第三字节
           ((num << 24) & 0xFF000000); // 取最低字节
}
 
int main() {
    uint32_t key[] = { 598323648, 1213115916, 970832168, 274853062 };
 
    uint32_t data[] = {
        0x5E5440B0, 2057046228, 0x4A1ED228, 0x233FE7C, 0x96461450, 0x88A670ED, 0xF79BFC89, 0x20C3D75F,0
    };
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2024-11-30 17:59 被Aar0n编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (7)
雪    币: 3851
活跃值: (5525)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
图挂了呢
2024-11-30 23:22
0
雪    币: 926
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
北门观雪 图挂了呢[em_004]
图片挂了图床,需要魔法
2024-12-1 00:48
1
雪    币: 926
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
北门观雪 图挂了呢[em_004]
按理应该看得到的
2024-12-1 00:50
1
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
可以看的到
2024-12-1 09:03
0
雪    币: 2456
活跃值: (3372)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2024-12-1 10:51
0
雪    币: 221
活跃值: (1355)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
强的
2024-12-11 23:15
0
雪    币: 2761
活跃值: (2716)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
8
2025-1-6 16:24
1
游客
登录 | 注册 方可回帖
返回