Dreamhack Quiz: x86 Assembly 2

2022. 7. 10. 21:27·보안/리버싱

다음 어셈블리 코드를 실행했을 때 출력되는 결과로 올바른 것은?

[Code]
main:
    push rbp
    mov rbp, rsp
    mov esi, 0xf
    mov rdi, 0x400500
    call 0x400497 <write_n>
    mov eax, 0x0 // eax는 반환값. 즉, return 0 
    pop rbp
    ret
    
write_n:
    push rbp
    mov rbp, rsp
    mov QWORD PTR [rbp-0x8],rdi  //QWORD=8byte
    mov DWORD PTR [rbp-0xc],esi  //DWORD=4byte
    xor rdx, rdx
    mov edx, DWORD PTR [rbp-0xc]  //DWORD=4byte
    mov rsi,QWORD PTR [rbp-0x8]   //QWORD=8byte
    mov rdi, 0x1
    mov rax, 0x1
    syscall
    pop rbp
    ret
    
==================================    
[Memory]
0x400500 | 0x3037207964343372
0x400508 | 0x003f367562336420

write_n 함수 내

  mov rsi,QWORD PTR [rbp-0x8] 는  [rbp-0x8]부터 8byte만큼 참조하여 rsi에 복사한다. 0x400500~0x400508까지의 값이 들어가는 것임.

결국 복사되는 값은 0x3037207964343372 0x003f367562336420

 

syscall은 rax 값과 syscall table을 보고 어떤 함수를 콜하는지 알 수 있다. rax가 1이니 write 함수를 호출함을 확인.

wrtie(unsigned int fd, const char *buf, size_t count)

syscall 시 사용되는 매개변수는 rdi, rsi, rdx, rcx, r8, r9 순서로 사용된다. write에서는 앞 3개가 사용.

 

rdi = 0x01 / rsi = 데이터(0x3037207964343372 0x003f367562336420) / rdx= 0 

write(0x01, 0x3037207964343372 0x003f367562336420,0)

 

※ write 함수의 첫 번째 매개변수가 0x01인 이유: fd =1 이면 stdout으로 출력함을 나타냄.

※ rsi는 파일에 쓸 데이터의 메모리 공간에 대한 포인터. 해당 데이터들이 write된다는 것.

 

그럼 저 데이터를 해석하면 답이 나오겠다.

 

0x3037207964343372 

→ 07 yd43r 

0x003f367562336420

→ 0?6ub3d  

 

이제 거꾸로 읽어보자. (Little Endian)

r34dy 70 d3bu6?

 

저작자표시 (새창열림)

'보안 > 리버싱' 카테고리의 다른 글

reversing.kr - Easy ELF  (0) 2024.08.26
x64 assembly basic  (0) 2022.07.10
86 Assembly: Essential Part(1) quiz  (0) 2022.07.08
#2 동적분석과 정적분석  (0) 2022.07.01
#1 리버싱이란?  (0) 2022.07.01
'보안/리버싱' 카테고리의 다른 글
  • reversing.kr - Easy ELF
  • x64 assembly basic
  • 86 Assembly: Essential Part(1) quiz
  • #2 동적분석과 정적분석
병뚜
병뚜
열정!
  • 병뚜
    열려라 뚜껑
    병뚜
  • 전체
    오늘
    어제
    • all (372)
      • 일상X사랑X돈 (0)
        • 보안이슈 (114)
        • 뜨거운감자 (9)
        • 맛집 (2)
        • 혼잣말 (16)
      • 보안 (87)
        • 웹·모바일 (46)
        • 인프라 (19)
        • 리버싱 (8)
        • Security-Gym (10)
        • 리뷰 (4)
      • 프로그래밍 (66)
        • python (14)
        • java (12)
        • js (40)
      • System (47)
        • OS (14)
        • 침투 (33)
      • Play (20)
        • wargame (20)
      • 기타 (10)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    파이썬초보
    혼공파
    it이슈
    windows internals
    커널디버깅
    악성코드
    리버싱
    IT뉴스
    kisa
    파이썬
    정보보호
    프로세스
    보안뉴스
    파이썬입문
    파이썬공부
    정보보안
    리버싱초보
    정보보안교육
    보안이슈
    jwt
    혼공단
    공급망공격
    윈도우인터널스
    혼공학습단
    랜섬웨어
    자바스크립트 상속
    드림핵리버싱
    혼공
    뉴스요약
    혼자공부하는파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
병뚜
Dreamhack Quiz: x86 Assembly 2
상단으로

티스토리툴바