ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Lenas Reversing for Newbies] 01
    Wargame/Lenas Reversing 2021. 1. 26. 01:59

    1. 프로그램 실행

    실행 화면

    위와 같은 메시지 박스가 나오고 확인을 누르면 프로그램은 그대로 종료된다. OllyDbg로 바로 분석을 해보자.

     

    2. Debugging(with OllyDbg)

    디버깅 초기화면

    Stub Code 없이 바로 프로그램 코드를 확인할 수 있다. "Search for All referenced Strings"를 이용해 패치했을 때 나올 수 있는 문자열을 확인해보자.

     

    참조되는 문자열

    동그라미 친 부분이 패치했을 때 나와야 할 문자열로 보인다. 해당 부분으로 이동해보자.

     

    크랙 성공시 실행되는 코드

    위와 같이 메시지 박스를 출력한다. 분기 지점을 찾아 조건에 상관없이 위 코드의 시작 지점인 00401205 주소로 JMP 하도록 코드를 수정해보자.

     

    첫 조건 검사 & 분기

    코드를 조금 실행하다 보면 위와 같이 조건 검사 및 점프를 하는 코드를 확인할 수 있다. 해당 지점에서 원본 파일은 "Evaluation period out of date..."라는 문자열을 출력하는 메시지 박스 호출 코드로 점프하므로, 해당 코드를 JMP 00401205로 수정하자.

     

    코드 수정

    F9를 눌러 실행시켜보자.

    패치 성공1

    이제 Copy to Executable 기능을 이용하여 패치한 부분을 새로운 파일로 저장하고, 실행해보자.

    패치 성공2

     

    3. Comment

    간단한 문제였음에도 이것저것 배울 수 있었다.

     

    (1) API 공부의 중요성

    이전에 처음으로 간단한 crackMe 파일 등을 리버싱 핵심원리 책에서 실습했을 때, 어셈블리 코드 하나하나 자체는 간단하므로 이해할 수 있었지만 왜 그런 연산들이 필요한지 흐름을 읽지 못하는 경우가 많았다. Window API 공부를 병행하면서 어느 정도 지식을 쌓고 이번 Lenas reversing 1번 문제를 보면서 왜 GetModuleHandle() API를 호출하는지, 이 결과가 어떻게 쓰이는지 등을 알 수 있어서 프로그램의 흐름을 쉽게 파악할 수 있었다.

     

    (2) flag bit

    이전까지는 wargame을 풀면서 JMP 관련 어셈블리 명령어가 나올 때 직전에 나오는 CMP 명령을 주의 깊게 살펴봤는데, flag (carry flag, overflow flag, sign flag) 관찰만으로 점프를 결정하는 것이 굉장히 편리하다는 것을 알았다. 또한 Lenas reversing 강의에서는 OllyDbg에서 flag bit를 더블클릭하여 반전시킴으로 코드의 흐름을 바꿨는데, 여태껏 몰랐던 기능이어서 앞으로 요긴하게 쓸 것 같다.

     

    (3) Ring0 Ring3

    강의에 있던 내용인데 Windows 운영 체제에서의 kernel mode(Ring0) user mode(Ring3)라고 한다. 

    반응형

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

    [Lenas Reversing for Newbies] 06  (0) 2021.02.01
    [Lenas Reversing for Newbies] 05  (0) 2021.01.30
    [Lenas Reversing for Newbies] 04  (0) 2021.01.29
    [Lenas Reversing for Newbies] 03  (0) 2021.01.28
    [Lenas Reversing for Newbies] 02  (0) 2021.01.26

    댓글

Designed by Tistory.