Binary
class
Description
Main.class http://files.problem.cpctf.space/Main.class
classファイルが与えられるのでオンラインデコンパイラに投げた。 http://www.javadecompilers.com/
import java.io.PrintStream; public class Main { public Main() {} static int[] answer = { 70, 76, 65, 71, 95, 49, 48, 48, 123, 106, 97, 118, 97, 95, 49, 53, 95, 119, 48, 114, 97, 125 }; public static void main(String[] args) {} static void pl(Object o) { System.out.println(o); } static void ans() { String ans = ""; for (int i = 0; i < answer.length; i++) { ans = ans + (char)answer[i]; } pl(ans); } }
asciiでデコードする。 https://www.dcode.fr/ascii-code
FLAG : FLAG_100{java_15_w0ra}
Easy Binary
Description
easybinary
まずはfileコマンドで確認。
$ file easybinary easybinary: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=73f0907df85cf75b4030ca7fbbbd9de69302929f, not stripped
stringsでフラグが得られた。
$ strings easybinary | grep FLAG FLAG_100{5trings_c0mannd_is_c0nven1ent!}
FLAG : FLAG_100{5trings_c0mannd_is_c0nven1ent!}
passcode
Description
binary
ファイルが与えられる。
$ file passcode passcode: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=14b96a100033c70b43f9b67e075323c935a36758, not stripped
とりあえずIDAに投げる。
mainで一文字ずつ比較している。
int __cdecl main(int argc, const char **argv, const char **envp) { int v4; // [esp-12h] [ebp-50h] int v5; // [esp-Eh] [ebp-4Ch] int v6; // [esp-Ah] [ebp-48h] int v7; // [esp-6h] [ebp-44h] int v8; // [esp-2h] [ebp-40h] char v9; // [esp+0h] [ebp-3Eh] int v10; // [esp+2h] [ebp-3Ch] int v11; // [esp+6h] [ebp-38h] int v12; // [esp+Ah] [ebp-34h] int v13; // [esp+Eh] [ebp-30h] int v14; // [esp+12h] [ebp-2Ch] int v15; // [esp+16h] [ebp-28h] int v16; // [esp+1Ah] [ebp-24h] int v17; // [esp+1Eh] [ebp-20h] int v18; // [esp+22h] [ebp-1Ch] char *v19; // [esp+2Ah] [ebp-14h] unsigned int v20; // [esp+32h] [ebp-Ch] int *v21; // [esp+36h] [ebp-8h] v21 = &argc; v20 = __readgsdword(0x14u); puts("What is flag?"); __isoc99_scanf("%49s", &v9, v4, v5, v6, v7, v8, v10, v11, v12, v13, v14, v15, v16, v17, v18); if ( v9 != 'F' || HIBYTE(v8) != 'L' || (_BYTE)v10 != 'A' || BYTE1(v10) != 'G' || BYTE2(v10) != '_' || HIBYTE(v10) != '2' || (_BYTE)v11 != '0' || BYTE1(v11) != '0' || BYTE2(v11) != '{' || HIBYTE(v11) != '(' || (_BYTE)v12 != '0' || BYTE1(v12) != 'R' || BYTE2(v12) != 'r' || HIBYTE(v12) != 'e' || (_BYTE)v13 != 'C' || BYTE1(v13) != '+' || BYTE2(v13) != 'i' || HIBYTE(v13) != ('|') || (_BYTE)v14 != '!' || *(_WORD *)((char *)&v14 + 1) != '}' ) { puts("This is not flag"); } else { v19 = &v9; printf("Flag is %s\n", &v9); } return 0; }
全部つなげるとフラグが得られる。
FLAG : FLAG_200{(0RrcC+il!}