티스토리 뷰






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
링크
«   2025/01   »
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
글 보관함