Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Tags
more
Archives
Today
Total
관리 메뉴

kaka09

Reversing.kr Replace Write Up 본문

Reversing

Reversing.kr Replace Write Up

kaka09 2017. 11. 2. 06:23

[사진]4-1



Replace 란 제목의 실행파일이 주어졌다. 실행하면 무언가 입력값을 받을 수 있는데 오직 숫자만 받을 수 있다. 숫자를 입력하고 Check 버튼을 누르면 위 사진처럼 에러가 발생한다. 처음에는 호환성 문제인줄 알고 다른 컴퓨터에서도 실행해봤지만 똑같이 에러가 발생했다.. 먼가 싶어서 인터넷을 찾아보다 그냥 의도된 에러라고 한다.. 즉 일부러 이렇게 만들었다는 이야기인데.. 왜 그런지 알기 위해 디버깅을 시도했다.





[사진]4-2


숫자를 입력하고 check를 클릭했을 때 0040466F의 명령을 실행하는데.. 문제는 EAX에 적재되어 있는 값 즉, 60160646 이라는 주소에 NOP를 덮어 쓴다는거다. 60XXXXX으로 시작하는 주소는 당연히 접근할 수 없다. 접근할 수 없는 영역에 값을 덮어 쓰려고 하니 당연히 에러가 난 것이다.!! 그렇다면 이제 해야할 일은 값을 입력할때 쓰기가 가능한 영역에 데이터를 덮어 씌우는 방법을 찾아야 한다.  다음 사진을 참고하자



[사진]4-3


왼쪽순으로 1~5까지 입력 했을때 EAX값의 결과를 나타내는 사진이다. 여기서 알 수 있는것은 값이 +1씩 증가할때 마다 EAX의 값이 점점 증가한다는 것이다. 이를 토대로 많은 양의 값을 입력하여 EAX를 오버플로우 시키면 내가 원하는 주소로 가리키게 할 수 있다. 하지만 어느 주소에 값을 덮어 씌워야 하는지가 아직 남아있다. 일단 성공 로직을 찾아 보기로 하자




[사진]4-4


성공 로직은 00401073~0040107E 영역 까지이다 인자로 사용되는 ASCII는 "correct" 라는 문자열인데 올리디버거의 문제인지 아니면 다른 문제인지 몰라도 문자열이 깨진것 같다. 문제는 00401071주소에 들어있는 명령어이다. 00401084로 무조건 분기하는 명령문이기 때문에 사실상 성공 로직에 접근할 수가 없다. 따라서 값을 입력할때 EAX를 오버플로우 시켜서 00401071이 되도록 조작을 시켜야 한다.



공식은 다음과 같다.

   0xFFFFFFFF

-  0x601605CB

------------------

  0x‭9FE9FA35‬(2682911284)

+0x401072(4200193)

-------------------

  0x‭A02A0AA6‬(2687109798)



입력창에 2687109798 값을 넣으면  어떻게 되는지 직접 디버깅으로 확인해보자

[사진]4-5


EAX가 00401071로 바뀌었다. 이렇게 되면 00401071주소에 NOP가 삽입이 되어지면서 강제 분기문을 우회할 수가 있다.




[사진]4-6



[사진]4-4 와 비교해보자 00401071~72까지 NOP로 덮어씌워진걸 확인할 수 있다. 이로서 성공로직에 접근이 가능해지면서 문제풀이에 성공하였다.


[사진]4-7




'Reversing' 카테고리의 다른 글

Reversing.kr Imageprc write up  (0) 2017.11.10
Reversing.kr Easy_UnpackMe Write up  (0) 2017.11.02
Reversing.kr Easy_Keygen Write Up  (0) 2017.11.01
Reversing.kr Easy_CrackMe Write Up  (0) 2017.11.01
code engn basic 18  (0) 2017.08.03