0%

2022-RCTF

RCTF

本次比赛打的很出色,出了3道re和2道misc,而这次也是几乎全是21级在战斗,取得了11名的成绩,和几位逆向大哥一起看到通宵,最后只差两道就ak了逆向。

image-20221221111548001

RE

CheckYourKey

一道安卓题,通过jni动态调用了ooxx函数,主要加密流程是先aes再base58最后base64,数据通过交叉引用可以还原,base64换表了,其他都没变,aes的key是:goodlucksmartman,先解base64再解base58,最后aes得到flag:flag{rtyhgf!@#$}。像这种题:jni里调用了ooxx函数,但本身jni又有加密(与ooxx)里的加密一样,其实真正加密处理是在jni中,对比数据也是,所以只用看jni里的就ok。

首先定位到JNI_ONLOAD,函数中包括这一段

1
2
3
4
5
6
7
8
if ( (unsigned int)sub_17B34((__int64)vm, (__int64)&v27, 0x10006u) )
{
v5 = -1;
}
else
{
v3 = sub_17B80(v27, (__int64)byte_41190);
v46 = sub_8965;

sub_8965函数中是真正加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ( a3 && (unsigned int)sub_16254((__int64)x0_0, a3) == 16 )
{
v10 = sub_14F70(x0_0, a3, 0LL);
v9 = (_QWORD *)operator new[](0x10uLL);
v9[1] = 0LL;
*v9 = 0LL;
aes(v10, (__int64)byte_41140, (__int64)v9);
v8 = (char *)base58((__int64)v9, 0x10uLL);
v7 = strlen(v8);
s1 = (char *)malloc(2 * v7);
memset(s1, 0, 2 * v7);
base64((__int64)v8, v7, (__int64)s1);
v21 = strlen(byte_41088);
v22 = linux_eabi_syscall(__NR_openat, -100, byte_41094, 0);

picStore

这个题跟超人和zzy从早上看到晚上8点多mad,