파일 prob3을 디스 어셈블 한 뒤 분석해주었다.
정리하자면
srand의 seed값을 time으로 가져서 랜덤 한 값이 초마다 바뀌게 하고,
총 10번 반복되는 for문 안에서 어떤 숫자를 입력받아서 그 값을 10으로 나눈 나머지를 구해서 그 값이랑
랜덤 한 값이랑 비교해서 같으면 계속 반복문을 돌고 아니면 wrong!! 을 출력한 뒤 종료하는 것이다.
그렇게 for문을 다 돌면 flag_generator함수를 호출해서 flag를 구할 수 있다.
c언어로 바꾸면 아래 사진과 같다.
가운데 계산하는 식을 짧게 요약하면 % 10 (10을 나눈 나머지)라고 한다.
for문을 빠져나오면 flag를 얻을 수 있기 때문에 플래그를 얻을 수 있는 함수를 호출하는 명령어의 주소(0x400890)로 점프해서 flag를 얻어주었다.
플래그 :LAYER7{3V4NGEL10N_3.0+1.0_THR1C3_UP0N_4_T1M3}
'Layer7' 카테고리의 다른 글
리버싱 5차시 과제(리버싱해서 C언어로 작성, prob5) (0) | 2022.08.01 |
---|---|
리버싱 5차시 과제(리버싱해서 C언어로 작성, prob4) (0) | 2022.08.01 |
리버싱 4차시 과제(C언어 파일 리버싱, prob2) (0) | 2022.07.27 |
리버싱 4차시 과제(C언어 파일 리버싱, prob1) (0) | 2022.07.27 |
Pwndbg 명령어 (0) | 2022.07.25 |