티스토리 뷰

reversing

디미ctf 2017 rev 본선 50

slyfizz 2018. 11. 9. 17:59

컴퓨터를 정리하던 중 예전에 다운로드 받았던 리버싱 문제들을 발견했다.


TooEASY.exe


폴더명은 디미고 본선 리버싱50이었는데 정확히 무슨 ctf였는지 모르겠다.

디미ctf 2017 본선 문제였다고한다.

그당시에는 풀지못해서 다운로드만 해놓고 손절했던것같은데 지금보니 쉬운 문제였다.


srand에 seed값으로 0x3FD1CC7을 주기 때문에 고정된 값이 나온다.

즉 그 값들을 테이블로 이용해서 브루트포스를 돌릴 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import string
flag=""
table=[0x4D,0x0CB,0x0C3,0x0BB,0x19,0x0A,0x1A,0x7F,0x50,0xF8,0x18,0x08,0x89,
0x0C1,0x0A8,0x0CF,0x0BA,0x0BE,0x0EC,0x75,0x90,0x0E2,0x23,0x6D,0x0A4,
0x0B7,0x35,0x0F5,0x0D1,0x9A,0x32,0x1A,0x8E]
random_table=[0x29,0xa2,0xae,0xd2,0x7e,0x65,0x61,0x08,0x31,0x8a,0x75,
0x7d,0xf9,0xfe,0xf7,0xa1,0xd5,0xd1,0x83,0x2a,0xf3,0x8d,0x4f,0x09,
0xd1,0xc7,0x6a,0x9c,0xa2,0xf3,0x46,0x25,0xf3,0x7d,0x75,0x7b]
for i in range(len(table)):
    for j in string.printable:
        k=ord(j)
        m=(random_table[i]|k)&(~(random_table[i]&k)+256)
        if m==table[i]:
            flag+=j
print(flag)
 
 
 
 
 
cs


난 처음에 랜덤값 테이블 구하느라 노가다를 했는데 같은 동아리 친구를 통해 seed값만으로 편하게 브루트포스를 

돌릴 수 있다는 사실을 알게되었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from ctypes import *
import string
 
libc = CDLL('msvcrt')
flag = ""
 
seed = 0x3FD1CC7
 
libc.srand(seed)
table=[0x4D,0x0CB,0x0C3,0x0BB,0x19,0x0A,0x1A,0x7F,0x50,0x0F8,0x18,0x08,0x89,
0x0C1,0x0A8,0x0CF,0x0BA,0x0BE,0x0EC,0x75,0x90,0x0E2,0x23,0x6D,0x0A4,
0x0B7,0x35,0x0F5,0x0D1,0x9A,0x32,0x1A,0x8E]
for i in range(len(table)):
    v4 = libc.rand() % 256
    for j in string.printable:
        k=ord(j)
        m=(v4|k) & (~(v4&k))
        if m==table[i]:
            flag+=j
print (flag)
cs


또한 linux와 window는 서로 seed값이 같아도 랜덤값 테이블이 다르게 나온다는 사실도 새로 알았다. 

flag= dimigo{warmup?_nooo_coldup_isit?}


'reversing' 카테고리의 다른 글

나보려고 만든 rev,misc 꿀팁 소스  (0) 2019.03.13
디미ctf 2018 mm  (0) 2018.11.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
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
글 보관함