본문 바로가기
CTF./Asis CTF Quals 2016

Warm up Write-Up #ASIS CTF Quals 2018

by 낭람._. 2022. 8. 8.
반응형

Points : 27
Solves : 283
Description :

Must-Have Pre-Workout Warm up Challenge.

 

파일을 다운로드 받으면 warmup 파일이 있다.

 

 

ExeinfoPE 로 확인해보니 Text 파일이며 #define M 37로 시작한다는 것을 알 수 있다.

 

 

VScode로 확인해보면 define 이 있고, 무언가 쭉 있다.

 

https://codebeautify.org/c-formatter-beautifier

 

Best C Formatter and Beautifier

C Formatter will help to format, beautify, minify, compact C code, string, text. Format, Save, Share

codebeautify.org

 

C format과 비슷해서 beautifuer로 돌리고, gcc 컴파일을 하면 여러가지 오류가 나오는데, 오류를 해결해 준 뒤 실행한다.

 

#include<stdio.h>
#include<math.h>
#include<stdint.h>
#define M 37
#define q (2 + M / M)
#define v (q / q)
#define ef ((v + q) / 2)
#define f (q - v - ef)
#define k (8 - ef)
struct b {
  int64_t y[13];
}
S;
int m = 1811939329, N = 1, t[1 << 26] = {
  2
}, a, * p, i, e = 73421233, s, c, U = 1;
void g(int d, int h) {
  for (i = s; i < 1 << 25; i *= 2) d = d * 1 * d % m;
  for (p = t; p < t + N; p += s)
    for (i = s, c = 1; i; i--) a = p[s] * (h ? c : 1 ) % m, p[s] = (m * 1  + * p - a) * (h ? 1 : c) % m, * p = (a * 1  + * p) % m, p++, c = c * 1 * d % m;
}
void l() {
  while (e /= 2) {
    N *= 2;
    U = U * 1 * (m + 1) / 2 % m;
    for (s = N; s /= 2;) g(136, 0);
    for (p = t; p < t + N; p++) * p = * p * 1 ** p % m * U % m;
    for (s = 1; s < N; s *= 2) g(839354248, 1);
    for (a = 0, p = t; p < t + N;) a += * p << (e & 1), * p++ = a % 10, a /= 10;
  }
}
int z(int n) {
  int y = 3, j, c;
  for (j = 2; j <= n;) {
    l();
    for (c = 2; c <= y - 1; c++) {
      l();
      if (y % c == 0) break;
    }
    if (c == y) {
      l();
      j++;
    }
    y++;
  }
  l();
  return y - 1;
}
int main(int a, char* pq){
  int b = sizeof(S), y = b, j = M;
  l();
  int x[M] = {
    b - M - sizeof((short int) a),
    (b >> v) + (k << v) + (v << (q | ef)) + z(v + (ef << v)),
    (z(k * ef) << v) - pow(ef, f),
    z(((j - ef * k) | (ef << k >> v) / k - ef << v) - ef),
    (((y + M) & b) << (k / q + ef)) - z(ef + v),
    ((ef << k) - v) & y,
    y * v + v,
    (ef << (q * ef - v - (k >> ef))) * q - v,
    (f << q) | (ef << (q * f + k)) - j + k,
    (z(z(z(z(z(v))))) * q) & (((j / q) - (ef << v)) << q) | (j + (q | (ef << v))),
    y | (q + v),
    (ef << ef) - v + ef * (((j >> ef) | j) - v + ef - q + v),
    (z(j & (b << ef)) & (z(v << v) << k)) - (q << v) - q,
    (k << q) + q,
    (z(y) >> (ef << v)) + (z(k + v)) - q,
    (z(z(k & ef | j)) & b | ef | v << f << q << v & ef >> k | q << ef << v | k | q) + z(v << v) + v,
    (ef >> v) * q * z(k - v) + z(ef << ef & q | k) + ef,
    z(k << k) & v & k | y + k - v,
    z(f >> ef | k >> ef | v | k) * (ef >> v) * q,
    (ef << k - ef << v >> q << ef * ef) - j + (ef << v),
    z(ef * k) * z(v << v) + k - v,
    z((z(k) << z(v))) & y | k | v,
    z(ef << ef << v << v) / ef + z(v << ef | k | (b >> q) & y - f) - (ef << q) + (k - v) - ef,
    k << (ef + q) / z(ef) * z(q) & z(k << k) | v,
    ((z(y | j >> k * ef)) % ef << z(v << v << v) >> q << q | j) / ef + v,
    (j - ef << ef << v * z(v >> v << v) >> ef) / ef % z(k << j) + q,
    z(k - v) + k | z(ef << k >> v << f) - z(q << q) * ef >> v,
    (z(ef | y & j | k) % q | j + ef << z(k | ef) % k << q | ef | k << ef << q / ef | y / ef + j >> q) & k << j | ef + v,
    84,
    z(v * ef << ef << q) * q % ef << k | k | q - v,
    ((z(20) * v) | (f >> q) | (k << k)) / ef - (ef << (v * q + ef)) - (k << q) + z(k) - q
  };
  while (j--) {
    putchar(x[M - v - j]);
  }
  printf(" From ASIS With Love <3\n");
  return 0;
}

 

헤더들을 추가하고, 함수의 반환값 수정을 했다.

 

해당 코드를 컴파일 하고 실행하면 flag를 얻을 수 있다.

 

 

+ 실행 시간이 오래 걸리기 때문에 기다리다 보면 flag가 출력된다. (실행 해놓고 구글링하다가 flag가 나왔다..)

 

반응형

댓글