Great Binary 50
주어진 파일을 열어보면 바이너리가 적혀있다.
아래 사이트를 이용해 아스키로 변환하면 끝.
https://www.branah.com/ascii-converter
HackCTF{crypto_v2ry_easy_pr0b1em}
Smooth CipherText 100
Rijvsmysmysmy Itovwyrc! Ns wyy ixsu Glm kq G? wc lkqc sw qwsmdlkkr sr...M ixsu fipi acvp urer iss geld! Md iss mel niastfov rrmq mvwzxmqvyw, cme gyx kcd xfo gmbvcmx yxwuov. qy, jjkk gc LymoADJ{t_tzwi_3vxbd0p3_vff.afy'q_wzoxpq_dp_qfz}
LymoADJ == HackCTF
m과 a가 C에 중복으로 대응되는 것으로 보아, 카이사르는 아니다. 그래서 비제네르로 돌려봤다.
본문 key = key
플래그 key = n
Classic Cipher -1 100
Hint : [::-1]
?y4zl4J_d0ur_b0f_0K zp nhsm
[::-1] 은 reverse. 즉 글자 순서를 뒤바꿔주면 된다.
그 다음에 카이사르를 돌리니 플래그가 나왔다.
HackCTF{D0_y0u_kn0w_C4es4r?}
RSA
200
RSA 알고리즘을 이용하여 값을 해독해보자!
파일에 나와있는 c, p, q, e 는 RSA 대한 파라미터 값이다.
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
https://mandu-mandu.tistory.com/110 이 글에 나온 방법대로 따라하면 된다.
그러면 값이 12058e43d9e0c22559c19774 가 나오는데, 이를 10진수로 변환해서 플래그 인증하면 된다.
Classic Cipher -3
200
RSA2
200
(n, c) = 675517326695494061190287679557796696358902817969424171685361, 0xe3712876ea77c308083ef596a32c5ce2d7edf22abbc58657e
n 을 소인수분해 하여 p와 q를 구한다.
https://www.alpertron.com.ar/ECM.HTM
e를 65537 기본으로 잡고 복호화.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
def egcd(a, b):
x,y, u,v = 0,1, 1,0
while a != 0:
q, r = b//a, b%a
m, n = x-u*q, y-v*q
b,a, x,y, u,v = a,r, u,v, m,n
gcd = b
return gcd, x, y
def main():
p = 804811499343607200702893651293
q = 839348502408870119614692320677
e = 65537
ct = 0xe3712876ea77c308083ef596a32c5ce2d7edf22abbc58657e
# compute n
n = p * q
# Compute phi(n)
phi = (p - 1) * (q - 1)
# Compute modular inverse of e
gcd, a, b = egcd(e, phi)
d = a
print( "d: " + str(d) );
# Decrypt ciphertext
pt = pow(ct, d, n)
print( "pt: " + str(pt) )
if __name__ == "__main__":
main()
|
cs |
pt = plain text
평문값을 hex로 변환한 뒤에 ascii로 바꾸면 flag가 나온다.
RSA3
250
n = 10283681839193276126097189449431804469761940095295471888398234447479454966284763902940257262270896218602885591849219329295416054197234326881779747263501982465102957508563705432633950651360492963151374387619070656704554971992649022858286686244477458518219811343940208016922937570643216329114427596008380607613093481777894261584227765149699743645734317383348201997748556656749211035951710759363655486663011079526697122026161182876988679088458171192764980121987583057238040415225285169219391637708267493561674900564748140379192079752942242600521017002960185256025253900075152690586476143729320416895984549165574371936823
c = 0x5c93ba85692a8b3981a5d47be0e80d129b8a2f6cf4dc134547aa7e1620f6691513b1dc1d69e085c39e261c2b49026436bb243dba70a86f7fcd1a3a7e6b0f0ecfac015becad0a76e9cf208d5d31e2b4865
e = 3
n은 매우 크고 e는 매우 작다.
c = m^e mod n = m^e
HelloCryto
350
key 길이는 14
flag 앞에는 HackCTF{ 인 것을 알고 있으니 key 14자리중 8자리 알아낼 수 있고
메세지 뒤에 key값이 붙은 것이 다시 key 앞에 8자리랑 연산을 하니 key 뒷자리도 알아낼 수 있음.
XOR
400
역연산돌리자
'WAR GAME > HackCTF' 카테고리의 다른 글
HackCTF Reversing 카테고리 풀이 (0) | 2019.08.29 |
---|---|
HackCTF Pwnable [Basic_BOF #1] 풀이 (0) | 2019.07.24 |
HackCTF Forensics 카테고리 풀이 (0) | 2019.07.20 |
HackCTF MISC 카테고리 풀이 (0) | 2019.07.18 |
HackCTF Web 카테고리 풀이 (0) | 2019.07.18 |