basic_rop_x64 이 문제는 서버에서 작동하고 있는 서비스(basic_rop_x64)의 바이너리와 소스 코드가 주어집니다. Return Oriented Programming 공격 기법을 통해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. # 문제 분석 - 소스 코드 main 함수에서 read 함수와 write 함수를 사용함 둘 중 하나의 GOT를 읽어 libc.so.6가 매핑된 영역의 주소를 구하고, 이를 통해 system 함수의 주소를 얻을 수 있을 것 데이터를 읽어들일 수 있는 함수는 read 함수이며 이를 통해 system 함수의 주소를 구하게 된다면 이미 ROP 페이로드가 ..
Reversing Engineering - 5. hello-world로 배우는 x64dbg 사용법 # 프롤로그 - hello-world.cpp // hello-world.cpp #include void main(){ puts("hello world!\n"); } # x64dbg 기본 설정 - x64dbg로 hello-world.exe를 열면 아무런 설정을 안했을 경우 아래와 같이 뜸 > 박스 부분을 살펴보면 현재 ntdll부분에 멈춰있는 것을 알 수 있음 > 이는 x64dbg가 기본적으로 시스템 중단점 설정이 켜져있기 때문 - 설정 - 환경설정으로 들어가서 아래 사진과 같은 창에서 시스템 중단점 설정을 변경해야 함 > 위의 창에서 박스로 표시된 옵션을 해제하면 됨 > 이후 디버깅 프로그램을 재시작하면 시..
Reversing Engineering - 2. x64 기초 1. Introduction # Intorduction - 디스어셈블 과정을 거쳐 나온 어셈블리 코드를 이해하기 위해 어셈블리 코드에 대해 공부할 것 - 어셈블리 코드는 기계 코드와 1:1 대응 - 기계 코드가 실제로 동작할 CPU에 따라 기계 코드 역시 달라지게 됨 > CPU에 따라 어셈블리 코드도 다름 2. 들어가기에 앞서 # Instruction Cycle - 어셈블리 코드는 기계 코드와 대응되므로, 기계 코드가 동작할 CPU가 어떤 역할을 하고 어떻게 동작하는지 알아보는 것이 어셈블리 코드를 이해하는데 도움이 됨 - CPU의 기본적인 동작 과정 > CPU: 다음 실행할 명령어를 읽어오고(Fetch) → 읽어온 명령어를 해석한 다음(Dec..