본문 바로가기

Wargame/Reversing-W

reversing kr Replace

처음 파일을 다운로드받으면 Replace.exe 파일 하나가 주어진다.



실행하면 이렇게 입력받는 부분이 있다. 아마 검사해서 맞으면 Correct 라고 띄워주겠지.

유의할점은 숫자만 입력가능하다 공백도, 문자도 다 불가능하다.



아무 숫자나 입력하고 Check를 눌렀을때.. 뻑난다..



올리디에 던져서 성공문을 찾아보았다. 없다.

의심가는건 맨위의 h4`~~ 정도?



GetDlgItemInt는 숫자를 받아오는 함수이다.

입력을 숫자로만 할 수 있었으니까, 여기에 브레이크포인트를걸고 살펴보도록하자.



GetDlgItemInt 함수에 브레이크포인트를 건 상태에서 1111을 입력하고

Check를 눌러주었다.



걸렸다. 사진을 대충 설명하자면

GetDlgItemInt 함수에서 받아온 숫자를

4084D0 에 저장하고나서

0040466F를 호출한다. 그 안에서 무언가 연산이 일어나고 EAX를 비워주고

00404690으로 점프한다.

그리고 00401084로 점프한다.

0040466F 함수 안으로 들어가보았다.

아까 EAX를 저장한 4084D0을 가지고 연산을 진행하는데

정리하자면 이렇다

값 1증가 -> 1증가 -> 601605C7증가 -> 1증가 -> 1증가

그리고 바로 뻑이나는 그 부분이다.

그럼 왜 뻑이날까? 위 코드만보면 문제가되지 않는다. EAX에 90으로

즉, NOP으로 채워주는것 뿐이니까.

문제는 이렇다. 1111이나 작은수를 입력했을때, 위의 1증가 1증가 ... 이 연산을 모두 마치면

EAX에 6016~~~ 값이 있게 되는데 실제로 프로그램 안에서는

그 주소 값이 존재하지 않으므로 뻑이 나는 것이다.

고로 뻑이 안나려면 큰 수를 입력해주면 된다.

이 부분을 이용하면 성공문을 출력할 수 있다.

위의 연산을 다시 살펴보자

값 1증가 -> 1증가 -> 601605C7증가 -> 1증가 -> 1증가

그리고 이 사진을 다시보자.

SetDlgItemTextA 함수를 실행시키면 무언가를 출력하는데

아까 성공문으로 의심됐던 h4` ~~ 가 있다.

실제로 저게 성공문으로 연산되고 그게 출력된다.

그렇다면 00401071부분의 JMP문을 무력화시켜야 저 부분으로 넘어간다.

위의 0040466F 부분에서 EAX를 NOP으로 채워주는걸 이용하면 된다.

EAX에 00401071을 저장하게끔 만들어주면 NOP으로 채워지고 성공문이 출력된다.

즉, x(입력하는 수)+4+601605C7 = 401071 여기서 x를 구하면 된다.

Correct! 끝.


반응형

'Wargame > Reversing-W' 카테고리의 다른 글

reversing kr ransomware  (0) 2017.07.12
reversing kr ImagePrc  (0) 2017.07.11
reversing kr Music Player  (0) 2017.07.10
reversing kr Easy ELF  (0) 2017.07.10
reversing kr Easy Unpack  (0) 2017.07.10