【极客大挑战2023】RE方向 WriteUp

vstral的博客 / 2024-10-05 / 原文

1.砍树

下载题目得到一个apk文件,jadx打开,查看Android.Manifest.xml
image
查看MainActivity
image
发现使用了一个I0o0I处理了输入和Syclover,猜测应该是对text处理后与Syclover对比,当result赋值为1就成功了。故查看I0o0I
image
发现I0o0I再so文件中,故查看libezreeeee.so文件
IDA打开,查找I0o0I
image
生成伪代码并修改一些可以分辨的函数
image

在 函数中

text[i] ^= syclover[i % 7];
syc = Sycloverforerver实际上只被用到了前6个字符

exp

点击查看代码
#include <stdio.h>
#include <string.h>

int main(void) {
    unsigned char text[40]; 
    unsigned char syc[20] = "Sycloverfover";
    unsigned char dest[36] = { 
        0x00, 0x20, 0x20, 0x17, 0x1B, 0x36, 0x0E, 0x36, 
        0x26, 0x17, 0x04, 0x2A, 0x29, 0x07, 0x26, 0x15, 
        0x52, 0x33, 0x2D, 0x0F, 0x3A, 0x27, 0x11, 0x06, 
        0x33, 0x07, 0x46, 0x17, 0x3D, 0x0A, 0x3C, 0x38, 
        0x2E, 0x22, 0x18 
    };


    for (int i = 0; i < 35; ++i) { 
        text[i] = dest[i] ^ syc[i % 7]; 
    }


    printf("Recovered text: ");
    for (int i = 0; i < 35; ++i) { 
        printf("%c", text[i]);
    }
    printf("\n");

    return 0;
}