티스토리 뷰
2018 HackingCamp CTF의 PPAP라는 문제입니다.
문제 파일이 jar 파일이네요.
자바 디컴파일러로 열어보겠습니다.
그런데 아무것도 보이지 않네요..
CFR 자바 디컴파일러로 직접 문제 파일의 소스코드를 추출하겠습니다.
숫자들이 담겨있는 엄청나게 긴 배열이 나왔습니다.
저 배열 안에 있는 숫자들을 문자로 바꾸고 파일로 만들어보겠습니다.
배열 안에 있는 숫자들과 0xff를 & 연산해주어서 문자로 만든 뒤 arrby.class 파일에 저장했습니다.
arrby.class 파일의 내용을 확인해보겠습니다.
입력받은 문자열의 길이와 내용이 flag와 같다면 배열 안에 있는 값들을 복호화시켜준 뒤 flag를 출력하는 프로그램이군요.
이 코드를 이용해서 flag를 출력해주는 코드를 짜보겠습니다.
from z3 import *
arry = [75, 68, 74, 66, 67, 108, 75, 79, 115, 119, 123, 127, 99, 103, 107, 111, 2, 23, 27, 31, 3, 7, 11, 15, 51, 55, 59, 63, 35, 39, 36, 47, 176, 201, 212, 223, 162, 217, 168, 192, 151, 247, 251, 227, 246, 232, 143, 239, 147, 139, 248, 144, 131, 228, 149, 162]
input = [BitVec('input[%d]' % i, 8) for i in range(len(arry))]
s = Solver()
for i in range(len(input)):
now = input[i]
s.add(arry[i] == (now ^ i + 3 * (i + 1)))
print s.check()
if s.check() == sat:
print bytearray([s.model()[input[i]].as_long() for i in range(len(input))])
참조 : https://www.twitch.tv/videos/236121518##
이 코드를 실행시켜주면..
flag가 출력됩니다!
'Reversing > Write-up' 카테고리의 다른 글
[17th HackingCamp CTF] SWAP WORLD 풀이 (0) | 2018.03.16 |
---|---|
[17th HackingCamp CTF] CSdroid 풀이 (0) | 2018.03.13 |
[17th HackingCamp CTF] EZ 풀이 (0) | 2018.03.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- pwnable
- 17th HackingCamp CTF
- 안드로이드
- Level 01
- Unity
- Level 04
- Level 03
- Write-up
- ftz
- wargame
- HackingCamp
- Basic RCE
- xcz.kr
- Reversing
- Android
- Level 05
- c++
- CodeEngn
- Level 06
- hackerschool
- 풀이
- 유니티
- C#
- 안드로이드 멘토링
- unity2d
- reversing.kr
- Advance RCE
- 멘토링
- Level 02
- Programming
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함