Reversing - rev-basic-2

Dreamer_01·2022년 8월 19일
0

리버싱 (Reversing)

목록 보기
4/4

이 문제 파일을 다운로드 받은 후에, 디컴파일을 진행한 모습을 보면

이렇게 흐름도가 생성된다.
Input부분에 BreakPoint를 걸고 f9을 눌러서 실행을 해보면 aInput이라는 변수의 값이 lnput: 이라는 것과 그것을 sub_7FF781C111B0 함수에서 사용하는 것을 예측할 수 있을것이다.
그래서 sub_7FF781C111B0 부분을 컴파일해보면

이런식으로 컴파일 되는것을 알 수 있다.

call sub_7FF781C111B0을 통해 sub_7FF722DA11B0함수가 실행되고, call sub_7FF722DA1210을 통해 sub_7FF722DA1210로 연결됨을 알 수 있다.

각각 sub_7FF722DA11B0는 printf함수를, sub_7FF722DA1210는 scanf함수를 뜻함을 알 수 있다.

우리는 sub_7FF722DA1000함수의 리턴값이 0일경우, 참 값을 얻어 Correct 값을 얻음을 알 수 있다.

함수를 살펴보면, 입력값 a1을 받고, if값을 통해 검증을 한뒤, 리턴값을 내주는 것을 확인 할 수 있다.

먼저 i가 0일경우에 aC의 주솟값과 a1의 0번째 값과 바이트 값으로 비교를 하는것을 알 수있다.
그다음 i가 증가하면, 주솟값이 4만큼 증가하여 그 다음 a1의 문자와 비교를 하는 것을 알수 있다. 그럼 우리는 aC의 주소에 접근하여, 4바이트별로 떨어져있는 것을 확인하면 된다.

답은 Comp4re_the_arr4y

0개의 댓글