본문 바로가기
Security/Reversing

x64dbg 기본 사용법

by jino22 2020. 12. 17.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 

 

x64dbg에서 기본 사용법 및 main함수 찾기, easy_crackme1.exe 파일 분석


기본 사용법

  • 따라가기 기능 
    - call, jmp, jcc와 같은 PC변경 명령어는 [enter] 키를 이용하여 이동
    - mov, lea와 같은 주소 참조 명령어는 해당 주소 > 오른쪽 마우스 > 디스어셈블러에서 따라가기 혹은 덤프에서 따라가기
  • 레이블 및 주석 달기
    - 레이블 :함수나 변수, 즉 해당 주소에 이름을 붙임 [:] 키를 이용하여 지정
    - 주석 :해당 주소에 설명을 붙임 [;] 키를 이용하여 지정
  • 그래프로 보기 
    - 보고자 하는 함수에서 오른쪽 마우스 > 그래프 보기 혹은 [g] 키
    - 빠져나갈 땐 오른쪽 마우스 > Follow in Disassembler
    * 초록색 선: jcc명령어에서 분기를 취했을 때 가는 노드

       빨간색 선: jcc명령어에서 분기를 취하지 않았을 때 가는 노드
       파란색 선: 항상 분기를 취하는 노드

  • Fx 아이콘 :분석된 함수들 모음
    함수 분석 =해당 함수 오른쪽 마우스 > 분석 > 모듈분석 (ctrl + A)

main 함수 찾는 방법

  •  Az 아이콘 :모듈내 문자열을 참조하는 어셈블리어 검색
    해당 문자열을 참조하는 어셈블리어의 주소와 내용을 알려줌
    hello world 문자열을 참조하는 부분을 더블클릭하면 main 함수로 이동

 

  • 핸드폰 모양 아이콘 :모듈간 함수 호출
    puts 함수를 호출하는 부분을 더블클릭하면 main 함수로 이동

* TCP 패킷을 처리하는 함수

 - windows =WSARecv

 - Linux =recv, recvfrom

* PDF를 처리하는 함수

 - PDF의 시그니처인 %PDF 검색

 - windows =ReadFile

 - Linux =read와 같이 파일을 읽어오는 함수 호출 부분 찾기


분석 순서

easy_crackme1.exe파일

 

프로그램에 로드 > 모듈 분석 > main 함수 찾기 > main함수 분석 > 입력받은 데이터를 처리하는 함수로 추측되는 sub_140001180함수 분석 > 분석한 내용을 바탕으로 답을 구하기 위한 코드 작성

main함수

sub_140001180 함수 분석 ↓

더보기

각 노드를 확인해본 결과 correct로 가려면 eax가 1이어야 함. (eax=1 > ZF=0 > je명령어를 통해 main 함수 그래프에서 빨간 선으로 표시된 노드로 감) 즉 correct 결과를 출력하려면 sub_140001180함수에서 eax값을 1로 만들어줘야 하므로 easy_crackme1.~11E8 노드로 가야 함.

correct 노드로 가기 위한 조건을 정리해보면

- [rsp+20] (=ecx) 가 2000보다 작거나 같고, [rsp+28] (=edx)가 2000보다 작거나 같아야 함.

- [rsp] = [rsp+20] * [rsp+28] = 6ae9bc 이어야 함.

- [rsp+4] = [rsp+20] / [rsp+28] = 4 이어야 함.

- [rsp+8] = [rsp+20] ^ [rsp+28] = 12fc 이어야 함.

// 비효율적인 코드인듯.. XOR의 특징을 이용해서 좀 더 효율적인 코드를 작성할 수 있다고 한다 > 수정 예정!
// 답은 5678 1234

for i in range(0x2000 +1):
    for j in range(0x2000+1):
        if i*j == 0x6ae9bc:
            if i//j==4:
                if i^j==0x12fc:
                    print(i,j)

 

 

 

참고: dreamhack의 리버싱 강의

728x90
반응형

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

PEB TEB  (0) 2021.02.02
Abex crackme #2 / ollydbg 단축키  (0) 2021.01.25
Reversing Basic Challenge #1  (0) 2020.12.20
Reversing Basic Challenge #0  (0) 2020.12.19
레지스터 명령어  (0) 2020.12.01

댓글