반응형

Programming 9

[CTFlearn] Read in Color - 프로그래밍 / Zsteg

CTFlearn 에서 제공되는 프로그래밍 문제 프로그래밍 문제인데 프로그래밍 안하고 풀어버렸다. 문제 설명에 힌트가 써있다. Python 의 Pillow 라이브러리가 도움이 될것이라고 알려준다. PIL을 사용하는 문제는 이전에도 많이 다뤄서 아마 비슷한 유형을 것이다. (https://hackingstudypad.tistory.com/588) 이게 문제에서 주어지는 이미지다. 6개의 색깔이 있는 블럭이 보이는데 아마 PIL 라이브러리로 각 픽셀의 RGB 값을 뽑은 뒤, 그 값을 ASCII 코드로 바꾸면 플래그가 나올 것이다. 전형적인 문제 유형이다. 조금 다른 방법으로 시도해봤다. zsteg 라는 도구가 있는데 png 파일과 관련해 스테가노그래피 문제를 풀 때 사용하는 도구이다. 앞에 -a 옵션을 줘서 ..

워게임/CTFlearn 2023.09.01

[CTFlearn] The Adventures of Boris Ivanov Part 2 - 프로그래밍 / PIL

CTFlearn에서 제공하는 프로그래밍 카테고리의 Hard 난이도 문제 지난 Old memories 와 비슷한 문제이다. (https://hackingstudypad.tistory.com/584) 이번 문제 역시도 스테가노그래피와 관련이 있다. 문제 설명을 보면 중요한 정보가 담긴 종이가 찢어졌는데 이걸 복원해야 한다고 한다. 원본의 크기는 500*500 이라고 주어진다. 문제 파일을 열어보면 정말 사진을 세절기에 넣은것처럼 세로 1픽셀, 가로 500픽셀로 500 조각이 나있는 이미지를 볼 수 있다. 프로그래밍 카테고리에 있으니 프로그래밍 해서 이걸 다 이어붙이라는 의미인듯 하다. 이번 문제는 Python PIL 라이브러리를 이용해서 풀었다. PIL은 Python Imaging Library의 약자로 파..

워게임/CTFlearn 2023.08.05

[CTFlearn] Python Reversal - 프로그래밍

CTFlearn의 여든 여섯번째 문제 지난 문제에 이어서 프로그래밍 카테고리의 Hard 난이도 문제이다. (https://hackingstudypad.tistory.com/469) 이번엔 제공되는 언어가 파이썬이다. import base64 as rtfd import webbrowser import time def mikeSwift(cre): sto = [] gre = "" for i in cre: sto.append(i+str(len(i))) sto.append("h4ck" + i) for i in sto: gre+=i return gre def prompt(): return bytes(input("Welcome to the loading dock. What is the password?\t"), 'u..

워게임/CTFlearn 2023.04.12

[CTFlearn] Is it the Flag? (JAVA) - 프로그래밍 / Python

CTFlearn의 여든 다섯번째 문제 이번엔 Hard 난이도의 프로그래밍 문제이다. 갈수록 어려운 문제가 나와서 이젠 못풀수도 있겠다 싶다. 문제 설명을 읽어보면 플래그는 6글자의 alphanumeric characters 라고 한다. alphanumeric 은 a ~ z, 0 ~ 9 까지의 문자열을 모두 합한걸 의미한다. public class IsItTheFlag { public static boolean isFlag(String str) { return str.hashCode() == 1471587914 && str.toLowerCase().hashCode() == 1472541258; } public static void main(String[] args) { String flag = "-----..

워게임/CTFlearn 2023.04.07

[CTFlearn] Weird Android Calculator - 프로그래밍 / JADX / Python

CTFlearn의 여든두번째 문제 이번엔 프로그래밍과 관련한 문제이다. 문제 설명을 읽어보면 이상한 안드로이드 계산기라고 하는데 이상한점을 찾아내라고 한다. 문제를 풀때 안드로이드 기기는 필요없다고 한다. 문제에서 주어지는 것은 WeirdCalculator.apk 파일이다. apk 파일이 주어지는 jadx 라는 도구를 사용하면 유용하다. (https://github.com/skylot/jadx) 자바 디컴파일러로 apk 파일을 넣으면 디컴파일해서 java 소스코드를 볼 수 있게 해준다. jadx 를 실행시킨 후 문제 파일을 열면 이런 화면이 나온다. 왼쪽 메뉴에서 가장먼저 MainActivity 부분을 확인해봤다. 특별한게 없는거 같아서 아래쪽에 Parser 를 눌러보니 AnonymousClass1Int..

워게임/CTFlearn 2023.03.30

[CTFlearn] Adoni Assembler Chall - 프로그래밍

CTFlearn의 여든번째 문제 사실 이 문제 전에 AudioEdit 라는 엄청 어려운 웹해킹 문제가 있는데 내가 못푸는건지 문제 서버가 이상한건지 계속 에러가 나서.. 일단 스킵했다. 이번 문제는 프로그래밍 카테고리에 있지만 사실 문제푸는데 프로그래밍은 필요없다. 난이도와 점수가 그걸 증명한다. 문제 설명을 읽어보면 대충 주어지는 adoni.asm 파일에서 플래그를 찾으라고 한다. 문제에서는 adoni.asm 과 readme 파일이 주어진다. readme 파일은 문제에 대한 친절한 설명과 함께 어셈블리 프로그래밍에 대해 공부할 수 있는 유튜브 링크까지 주어진다. 사실 이번문제는 복잡하게 생각안해도 풀 수 있다. adoni.asm 파일을 열어보면 이렇게 생겼다. 어셈블리 코드를 몰라도 된다. 가장 처음에..

워게임/CTFlearn 2023.03.26

[CTFlearn] The Credit Card Fraudster - 프로그래밍 / Python

CTFlearn 의 쉰다섯번째 문제 이번엔 Easy난이도의 프로그래밍 문제이다. 이전문제들과 달리 뭔가 설명이 길어서 조금 긴장했다. 내용을 대강 읽어보면 INTERPOL에서 추적하고 있는 신용카드 사기꾼을 붙잡았는데 사기꾼이 가지고 있던 영수증에 찍힌 신용카드 번호의 일부분을 보고 신용카드 전체 번호가 어떻게 되는지 알아내는것이 목표이다. 힌트는 두가지가 주어진다. 1. 신용카드 번호는 123457의 배수이다. 2. 신용카드 번호 는 Luhn 알고리즘으로 검증할 수 있다. 한번 파이썬으로 구현해본다. cardnum_f = '543210' cardnum_b = '1234' for i in range(999999): cardnum_m = ('00000' + str(i))[-6:] cardnum = int(..

워게임/CTFlearn 2023.01.11

[CTFlearn] Image Magic - 프로그래밍 / 포렌식 / PIL

CTFlearn의 쉰세번째 문제 이번엔 처음으로 나온 프로그래밍 카테고리의 문제이다. 사실 여기서 분류는 프로그래밍으로 했지만 거의 포렌식 문제라고 생각한다. 간만에 CTFlearn에서 생각해볼 만한 문제가 나와서 재미있었다. 문제 설명을 읽어보면 누군가가 사진의 픽셀을 가져와 재구성했다고 이걸 PIL 모듈을 이용해 복원할 수 있냐고 물어본다. 이미지가 변경되기 전 Width는 304라는 힌트도 주어진다. 이것이 문제에서 주어지는 out copy.jpg 파일이다. 아무것도 없는것 처럼 보이는데 사실은 그게 아니다. 이미지를 우클릭해 속성을 보면 너비가 27968, 높이가 1인 것을 볼 수 있다. 아까 문제 설명에서 본대로 누군가가 이미지의 픽셀을 일렬로 쭉 늘어놓은 것이다. 일단 원래의 높이를 구해준다...

워게임/CTFlearn 2023.01.06

[CTFlearn] Simple Programming - 프로그래밍 / Python

CTFlearn의 열아홉번째 문제 이번엔 프로그래밍 문제이다. 해킹대회를 참가할때마다 느끼는 거지만 프로그래밍은 해킹하는데 필수로 잘해야 하는것 같다. 어려운 문제들은 반드시 코딩해서 풀어야 하기때문.. 프로그래밍 공부도 해야하는데 참 쉽지가 않다. 0의 개수가 3의 배수이거나 1의 개수가 2의 배수인 행의 개수를 찾는것 이것이 이번 문제의 목표이다. 말이 헷갈려서 몇번이나 읽어봤던거 같다. 문제에서 주어지는 data.dat 파일을 열어보면 이렇게 0과 1로 된 데이터들이 10000줄 들어있다. 사람이 일일이 계산하기는 불가능하기 때문에 프로그래밍이 필수이다. 여기서 각 line의 0과 1의 갯수를 센 후, 0의 개수가 3의 배수이거나 1의 개수가 2의 배수인 행를 세어주면 된다. f = open('da..

워게임/CTFlearn 2022.09.05
반응형