일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C언어 알고리즘
- 백준알고리즘
- 신경망구현
- 파이썬
- 스트림암호
- 활성화함수파이썬
- 밑바닥부터시작하는딥러닝
- 머신러닝
- BOJ
- BOF
- 정보보안
- 신경망 학습
- 8086CPU레지스터
- c언어
- C언어알고리즘
- 항등함수
- 딥러닝
- 버퍼오버플로우
- C알고리즘
- 달고나bof
- 백준
- 신경망파이썬
- 보안
- 신경망
- 인공지능
- 딥러닝파이썬
- 소프트맥스함수
- FTZlevel10
- 알고리즘
- 파이썬신경망
- Today
- Total
목록<CTF> (95)
HeeJ's
문제 화면 아무 값이나 입력하고 실행파일을 설치한 후, 실행시켜주면 register가 등록되지 않았다는 문자열이 출력된다. 메인 화면에서 [?] - [Register]에 들어가면 키를 등록할 수 있으며, 설치 시 등록한 키 그대로 OK를 누르면 오류 문자열과 함께 팝업이 뜨게 된다. 올리디버거로 파일을 바로 열어보았다. 우선, UNREGISTERED! REGISTER NOW!라는 문자열을 없애 주려고 한다. 문자열 검색을 통해 위치로 이동해주었다. 바로 위에 분기문을 찾을 수 있었다. 실행을 시키며 FLAG를 보게되면 조건이 맞지 않기 때문에 분기가 진행되지 않는다. 조건을 따지지 않고 점프를 하기 위해 JNZ를 JMP로 고쳐준다. 실행 결과 그리고 아까 확인했던 register key를 register..
소스코드에 별 다른 것은 없었다. script를 입력 칸에 바로 넣어주었더니 no hack이라는 문자열을 확인할 수 있었다. 한 글자 혹은 숫자는 그냥 있는대로 출력해준다. 문자 길이 필터링을 우회해서 문제를 풀어주면 된다. 그래서 NULL을 뜻하는 %00을 넣어 문자들을 출력해보았다. 의 문자들 사이에 일일이 %00을 넣어 실행시켜주었다. 문제 해결
레나 3번 문제를 풀기 위해서는 nags를 제거하라는 문자열을 확인했다. nag를 제거하기 전에, PE 구조를 먼저 살펴본다. 레나 튜토리얼 3번 문제 RegisterMe.exe를 PEView를 이용해 열어주었다. PEView는 왼쪽에 PE 파일의 구조와 오른쪽에 파일들을 Byte로 표시한 것을 확인할 수 있다. 레지스터의 헤더 먼저 살펴보았다. 가장 위에는 윈도우 exe 파일의 헤더 시그니쳐인 MZ를 확인할 수 있다. MS-DOS Stub Program은 이 프로그램을 DOS 모드에서도 사용할 수 있는지 알려준다. 문자열을 보면 This program cannot be run in DOS mode 라고 적혀있다. 즉, 이 파일은 도스 모드에서 실행되지 않는다. 다시 IMAGE_DOS_HEADER에서 마..
2번 reverseMe.exe를 실행시켰는데, 바로 Congratz가 뜨기에 당황했지만, 잘 보면 폴더에 Keyfile이 존재한다. 이 파일을 만드는게 2번 문제의 목적이라고 한다. keyfile을 지워주고 다시 실행시켜보았다. 그러자 라이센스가 만료되었다고 새 라이센스를 구입하라는 창이 떴다. 올리디버거로 열어보았다. [F8]로 실행 시키다가 보니, CreateFileA라는 함수가 나왔다. CreateFileA 함수는 '파일 또는 I/O 장치를 만들거나 여는 것'을 수행한다. 여기서 "Keyfile.dat" 파일을 불러오는 것 같다. 계속하여 실행해주더니 Keyfile이 없어서인지 오류 메세지가 출력되고, 프로세스가 종료되었다. 그렇다면 Keyfile.dat를 생성하고, 이에 라이센스가 들어가 있다면 ..
레나 튜토리얼 다운로드 https://github.com/re4lfl0w/lena_reversing lena tutorial 01번 문제 Reverse Me.exe를 실행 시키면 위와 같은 창이 뜬다. Ollydbg로 열어준 후, 우선 프로그램의 흐름을 이해하기 위해 F8로 계속 실행시켜 보았다. 이 부분에서 Jump is NOT taken이라는 것을 보면, 위의 CALL 함수 내부에서 시리얼 값과 입력 값을 비교해 아래 CMP문을 통해 Jump로 구분된다는 것을 유추해볼 수 있다. 그 상태로 프로그램을 그냥 실행시켜 보았더니, 라이센스를 구매하라는 창과 함께 프로세스가 종료되었다. 다시 아까 그 JMP문으로 와서 Zflag를 0으로 바꾸어 JMP가 실행되도록 해주었다. 아래의 ReadFile 내에서도 ..
문제 화면을 보면 nickname, comment, captcha 라는 세 가지 입력 창이 있고, submit 버튼과 reset 버튼을 확인할 수 있다. 우선 세가지 입력 창에 무슨 값이 들어가야하는지 알기 위해 소스코드를 보았다. submit 버튼을 누르면 ck() 함수가 호출되는 것을 확인할 수 있다. ck() 함수를 살펴보면 nickname, comment, captcha 값에 공백이 있다면 바로 return 해주는 것을 확인할 수 있다. 그렇기 때문에 세 칸은 모두 채워져있어야 하며, captcha 값은 특정한 값임을 알 수 있다. captcha에 들어가야할 값이 lv5frm.captcha_.value인 것 같아 개발자도구의 콘솔을 통해 값을 확인해 주었다. captcha의 텍스트 박스 옆에 쓰여..
두 번째 문제인 collision에 접속 실습 환경 : VMware Workstation / KaliLinux 2021.3 이번에도 저번 fd 문제처럼 col 실행파일, c파일과 flag를 확인할 수 있다. 바로 cat 명령어를 통해 col.c를 읽어보았다. 코드를 읽어보니 일단, 인자는 20bytes여야 한다. 그리고 check_password()함수를 통해 hashcode와 같은 값을 출력하게 되면 flag를 얻을 수 있다. check_password 함수에서 int형 포인터로 변환했기 때문에 4bytes씩 5번 접근한다는 걸 확인할 수 있다. 그렇다면 hashcode를 5로 나누어 5번 20bytes로 늘려 입력해준다면 flag를 얻을 수 있다. 21DD 09EC를 5로 나누면 6C5 CEC8이다...
fd 문제에 접속했다. 실습 환경 : KaliLinux 2021.3 dir 명령어를 통해 현재 있는 디렉터리를 확인했다. flag라는 파일을 발견해 cat을 통해 flag를 확인하려 했다. 하지만 권한이 없어 거부되었다. fd.c를 읽어보니, flag를 직접 실행시키는 것이 아닌 조건을 맞추어 system으로 실행시키는 문제인 것 같다. *atoi() 더보기 * atoi() a to i 로 읽을 수 있다. 즉, char to int. 문자열을 정수타입으로 바꿔주는 함수이다. 우선 함수를 실행시킬 때 값을 입력해주어야 한다. 이 입력 값을 정수타입으로 바꿔준 후, 0x1234를 빼준다. 그리고 그 값(fd)이 read 함수의 인자로 들어가게 된다. 그 후, 입력한 문자열이 'LETMEWIN'과 동일하다면,..