eli_ez3r
eli_ez3r
eli_ez3r
전체 방문자
오늘
어제
  • 분류 전체보기 (202)
    • 0x01 끄적끄적 :) (57)
      • Network (5)
      • Security (14)
      • Reversing (2)
      • Forensic (5)
      • Operation System (10)
      • Development (10)
      • Solution (7)
      • 보안 상식 (3)
    • 0x02 Study :) (127)
      • Pwnable (59)
      • Webhacking (56)
      • Reversing (11)
      • Machine Learning (1)
    • 0x03 ETC :) (16)
      • IT Unpacking (5)
      • IT Information (1)
      • Enjoy (4)
      • Etc (6)
    • Admin :) (0)
      • 0x01 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • github.io 블로그 개설

인기 글

태그

  • pwnable
  • 메모리
  • hack
  • attack
  • buffer
  • LEVEL
  • 공격
  • 문제풀이
  • write
  • school
  • LOB
  • Up
  • overflow
  • hacker
  • 해킹
  • 해커
  • 패스워드
  • 풀이
  • hacking
  • password
  • 스쿨
  • 설명
  • web
  • webhacking.kr
  • hakcing
  • 암호
  • 문제
  • 오버플로우
  • BOF
  • 과정

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
eli_ez3r

eli_ez3r

[CodeEngn]Basic RCE_Level 05 문제풀이
0x02 Study :)/Reversing

[CodeEngn]Basic RCE_Level 05 문제풀이

2018. 4. 10. 23:07

Level 05를 풀어보자.



단순히 Serial Key를 찾는 문제인것 같다.


프로그램을 실행시켜보자.



입력창이 2개가 있다. 추측건데 윗부분은 User Name  부분이고, 아랫부분은 Serial 부분인것 같다.


'Register now !' 키를 눌러보면,


다음과 같은 메시지창이 뜬다.


올리디버거로 실행하여 보자.



compressed 를 감지했다는 메시지가 뜬다. 즉, 실행파일압축되어 있다.





PEiD와 PEview로 확인해보니 UPX로 실행압축 되어 있음을 확인 할 수 있다.


올리디버거에서 UPX압축 해제할 수도 있지만, UPX unpack 프로그램을 사용하면 쉽게 압축해제 가능하다.


upx391w.zip


해당 파일은 upx 실행 파일이 있는 곳으로 옮기고 다음 명령어를 입력하자.



05.exe 파일을 upx 압축해제하여 05_un.exe파일로 저장하는 명령어이다.



정상적으로 어셈블리어가 보여짐을 알 수 있다.


이제 압축해제된 파일로 리버싱을 진행하면 된다.



코드 한줄씩 진행하다 보면 다음과 같은 함수를 만나게 된다.


String 정보를 보면 Name 과 Serial 정보를 확인하여 메시지가 출력되는 것을 볼 수 있다.


또한, String 정보를 보면 "Registered User"와 "GFX-754-IER-954"라는 값이 보이게 된다.


해당 정보를 프로그램에 넣고 실행해 보면 성공하는 것을 알 수 있다.







String 정보가 있던 함수로 와서 시작부분에 BP를 설정하고 하나씩 분석하여 보자.



위에서 사각박스 부분에서 Name부분에 값이 있는지, Serial부분에 값이 있는지 확인하고 없으면 "No Name entered", "No Serial entered" 등의 메시지가 출력하게 된다.



사용자가 입력한 값(EBP-4)의 주소를 EAX에 MOV하고, "Registered User"의 String이 담긴 주소를 각각 EDX에 MOV한 뒤,

함수를 호출한다.


해당 함수로 들어가보자.



중요부분은 네모 부분이다. 함수로 넘겨받은 EAX값을 ESI에 넣고, EDX값을 EDI에 넣고 비교를 한다.


그리고 본격적으로 2번째, 3번째 네모부분에서 String값을 4바이트씩 비교한다.


이 함수는 Name과 Serial모두 사용자와 입력한 값과 비교할 때 사용되는 함수이며,


이 함수를 리버싱 하면 Name값과 Serial값을 알아 낼 수 있다.


저작자표시 비영리 변경금지 (새창열림)
    '0x02 Study :)/Reversing' 카테고리의 다른 글
    • [CodeEngn]Basic RCE_Level 07 문제풀이
    • [CodeEngn]Basic RCE_Level 06 문제풀이
    • [CodEngn]Basic RCE_Level 04 문제풀이
    • [CodEngn]Basic RCE_Level 03 문제풀이
    eli_ez3r
    eli_ez3r

    티스토리툴바