> For the complete documentation index, see [llms.txt](https://docs.cooku222.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cooku222.kr/project-remind/contest/undefined/osu-gaming-ctf-2025.md).

# Osu!gaming CTF 2025

RubiyaLab으로 참여했다.&#x20;

<figure><img src="https://blog.kakaocdn.net/dna/dCsAw5/dJMcafZdvbj/AAAAAAAAAAAAAAAAAAAAAPr7Jyqfmiko_U7h0onYCZkcRx7r5ulM5xd3epFzXyVB/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=LmlS4W%2BO75DElRI6yNIt9JV2%2BsE%3D" alt="" height="492" width="913"><figcaption><p>1위하고 있었는데 아쉽다.</p></figcaption></figure>

3솔했다고 카운트 됐는데 하나는 얻어탄거고 실질적(?) 2솔했다. \
&#x20;\
Crypto / pls-nominate&#x20;

```
from math import prod

ns = [250595396282063209494575040924347535718377683482891600245762578107828862102674761114596255712438613333084596184792828788407383247558654559454089469986479081755983932855108019303831103066796233258382489582930536579371270189763162153515702860564938568045151352777820047894231299381399970139347989102071591624967158663442340607621438098266100701196825065519485094630829410736139969891010792546625692049625954656831699035171996469050264653519, 274193894251894220756361545934981580561716587343502325614560502213231097664469582415896327192024233714369720707686115433619798180404789138894067772483823865845960858748702597162370083356345247341014451005796413454404641015516131648586490172413946109076519615677569833823093216546284937656690546486895353267404868698676199564604463636499575466246860736708986174600028222786416474243294353345680209117811499529853520907091701228114817603341, 250799342406461286072464998395337312450245201655027007410237718631499754452822255347456526289099898965321822671514782488741429427305776533799167428860480805487315744950556177330105418061977431001775317350105402223927656557524000999352457757910475375628290615583082601813818635461940350546377443417651889260364946457646723831198413138381669914264256219982213937975414376723125047495586971424241557485231775101178049132539231505246677535311, 424944038623958440933855665649910939213053530859402286143675513220496021786445337272966523453996205752202713497414819150875478398393046433188515528170856189163826639434032436582059667688688880862276540443913407720932133045261989787061306952765245738545030903458101323357019464537917143233906507656465350475977450213990615572573474700619979502153864626401863294100140176446546365233603532530624614938982882757207592863414287369042546971519, 190902360498923981884467164531021372209737709612751157876047387113070619788864781987406983172298076877277648095765822757629049183301893699559004938030166520411955041284763767367633388446007417241478444104664237424445213634253699407015432110027972438018815169650491766550691229860103594060212173628624522421052861949630723039778975476515078589820738377723637869903050748150998629965678848786824733474968760721078438148119740362699143145661]
cs = [123451724931477698812069511077458860459906769716993869507604368750013627155203649026878565706523272034474865506508962044958969096479439140090681403538412644329412752922637248582028201974150208943081418296518937380419465322558643434318990712657710219963788075009287648875763482189708828745866942138140694074154628539909488581608681566648945293332282252866416448399029058170554552880389525160322280616124297247776106117085199571903380300602, 25521272212086093871680233376409740841684880441320606653986457586214228433726846827063346040622596803682405351090250464809787622301562945715858274147064371839443966925136930647541454865892780911461753966896009773200289476756676124794087249400266226027218836477923252144492106017794796924100502787481309583584738175138358520327875032255246435556182629496953900460417813322557030951101538854106453327597012091626682332420269075467900021711, 185794248348100154380171644978622218400518238250460812348815837123659842567285820889770059992960889881347901994420631735102166283167843240900863871790624347481898956733174665116495731603736544724548220276282583347110470600528846477853732162784786525839648496719341390265839130761362980916014963941737879183454424512265005367317359376039242988696224018798645014519276397488302687294083964113652155465518932071360150626192713920598188877877, 253586754830185402755129821208401339617813079433078480306550244166018490731187464131167959996920120199131859308803805312785667542198282217092146066559207637833505962392131719788571007971893923218099583927291388588829681723690416962688366275898952085934742953047229390090702589945168823704791405472122768397486450092804662113840124827388352338015003693741233274505595280978468538153880244070082267537407664878646371738748713917087874183934, 179921278884389482689970386454786826216817164768869732618011304299464646110222440114625532548731013316437178194666578920837571688939194292542951671294588526331670811293769249832666220726222224721812635640949602967313922271367769076173808739323285134139353621782784562334885703861549547716097420971226456620806331145247840335617343331077891979324239020388123429770254863290698575175653976557893390825861821917810477967554648397683909903482]

prefix = b"hello there can you pls nominate my map https://osu.ppy.sh/beatmapsets/2436259 :steamhappy: i can bribe you with a flag if you do: "

def crt(residues, moduli):
    N = 1
    for m in moduli: N *= m
    x = 0
    for (a, m) in zip(residues, moduli):
        Ni = N // m
        inv = pow(Ni, -1, m)
        x = (x + a * Ni * inv) % N
    return x, N

def int_nth_root(n, k):
    lo, hi = 0, 1 << ((n.bit_length() + k - 1)//k)
    while hi**k <= n: hi <<= 1
    while lo + 1 < hi:
        mid = (lo + hi) // 2
        p = mid**k
        if p == n: return mid, True
        if p < n: lo = mid
        else: hi = mid
    return lo, (lo**k == n)

C, N = crt(cs, ns)

root = None
for k in range(1000000):
    r, ok = int_nth_root(C + k*N, 5)
    if ok:
        root = r
        print("k =", k)
        break

m = root.to_bytes((root.bit_length()+7)//8, 'big')
flag = m[len(prefix):]  
print(flag.decode())
```

&#x20;CRT에 K를 늘려 계산해준다.\
\
OSINT / weebbolt

```
loner
diary
ongaku
ghost - 34°49'39.1"N 131°59'19.9"E
bench
punchdrunk
cafe -  44250 California 60, Desert Center, CA 92239 미국, https://maps.app.goo.gl/QHyLN3vY5soJPm4QA
roe - 0268 Oslo, 노르웨이(비겔란 조각공원, 확인이 필요)
technology - https://www.google.com/maps/place/나가사키+바이오+파크/@32.9884961,129.7846928,16.31z/data=!4m6!3m5!1s0x356abb0261bec585:0xf1f109703254736c!8m2!3d32.9881189!4d129.7832963!16s%2Fg%2F121q4d06?entry=ttu&g_ep=EgoyMDI1MTAyMi4wIKXMDSoASAFQAw%3D%3D
pumpitup-
```

지오신트 문제다. 구글 이미지 검색 써서 10개 장소 노가다로 찾아 풀어준다.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cooku222.kr/project-remind/contest/undefined/osu-gaming-ctf-2025.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
