본문 바로가기
[포렌식]/[SuNiNaTaS]

[SuNiNaTaS] 28번 & 나중에 다시보기

by Hevton 2020. 12. 16.
반응형

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로 파일을 열었을 때엔 문자열들이 직관적으로 읽히는 순서였던 건 다 뭐지..?? 모르겠다.

 

-> 아마 이게 도움이 될지도

kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=185&dbnum=127994&mode=detail&type=techreport

 

데이터 기술 동향 < 정보마당 - 한국데이터산업진흥원

엔디안 방식에 구애 받지 않는 C 코드 작성하기 엔디안 방식에 발목을 잡히지 말자 아키텍처, 프로세서, 네트워크 스택, 통신 프로토콜은 모두 어느 시점에서 엔디안 방식을 정의해야 합니다. 이

kdata.or.kr

huammmm1.tistory.com/469

 

리틀엔디안에서의 int형 값과 char string값의 저장 차이

참고 자료 : http://teaching.idallen.com/cst8281/10w/notes/110_byte_order_endian.html http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html http://stackoverflow.com/questions/1568057/asc..

huammmm1.tistory.com

 

메모리 그림 참고 :

genesis8.tistory.com/37

 

리틀 엔디안 VS 빅 엔디안

먼저 둘을 비교하기에 앞서 엔디언이란 무엇인가? 엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히

genesis8.tistory.com

preventionyun.tistory.com/7

 

little endian과 big endian

#include /* Little, Big endian 데이터가 실제 메모리에는 어떻게 저장될까? */ void main(void) { int a = 0x01234567; /* a는 스택영역에 저장될 것이다. int형은 4byte이기 때문에 (주소는 편의상 0x1000 이라..

preventionyun.tistory.com

아직까지는, 내가 알던 스택에서의 메모리 구조 방식을(배열 메모리 방식 포함)기반으로 해서, 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