일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 포너블
- docker
- sequelize
- 스프링 배치
- 시스템 해킹
- 사이버보안
- 프로그래머스
- Batch
- hackctf
- webhacking.kr
- nodejs
- 회고
- 웹보안
- 백준
- kotest
- gcp cloud build
- gcp
- spring Batch
- Python
- pwnable.xyz
- 보안
- programmers
- gcp ci/cd
- cloud run
- 파이썬
- 웹해킹
- 네트워크
- Baekjoon
- node.js
- 리버싱
uju's Tech
[HackCTF]reversing_strncmp 본문
<본 포스팅은 공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!
writeup이므로 편하게 작성하였습니다!>
파일 확인 해보니
elf 64 비트 실행 파일 임을 알았다.
chmod 777 권한을 부여하여 실행해보자!
실행
실행해보니 input을 받고 그에따라 값을 내보내는것 같다.
그렇다면 조건문에서 내 input과 어떠한 값을 확인하고 분기하여 값을 출력함을 알 수 있다.
먼저 디버깅을 해보자~!
main 디버깅
strcmp비교해서 분기
strcmp에서 비교 후 분기하는것을 확인할 수 있다.
브레이크 포인트를 main+185에 걸어주자1
r 으로 실행!
실행화면
내가 입력한 dddddd와 비교하는 값을 레지스터를 통해 확인하였다.
레지스터 확인
얼핏 보니 OfdlDSA|3tXb32~X3tX@sX`4tXtz 랑 비교를 해서 같으면 good game을 출력해준다.
goodgame!
그렇다면 여기서 우리는 비교하는 값이 OfdlDSA|3tXb32~X3tX@sX`4tXtz 임을 알았다.
이제 ida를 살펴보자!
ida에서 strcmp함수를 살펴보자,
strcmp함수
반복문이 2개가 있는데 2번 째 반복문을 보면 내가 입력한 값에 key를 xor연산 해준것을 a1배열에 넣어주어서 strncmp로 return 해준다.
그럼 key값이 무엇인지 확인해보자.
key는 check함수에서 생성이 된다.
check
이 함수에서 조건문을 살펴보면 -49 이면 v3가 key아니면 key가 0으로 해준다.
저 연산을 만족하는 key는 금방 눈에 보인다. 7*(-7) = -49
key는 7이다.
역연산 코드를 짜보자.
arr과 key값을 xor연산하면 flag가 나온다.
끝!
'Security > HackCTF' 카테고리의 다른 글
[HackCTF]reversing_Handray_쉬운 풀이 version (0) | 2020.06.13 |
---|---|
[HackCTF]reversing_Handray (0) | 2020.06.13 |