1. 평소와 다른 인터넷 [100]
--to be added--
2. 0-day is not zeroday [200]
파일을 winhex로 열면 0x200부터 0x2a1까지 이상한 값으로 채워진 것을 볼 수 있는데, 78 9C로 시작하는 것으로 보아 zlib으로 압축된 것을 알 수 있다.
이를 파이썬으로 압축을 풀면 이상한 문자열이 나온다.
이를 hex로 encode해서 출력하면 69210710으로 도배되어있고, 중간에 셸코드 비스무리한게 있는 것을 볼 수 있다.
이를 새로운 바이너리에 붙여넣고 IDA로 열면 결과가 다음과 같다.
0x57주소에서부터 push를 여러번 하는 것을 볼 수 있는데, 값을 보니 문자열인 듯하다. 이를 해석하면 flag를 얻을 수 있다.
print ' RjFORF83SDROS1kwVQ=='.decode('base64')
Flag: F1ND_7H4NKY0U
3. 무엇을 숨기고 있는 걸까 [200]
app-release.apk파일이 주어진다. 확장자를 zip으로 바꿔서 dex파일을 추출하고 dex2jar을 이용하 jar로 변환한 뒤 jdgui를 통해 jar의 소스를 볼 수 있다. 앱을 디컴파일하는 방법은 구글에도 많이 나와있다.
j함수는 파이썬으로 바꿔서 실행하면 다음과 같다.
print "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[27] +\
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[15] +\
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[8] + \
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[49] +\
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[2] + \
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[11] +\
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[4] + \
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[40] +\
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[7] + \
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[3] + \
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[18] +\
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[14] +\
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[3] + \
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[8] + \
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[6] + \
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()_?"[9]
# WhoBestGirlgroup
또 a함수를 살펴보면 paramString1을 paramString2로 복호화하는 것을 알 수 있고, onClick 함수를 살펴보면 a(j, i)를 호출한다.
그런데 i는 비어있으므로 j를 어떻게해서든 복호화시켜야 할 것으로 보인다.
처음엔 j를 복호화하면 WhoBestGirlgroup이 되는 줄 알고 AES known plaintext attack을 찾아보는데 이는 불가능하다그래서 좌절하다가 이미 알고 있는 문자열(j, k, "WhoBestGirlgroup")가지고 P와 C를 이리저리 바꿔보다가 다음을 발견했다.
from Crypto.Cipher import AES
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s : s[0:-ord(s[-1])]
def decode(c, key):
d = AES.new(key, AES.MODE_CBC, "\x00"*16)
return d.decrypt(c)
print decode('BHNRDV1XGb49eg2fgKiExfJ4l5UyBNpVEUQtcDxciEc='.decode('base64'), "WhoBestGirlgroup")
# AoAisGirlgroup!!
따라서 AoAisGirlgroup!! 가 flag인줄 알고 시도해봤는데 틀렸다고나와서 멘붕에 빠졌는데, 이 문자열을 key로 또다시 이것저것 하다가 다음을 발견했다.
print decode('2qydvlQqANT8eI7gok5jPQ=='.decode('base64'), "AoAisGirlgroup!!")
# Hdc0nisAwesome
약간의 guessing이 필요한 문제였다.
Flag: Hdc0nisAwesome
'CTF' 카테고리의 다른 글
Boston Key Party 2016 Cookbook (pwnable 6) Writeup (EN) (0) | 2016.03.07 |
---|---|
Boston Key Party 2016 Cookbook (pwnable 6) Writeup (KR) (0) | 2016.03.07 |
CSAW CTF 2015 contacts (exploitable250) writeup (exploit code only) (0) | 2015.09.22 |
CSAW CTF 2015 rhinoxorus (exploitable500) writeup (KR) (0) | 2015.09.21 |
Defcon23 (2015) mathwhiz (baby's first 1) writeup (EN) (0) | 2015.05.21 |