일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c언어
- 달고나bof
- 딥러닝파이썬
- C언어 알고리즘
- 인공지능
- 스트림암호
- 소프트맥스함수
- BOF
- 버퍼오버플로우
- 보안
- 8086CPU레지스터
- C언어알고리즘
- 파이썬
- BOJ
- 백준
- FTZlevel10
- 신경망파이썬
- 활성화함수파이썬
- C알고리즘
- 항등함수
- 신경망 학습
- 정보보안
- 백준알고리즘
- 머신러닝
- 밑바닥부터시작하는딥러닝
- 신경망구현
- 파이썬신경망
- 알고리즘
- 딥러닝
- 신경망
- Today
- Total
목록<CTF>/<HackCTF> (13)
HeeJ's

문제: 제공된 파일을 다운 받았더니 이런 파일 명이 나왔다. Hex Editor를 이용해서 풀 수 있는 문제인 것 같다. 압축을 풀어준 후, HxD를 이용해 열어보았다. 별 다를게 없는 jpg파일의 헤더 시그니처가 보였다. 이 시그니처에 flag가 숨겨져있을 것 같아 hack이라는 단어를 검색해주었다. 그리고 바로 무난하게 flag를 찾아줄 수 있었다.

문제에 들어있는 c코드를 다운 받기 누르면 새 창에 코드를 띄워준다. serial 값을 인코딩해주는 문장을 찾을 수 있다. 저 내용을 그대로 디코딩 해주면 flag를 찾을 수 있다. 이 flag를 제출하면

ghidra로 babyMIPS 파일을 열 main함수를 찾아주고 내용을 보니, 여러 if문들이 있고, 그 밑에 무언가 flag와 비교하는 듯한 내용이 보였다. 윗 부분에서는 입력받는 값으로 예상되는 acStack36도 찾을 수 있었다. 바로 이 부분이었는데, flag는 data+uStack44*4 XOR uStack44 XOR comp+uStack44*4라는 것을 예측할 수 있다. 이 data 값과 comp 값을 찾기 위해 각각의 변수를 더블클릭 하면 우측 창에 이렇게 00 00 00 사이에 값들이 하나씩 존재하는 것을 확인할 수 있다. 그래서 uStack44 *4를 해주는 것 같다. comp도 찾아주고, 이 값들로 flag를 찾는 코드를 작성해주었다. 실행시켜보면 flag를 얻을 수 있다. 왠지 모르게..

welcome_rev파일을IDA로 열어 주었다. main 함수에서 답이 맞는지 틀린지 분기되는 부분인데, 입력 값과 답을 비교하기 위해 check_password라는 함수가 call 되는 것을 볼 수 있었고, check_password 함수의 그래프를 보면 뭔가 이상한 값이 있는 걸 찾을 수 있었다. 이 값을 더블 클릭해서 자세히 보면 문자열 마지막 =로 끝나는 것을 통해 base64로 인코딩 된 것을 알 수 있었다. (base64 인코딩 과정에 '='문자가 생성되는 이유; 비트 수를 맞춰 원본 바이너리 데이터가 없던 비트가 생기는 것을 방지) 이 문자열을 온라인 디코더로 돌려주면 Flag를 찾았다.

Strncmp라는 파일을 다운받아 기드라로 열어 main함수를 찾아 주었다. main 함수를 보면 변수들을 선언하고, 값을 hex로 넣어주고, scanf로 값을 받아 strcmp_함수로 값을 비교해 일치하면 Good game 일치하지 않으면 Always dig deeper가 뜨는 것 같다. 그래서 strcmp_ 함수를 더블 클릭 해보면 입력되는 parameter 값이 char 형인걸 보아 hex값으로 입력되었던 값을 ASCII코드로 변환해주어야 하는 것 같다. 그리고 그 입력된 값들을 일일이 key 값과 XOR연산 하면서 일치하는지 확인하는 것 같다. key 값은 무엇일까? key 변수를 더블 클릭 해보면 strcmp_함수와 check함수에서도 나오는 걸 확인하고, check 함수를 찾아 들어가봤다. 이..