down을 통해 받으면 So_simple 이라는 파일이 받아진다.
이제부터는 휴대폰으로 풀어서 사진이 없다.
일단 다운로드 한 뒤에 zip을 열어보면 비밀번호를 입력하라고 한다. 브루트포스로 공격하라는 것도 아니고, 문제를 다시 읽어봤을 떄 특이한 느낌이 온다. '비밀번호가 없지는 않을까' 라는 의문이 드는 사람은 문제를 푼 거나 마찬가지..!!
비밀번호가 없어도 비밀번호로 잠겨있는 것 처럼 해줄 수 있다. '잠김 유무' 를 나타내는 flag를 손봐주면 된다.
일단 zip의 파일 구성에 대해서 잠깐 알고가야한다.
File Signature(=Header signature)은 50 4B 이다.
그리고 파일 구조는 아래와 같다. (참고 users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html )
이걸 보고, 파일 시그니처로부터 7,8번째 값이 flag를 나타낸다는 것을 알 수 있다.
그리고
이를 통해 플래그의 0번째 비트값이 암호화의 유무인 것을 알 수 있다.
Zip 파일을 열고 50 4B를 검색하면 5개인지 6개 정도의 검색결과가 나올 것이다. 이는 전부 파일 안에 들어 있는 압축된 형태의 파일 갯수를 뜻한다. 압축 파일 안에 있으면, 기존의 본인의 File Signature가 아닌 Zip의 Signature 형태를 띄는 것 같다.
그리고 파일 시그니처의 위치로부터 7,8번째 값이 flag 값인데, 전부 09 08로 되어있을 것이다.
저장 방식이 리틀 엔디안 방식이라 08 09로 보는 것이 맞다.
어쨌든 이렇게 봤을 때 09의 맨 뒤 비트인 0번째 비트를 0 으로 바꿔서 08로 만들어 준다.
모든 파일을 이렇게 해준다. 암호 속성을 없애주는 작용이다.
작업을 마친 뒤에 압축을 풀어보면 그냥 풀린다. 그리고나서 zip 파일을 한번 더 풀고 그 안의 키값을 얻어내면 된다.
키값이 대소문자와 숫자로 이루어진 문자열일텐데, Base64로 인코딩 되었다고 의심해보고 디코딩해보면 답을 얻을 수 있다.
Q_ 어떨 때 리틀 엔디안이고, 어떨 때 빅 엔디안인지 구별할 줄 알아야 할 것 같은데, 컴퓨터 환경만으로는 다운받은 파일을 추측하는게 불가능한 것 같다. 그리고 파일 시그니처는 항상 한 가지로만 설명하는데, 엔디안에 따라 나뉘어야 하는 것 아닐까? 대부분의 방식이 리틀엔디안이라고 하는데, 그러면 여태 Hex로 파일을 열었을 때엔 문자열들이 직관적으로 읽히는 순서였던 건 다 뭐지..?? 모르겠다.
-> 아마 이게 도움이 될지도
메모리 그림 참고 :
아직까지는, 내가 알던 스택에서의 메모리 구조 방식을(배열 메모리 방식 포함)기반으로 해서, 4바이트 같은 정수형 데이터를 넣을 때, 마찬가지로 스택에 쌓아올라가지만, 쌓을 때 리틀이냐 빅이냐에 따라
low <-> high 주소
12 34 56 78
low <-> high 주소
78 56 34 12
이렇게 쌓아된다는 걸로 생각..!
+
예전에 리버싱 공부할때, 매개변수의 정수값 넣을 때 마찬가지로 내가 알던 기반의 스택 메모리 구조-(아래로 갈수록 큰 주소, 위로 갈수록 작은 주소이며 각 데이터를 스택 안에서 아래에서 위로 쌓아올라감. 그리고 배열은 내가 알고 있는 메모리 기반으로 작동(머리가 가장 낮은주소, 꼬리가 가장 높은주소의 영역으로 할당))-에서 스택에 쌓는데, 데이터 저장 방식이 빅이냐 리틀이냐에 따라
12 | 78
34 | 56
56 | 34
78 | 12
로 갈렸던 것 같음.
'[포렌식] > [SuNiNaTaS]' 카테고리의 다른 글
[SuNiNaTaS] 26번 (0) | 2020.12.14 |
---|---|
[SuNiNaTaS] 21번 (0) | 2020.12.13 |
[SuNiNaTaS] 19번 (0) | 2020.12.12 |
[SuNiNaTaS] 18번 (0) | 2020.12.11 |
[SuNiNaTaS] 15번 (0) | 2020.12.10 |