Lena Tutorial 1단계

Security/Reversing

레나 튜토리얼 1단계 ReverseMe 패치(win 10, x96dbg 기준)

 

1. 아무런 패치 없이 ReverMe를 실행시키면 Evaluation period out of date. Purchase new license 라고 나옴.

 

2.  ReverseMe를 디버거로 켜서 모든 참조된 문자열을 살펴본다. 대충 세가지가 보이는데 패치 없이 실행했을 때 나오는 새로운 라이센스 구입 문구, 키 파일이 유효하지 않다는 문구, 해냈다는 문구. 앞의 두가지 문구는 오류메세지이기 때문에 마지막 문구를 보는 것이 목표. 따라서 이 문구들이 나오는 줄을 알아보면 첫번째는 40107D, 두번째는 4010F7, 마지막은 401205이다.

 

3. 위의 문자열을 발생시키는 코드의 줄은 40107D인데 그 이전으로 이동해 어떻게 실행되는지 알아보면 keyfile.dat 파일이 있는지 확인해서 없다면 EAX에 -1(FFFFFFFF)을 반환한다. 이후 eax와 -1(FFFFFFFF)을 비교하여 jne 명령어로 40109A주소로 점프하거나 Evaluation period out of date. Purchase new license 문자를 출력한다. 따라서 이 jne를 je 혹은 jmp로 바꿔주면 정상적으로 넘어감.

 

4. 명령어를 바꿔 40109A로 넘어왔다면 keyfile을 읽는 함수를 실행함. 나는 코드를 바꿔 넘어왔으니 keyfile이 없어 정상적으로 함수의 반환이 이루어지지 않음. 그래서 ReadFile 함수를 거치면 EAX에 0이 반환되는데 이후 test구문을 사용하고 피연산자인 EAX가 0이기때문에 ZF가 세트된다. 따라서 그 이후에 있는 4010B0 줄의 jne 분기문에서 점프하지 않고 그 다음줄에 있는 jmp 4010F7이 실행되게 되는데 4010F7의 주소로 가보면 keyfile is not vaild. sorry 라는 문자열을 출력하며 실패하는 것을 알 수 있다. 따라서 위의 jne 분기문을 je 혹은 jmp로 바꿔주면 정상적으로 넘어감.

 

5. 계속 F8을 눌러 전진하다보면 4010B8줄에서 cmp 402173, 10 이 있는데 402173주소에 있는 데이터와 16진수 10을 비교하는 구문이다. 밑의 덤프창에서 ctrl + g를 눌러 402173주소로 이동해보면 0이 기록되어있는데 그 밑에 있는 코드 줄이 jl(jump less) 이므로 이 부분이 10보다 작다면 4010F7 줄로 이동하는 것이다. 4010F7은 오류창을 출력하는 부분이니 이 분기문을 nop로 바꿔주면 정상적으로 넘어감.

 

6. 마지막으로 4010D3 줄을 보면 ESI와 8을 비교하는 구문이 있다. 그 결과로 ESI가 더 작다면 4010F7로 점프하게 되는데 이 곳은 오류 메세지를 출력하므로 점프하면 안되기 때문에 nop로 코드를 바꿔주면 그 다음줄에서 jmp 401205로 점프하기 때문에 성공적으로 완료됨.

 

이후 바뀐 부분을 드래그하고 우클릭하여 패치하면 새로운 패치파일 생성

'Security > Reversing' 카테고리의 다른 글

리버싱 핵심원리 5장  (0) 2023.03.27
리버싱 핵심원리 4장  (0) 2023.03.27
Lena Tutorial 2단계  (0) 2023.03.27
리버싱 핵심원리 3장  (0) 2023.03.27
리버싱 핵심원리 2장  (0) 2023.03.27
'Security/Reversing' 카테고리의 다른 글
  • 리버싱 핵심원리 4장
  • Lena Tutorial 2단계
  • 리버싱 핵심원리 3장
  • 리버싱 핵심원리 2장
hojoo
hojoo
그냥 개발이 즐거운 사람
  • hojoo
    dev_record
    hojoo
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • Study (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (0)
        • Real MySQL 8.0 (0)
        • 친절한 SQL 튜닝 (0)
        • 도메인 주도 개발 시작하기 (0)
        • 대규모 시스템 설계 기초 (0)
      • Computer Science (68)
        • Problem Solving (30)
        • Data Structure (4)
        • Spring Boot (14)
        • DB (1)
        • Java (4)
        • OS (3)
        • Server (3)
        • Tech (0)
      • Security (16)
        • Reversing (15)
        • Assembly (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DB
    레나 튜토리얼
    PE header
    n+1
    리버싱
    9421
    13265
    DP
    21278
    bean
    servlet
    19622
    16946
    프로그래머스
    HTTP
    서버 증설 횟수
    Lena tutorial
    15973
    소수상근수
    백준
    2539
    Header
    Spring boot
    Reversing
    리버싱 핵심원리
    자료구조
    dreamhack.io
    n^2 배열 자르기
    x64dbg
    12033
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
hojoo
Lena Tutorial 1단계
상단으로

티스토리툴바