본문 바로가기

CTF/Write-up

AlexCTF Reverse Engineering

https://ctf.oddcoder.com/


주말에 CTF가 두개씩이나 있어서 이거 문제를 풀다가 다른 CTF로 넘어갔다.




리버싱 50

리버싱 50점은 그냥 보면 보였고




리버싱 100

리버싱100점은 C++로 제작되었는데

이 부분이 배열값에서 정해진 리스트대로 값을 뽑는부분인데


어셈코드는 이렇다


위에 aL3t_me~~~~이 문자 배열에서 밑에 저 리스트 0x36 0x65등등 이런값으로 값을 불러온다


근데 잘 안되가지고 일일이 하나씩 찾았다.


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
= "L3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t"
result = ""
 
result += a[0x24]
result += a[0x00]
result += a[0x05]
result += a[0x36]
result += a[0x65]
result += a[0x07]
result += a[0x27]
result += a[0x26]
result += a[0x2d]
result += a[0x01]
result += a[0x03]
result += a[0x00]
result += a[0x0D]
result += a[0x56]
result += a[0x01]
result += a[0x03]
result += a[0x65]
result += a[0x03]
result += a[0x2d]
result += a[0x16]
result += a[0x02]
result += a[0x15]
result += a[0x03]
result += a[0x65]
result += a[0x00]
result += a[0x29]
result += a[0x44]
result += a[0x44]
result += a[0x01]
result += a[0x44]
result += a[0x2B]
print result
cs


ALEXCTF{W3_L0v3_C_W1th_CL45535}




리버싱 250

이문제는 파이썬 pyc 파일이 주어진다.

디컴파일을 하면 아주 간단한 소스가 나오는데

내가 입력한 문자를 5자리씩 끊어서 md5로 인코딩하고 16진수로 바꿔서 md5s와 비교한다.

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
36
import md5
md5s = [174282896860968005525213562254350376167,
 137092044126081477479435678296496849608,
 126300127609096051658061491018211963916,
 314989972419727999226545215739316729360,
 256525866025901597224592941642385934114,
 115141138810151571209618282728408211053,
 8705973470942652577929336993839061582,
 256697681645515528548061291580728800189,
 39818552652170274340851144295913091599,
 65313561977812018046200997898904313350,
 230909080238053318105407334248228870753,
 196125799557195268866757688147870815374,
 74874145132345503095307276614727915885]
 
 
 
for x in range(len(md5s)):
    print str(hex(md5s[x])).replace("0x""").replace("L","")
 
print len("68cb5a1cf54c078bf0e7e89584c1a4e")
result = ""
result += "ALEXC"
result += "TF{dv"
result += "5d4s2"
result += "vj8nk"
result += "43s8d"
result += "8l6m1"
result += "n5l67"
result += "ds9v4"
result += "1n52n"
result += "v37j4"
result += "81h3d"
result += "28n4b"
result += "6v3k}"
print result
cs

ALEXCTF{dv5d4s2vj8nk43s8d8l6m1n5l67ds9v41n52nv37j481h3d28n4b6v3k}




코딩 100

다음은 코딩 100점이다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from socket import *
from time import sleep
 
= socket(AF_INET, SOCK_STREAM)
s.connect(("195.154.53.62"1337))
 
data = s.recv(1024)
 
for x in range(501):
    data2 = data.split(":")[1].strip()
    print data2
    data3 = eval(data2.replace("=""").strip())
    data3 = str(data3)
    print data3
    s.send(data3+"\n")
    data = s.recv(1024)
    print data.split(":")[0].strip()
 
cs

처음에 100번 했는데 안나와서 1000번했더니 500번만에 플래그를 알려주었다.

'CTF > Write-up' 카테고리의 다른 글

BSidesSF Reversing  (0) 2017.02.14
codegate 2017 angrybird  (2) 2017.02.11
BITSCTF Riskv and Reward  (0) 2017.02.05
insomnihack CTF bender_safe  (0) 2017.01.22
Plaid ctf prodmanager  (0) 2017.01.16